
ADC Spike2
main.cpp@1:0d866e3f26ab, 2010-03-09 (annotated)
- Committer:
- simonb
- Date:
- Tue Mar 09 16:41:55 2010 +0000
- Revision:
- 1:0d866e3f26ab
- Parent:
- 0:db49fab3bd78
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simonb | 0:db49fab3bd78 | 1 | |
simonb | 0:db49fab3bd78 | 2 | #define SAMPLE_RATE 150000 |
simonb | 0:db49fab3bd78 | 3 | |
simonb | 0:db49fab3bd78 | 4 | #include "mbed.h" |
simonb | 0:db49fab3bd78 | 5 | #include "adc.h" |
simonb | 0:db49fab3bd78 | 6 | |
simonb | 0:db49fab3bd78 | 7 | //Initialise ADC to maximum SAMPLE_RATE and cclk divide set to 1 |
simonb | 0:db49fab3bd78 | 8 | ADC adc(SAMPLE_RATE, 1); |
simonb | 0:db49fab3bd78 | 9 | |
simonb | 1:0d866e3f26ab | 10 | uint32_t adc_max, adc_av, adc_min; |
simonb | 0:db49fab3bd78 | 11 | int snap = 0; |
simonb | 0:db49fab3bd78 | 12 | |
simonb | 0:db49fab3bd78 | 13 | void min_max_av(int chan, uint32_t value) { |
simonb | 1:0d866e3f26ab | 14 | static uint64_t adc_tot, counter = 0; |
simonb | 1:0d866e3f26ab | 15 | static uint32_t adc_max_tmp, adc_min_tmp; |
simonb | 0:db49fab3bd78 | 16 | |
simonb | 0:db49fab3bd78 | 17 | |
simonb | 1:0d866e3f26ab | 18 | int adc_value; |
simonb | 0:db49fab3bd78 | 19 | |
simonb | 1:0d866e3f26ab | 20 | adc_value = adc.read(p20); |
simonb | 1:0d866e3f26ab | 21 | //Update min, max and average records and totals |
simonb | 1:0d866e3f26ab | 22 | if (adc_value > adc_max_tmp) adc_max_tmp = adc_value; |
simonb | 1:0d866e3f26ab | 23 | if (adc_value < adc_min_tmp) adc_min_tmp = adc_value; |
simonb | 1:0d866e3f26ab | 24 | adc_tot += adc_value; |
simonb | 1:0d866e3f26ab | 25 | counter++; |
simonb | 1:0d866e3f26ab | 26 | //If snapshot requested then sample data and reset average |
simonb | 1:0d866e3f26ab | 27 | if (snap) { |
simonb | 1:0d866e3f26ab | 28 | adc_max = adc_max_tmp; |
simonb | 1:0d866e3f26ab | 29 | adc_av = (int)(adc_tot / counter); |
simonb | 1:0d866e3f26ab | 30 | adc_min = adc_min_tmp; |
simonb | 1:0d866e3f26ab | 31 | adc_max_tmp = 0; |
simonb | 1:0d866e3f26ab | 32 | adc_min_tmp = 0xFFFF; |
simonb | 1:0d866e3f26ab | 33 | adc_tot = 0; |
simonb | 0:db49fab3bd78 | 34 | } |
simonb | 0:db49fab3bd78 | 35 | if (snap) counter = 0; |
simonb | 0:db49fab3bd78 | 36 | snap = 0; |
simonb | 0:db49fab3bd78 | 37 | } |
simonb | 0:db49fab3bd78 | 38 | |
simonb | 0:db49fab3bd78 | 39 | //Show a bargraph of ADC value |
simonb | 0:db49fab3bd78 | 40 | void bar(int value) { |
simonb | 0:db49fab3bd78 | 41 | int i, j; |
simonb | 0:db49fab3bd78 | 42 | |
simonb | 0:db49fab3bd78 | 43 | j = (value * 50) / 4096; |
simonb | 0:db49fab3bd78 | 44 | |
simonb | 0:db49fab3bd78 | 45 | if (j > 50) j = 50; |
simonb | 0:db49fab3bd78 | 46 | if (j < 0) j = 0; |
simonb | 0:db49fab3bd78 | 47 | |
simonb | 0:db49fab3bd78 | 48 | for (i = 0; i < j; i++) |
simonb | 0:db49fab3bd78 | 49 | printf("="); |
simonb | 0:db49fab3bd78 | 50 | printf("\n"); |
simonb | 0:db49fab3bd78 | 51 | } |
simonb | 0:db49fab3bd78 | 52 | |
simonb | 0:db49fab3bd78 | 53 | int main() { |
simonb | 0:db49fab3bd78 | 54 | |
simonb | 0:db49fab3bd78 | 55 | printf("\nRequested max sample rate is %u, actual max sample rate is %u.\n", |
simonb | 0:db49fab3bd78 | 56 | SAMPLE_RATE, adc.actual_sample_rate()); |
simonb | 0:db49fab3bd78 | 57 | adc.append(min_max_av); |
simonb | 0:db49fab3bd78 | 58 | |
simonb | 0:db49fab3bd78 | 59 | //Prepare for burst mode on all ADC pins |
simonb | 0:db49fab3bd78 | 60 | adc.startmode(0,0); |
simonb | 0:db49fab3bd78 | 61 | adc.burst(1); |
simonb | 0:db49fab3bd78 | 62 | adc.setup(p20,1); |
simonb | 1:0d866e3f26ab | 63 | adc.interrupt_state(p20,1); |
simonb | 0:db49fab3bd78 | 64 | |
simonb | 0:db49fab3bd78 | 65 | printf("Burst mode, printing once per second...\n"); |
simonb | 0:db49fab3bd78 | 66 | while (1) { |
simonb | 0:db49fab3bd78 | 67 | snap = 1; |
simonb | 0:db49fab3bd78 | 68 | wait(0.5); |
simonb | 1:0d866e3f26ab | 69 | printf ("Min :"); |
simonb | 1:0d866e3f26ab | 70 | bar(adc_min); |
simonb | 1:0d866e3f26ab | 71 | printf ("Av :"); |
simonb | 1:0d866e3f26ab | 72 | bar(adc_av); |
simonb | 1:0d866e3f26ab | 73 | printf ("Max :"); |
simonb | 1:0d866e3f26ab | 74 | bar(adc_max); |
simonb | 0:db49fab3bd78 | 75 | printf("\n"); |
simonb | 0:db49fab3bd78 | 76 | printf("......................................................\n"); |
simonb | 0:db49fab3bd78 | 77 | wait(0.5); |
simonb | 0:db49fab3bd78 | 78 | } |
simonb | 0:db49fab3bd78 | 79 | } |