Simon Blandford
/
ADC_test
Full ADC driver with demo
main.cpp
- Committer:
- simonb
- Date:
- 2010-02-10
- Revision:
- 0:a2562dfbf543
File content as of revision 0:a2562dfbf543:
#define SAMPLE_RATE 150000 #include "mbed.h" #include "adc.h" DigitalOut int_led(LED1); //Initialise ADC to maximum SAMPLE_RATE and cclk divide set to 1 ADC adc(SAMPLE_RATE, 1); //Toggle LED on interrupt void led_toggle(int chan, uint32_t value) { int_led = !int_led; } //Report ADC value on interrupt void print_value(int chan, uint32_t value) { printf("ADC interrupt on pin %u, value=%04u.\n", adc.channel_to_pin_number(chan), (value >> 4) & 0xFFF); } int main() { int i; printf("Requested max sample rate is %u, actual max sample rate is %u.\n", SAMPLE_RATE, adc.actual_sample_rate()); while (1) { //Set up ADC on pin 20 adc.setup(p20,1); //Set up ADC on pin 19 adc.setup(p19,1); wait(1); //Measure pin 20 adc.select(p20); //Start ADC conversion adc.start(); //Wait for it to complete while(!adc.done(p20)); printf("Measured value on pin 20 is %04u.\n", adc.read(p20)); wait(1); //Measure pin 19 adc.select(p19); //Start ADC conversion adc.start(); //Wait for it to complete while(!adc.done(p19)); printf("Measured value on pin 19 is %04u.\n", adc.read(p19)); wait(1); //Append an interrupt handler that prints the channel and value adc.append(print_value); //Measure pin 20 adc.select(p20); //Enable the interrupt adc.interrupt_state(p20,1); //Start ADC conversion adc.start(); //Wait for it to complete while(!adc.done(p20)); wait(1); //Unset pin 20 adc.setup(p20,0); //Togle LED on each converstion. //Should be 12.5KHz on LED for all 6 pins. //Sample rate=150KHz / 6 channels / 2 adc.append(led_toggle); //Prepare for burst mode on all ADC pins adc.startmode(0,0); adc.burst(1); adc.setup(p20,1); adc.setup(p19,1); adc.setup(p18,1); adc.setup(p17,1); adc.setup(p16,1); adc.setup(p15,1); //For burst mode, only one interrupt is required //which can be on any enabled pin. We have enabled all //of them here. adc.interrupt_state(p15,1); printf("Burst mode, printing once per second...\n"); for (i=0; i<5; i++) { printf("%04u %04u %04u %04u %04u %04u\n", adc.read(p20), adc.read(p19), adc.read(p18), adc.read(p17), adc.read(p16), adc.read(p15)); wait(1); } adc.burst(0); adc.setup(p20,0); adc.setup(p19,0); adc.setup(p18,0); adc.setup(p17,0); adc.setup(p16,0); adc.setup(p15,0); adc.interrupt_state(p20,0); adc.interrupt_state(p19,0); adc.interrupt_state(p18,0); adc.interrupt_state(p17,0); adc.interrupt_state(p16,0); adc.interrupt_state(p15,0); printf("\n"); } }