ADC Spike2

Dependencies:   mbed

Committer:
simonb
Date:
Tue Mar 09 16:41:55 2010 +0000
Revision:
1:0d866e3f26ab
Parent:
0:db49fab3bd78

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }