Arduino DUE ADC to DAC Piezo 30 Khz-100Khz
i working on project providing echo response ultrasonic sensors. piezo facing opposite ultrasonic sensor,with foam material in between damp ultrasonic signal reflecting sensor.
event based,read piezo signal[(+) --> a0,(-) --> gnd on arduino due] , after delay(5 ms) drive same piezo through dac0 [(+)---> dac0,(-)--> gnd)
so ultrasonic sensor receives signal (30 khz-100 khz) after delay,thereby calculating distance after time of flight of 5 ms.
int in_adc0,out_dac0; //variables adc,dac values (adc0, dac0)
void setup()
{
//adc configuration
adc->adc_mr |= 0x80; // dac in free running mode.
adc->adc_cr=2; // starts adc conversion.
adc->adc_cher=0x80; // enable adc channels 0
analogreadresolution(12);
analogwriteresolution(12);
//dac configuration
analogwrite(dac0,0); // enables dac0
serial.begin(9600);
}
void loop()
{
//read adcs
while((adc->adc_isr & 0x80)!=0x80);// wait adc0 conversion complete.
in_adc0=adc->adc_cdr[7]; // read data adc0
out_dac0=map(in_adc0,0,4095,695,3425);//4095(0.56,2.76)
//map(x,a,b,c,d) -->an example ...= map(val,0,1024,0,100);
delay(5);
//write dacs
dacc_set_channel_selection(dacc_interface, 0); //select dac channel 0
dacc_write_conversion_data(dacc_interface, out_dac0);//write on dac
serial.println(out_dac0);
}
but unable receive same,can me out going wrong?
event based,read piezo signal[(+) --> a0,(-) --> gnd on arduino due] , after delay(5 ms) drive same piezo through dac0 [(+)---> dac0,(-)--> gnd)
so ultrasonic sensor receives signal (30 khz-100 khz) after delay,thereby calculating distance after time of flight of 5 ms.
int in_adc0,out_dac0; //variables adc,dac values (adc0, dac0)
void setup()
{
//adc configuration
adc->adc_mr |= 0x80; // dac in free running mode.
adc->adc_cr=2; // starts adc conversion.
adc->adc_cher=0x80; // enable adc channels 0
analogreadresolution(12);
analogwriteresolution(12);
//dac configuration
analogwrite(dac0,0); // enables dac0
serial.begin(9600);
}
void loop()
{
//read adcs
while((adc->adc_isr & 0x80)!=0x80);// wait adc0 conversion complete.
in_adc0=adc->adc_cdr[7]; // read data adc0
out_dac0=map(in_adc0,0,4095,695,3425);//4095(0.56,2.76)
//map(x,a,b,c,d) -->an example ...= map(val,0,1024,0,100);
delay(5);
//write dacs
dacc_set_channel_selection(dacc_interface, 0); //select dac channel 0
dacc_write_conversion_data(dacc_interface, out_dac0);//write on dac
serial.println(out_dac0);
}
but unable receive same,can me out going wrong?
the problem mixing direct register access (btw don't use magic numbers), arduino specific language (analogread(), analogwrite()), , libsam/asf functions (dacc_set_channel_selection(),dacc_write_conversion_data()).
once setup done via direct registers access adc, if use analogread() there chance previous code scratched.
i suggest read sections 43 (adc controller) , 44 (dac controller) , use direct register programming.
and use code tags show code (</>)
Arduino Forum > Products > Arduino Due (Moderator: fabioc84) > Arduino DUE ADC to DAC Piezo 30 Khz-100Khz
arduino
Comments
Post a Comment