ADC test for DiscoTech PCB
Dependencies: Terminal adc mbed
main.cpp@0:5c21b4de143f, 2013-09-25 (annotated)
- Committer:
- flash_ahaa
- Date:
- Wed Sep 25 09:16:47 2013 +0000
- Revision:
- 0:5c21b4de143f
ADC test for DiscoTech PCB
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
flash_ahaa | 0:5c21b4de143f | 1 | /* ADC Test |
flash_ahaa | 0:5c21b4de143f | 2 | * |
flash_ahaa | 0:5c21b4de143f | 3 | * Project: DiscoTech |
flash_ahaa | 0:5c21b4de143f | 4 | * HDK/ SDK Eng: Tobias Wulf |
flash_ahaa | 0:5c21b4de143f | 5 | * Date: 21.09.2013 |
flash_ahaa | 0:5c21b4de143f | 6 | * |
flash_ahaa | 0:5c21b4de143f | 7 | */ |
flash_ahaa | 0:5c21b4de143f | 8 | |
flash_ahaa | 0:5c21b4de143f | 9 | #include "mbed.h" |
flash_ahaa | 0:5c21b4de143f | 10 | #include "Terminal.h" |
flash_ahaa | 0:5c21b4de143f | 11 | |
flash_ahaa | 0:5c21b4de143f | 12 | #include "adc.h" |
flash_ahaa | 0:5c21b4de143f | 13 | |
flash_ahaa | 0:5c21b4de143f | 14 | |
flash_ahaa | 0:5c21b4de143f | 15 | #include "stdlib.h" |
flash_ahaa | 0:5c21b4de143f | 16 | |
flash_ahaa | 0:5c21b4de143f | 17 | #define SAMPLE_RATE 48000 //Hz |
flash_ahaa | 0:5c21b4de143f | 18 | #define ADC_BIAS 1.65 //Volts |
flash_ahaa | 0:5c21b4de143f | 19 | #define ULSB 3.3 / 4095 |
flash_ahaa | 0:5c21b4de143f | 20 | #define RESOLUTION 256 |
flash_ahaa | 0:5c21b4de143f | 21 | |
flash_ahaa | 0:5c21b4de143f | 22 | #define MASK 0x07 // for shift register |
flash_ahaa | 0:5c21b4de143f | 23 | |
flash_ahaa | 0:5c21b4de143f | 24 | #define NUMBER_OF_SAMPLES 1024 |
flash_ahaa | 0:5c21b4de143f | 25 | |
flash_ahaa | 0:5c21b4de143f | 26 | /* declair your functions |
flash_ahaa | 0:5c21b4de143f | 27 | * isr routine doesn't have to be declaired |
flash_ahaa | 0:5c21b4de143f | 28 | */ |
flash_ahaa | 0:5c21b4de143f | 29 | void mainInit(); |
flash_ahaa | 0:5c21b4de143f | 30 | |
flash_ahaa | 0:5c21b4de143f | 31 | |
flash_ahaa | 0:5c21b4de143f | 32 | ADC adc(SAMPLE_RATE, 1); |
flash_ahaa | 0:5c21b4de143f | 33 | |
flash_ahaa | 0:5c21b4de143f | 34 | /* Serial communication via usb uplink to pc |
flash_ahaa | 0:5c21b4de143f | 35 | * to display what ever you want in the terminal |
flash_ahaa | 0:5c21b4de143f | 36 | * or to send what ever you want from the terminal |
flash_ahaa | 0:5c21b4de143f | 37 | */ |
flash_ahaa | 0:5c21b4de143f | 38 | Terminal usbPC(USBTX, USBRX); |
flash_ahaa | 0:5c21b4de143f | 39 | |
flash_ahaa | 0:5c21b4de143f | 40 | |
flash_ahaa | 0:5c21b4de143f | 41 | /* global variables to work in the adc interrupt |
flash_ahaa | 0:5c21b4de143f | 42 | * service routine to get the data from interrupt |
flash_ahaa | 0:5c21b4de143f | 43 | */ |
flash_ahaa | 0:5c21b4de143f | 44 | |
flash_ahaa | 0:5c21b4de143f | 45 | double newSample; |
flash_ahaa | 0:5c21b4de143f | 46 | |
flash_ahaa | 0:5c21b4de143f | 47 | bool save; |
flash_ahaa | 0:5c21b4de143f | 48 | |
flash_ahaa | 0:5c21b4de143f | 49 | double adcMin; |
flash_ahaa | 0:5c21b4de143f | 50 | double adcMax; |
flash_ahaa | 0:5c21b4de143f | 51 | double adcAverage; |
flash_ahaa | 0:5c21b4de143f | 52 | double adcSavings[NUMBER_OF_SAMPLES]; |
flash_ahaa | 0:5c21b4de143f | 53 | |
flash_ahaa | 0:5c21b4de143f | 54 | int main() { |
flash_ahaa | 0:5c21b4de143f | 55 | |
flash_ahaa | 0:5c21b4de143f | 56 | usbPC.printf("...start program\n"); |
flash_ahaa | 0:5c21b4de143f | 57 | wait(0.2); |
flash_ahaa | 0:5c21b4de143f | 58 | |
flash_ahaa | 0:5c21b4de143f | 59 | mainInit(); |
flash_ahaa | 0:5c21b4de143f | 60 | usbPC.printf("...init completed\n"); |
flash_ahaa | 0:5c21b4de143f | 61 | wait(0.2); |
flash_ahaa | 0:5c21b4de143f | 62 | |
flash_ahaa | 0:5c21b4de143f | 63 | |
flash_ahaa | 0:5c21b4de143f | 64 | while(1) { |
flash_ahaa | 0:5c21b4de143f | 65 | |
flash_ahaa | 0:5c21b4de143f | 66 | if(save == false) { |
flash_ahaa | 0:5c21b4de143f | 67 | |
flash_ahaa | 0:5c21b4de143f | 68 | usbPC.locate(0,0); |
flash_ahaa | 0:5c21b4de143f | 69 | usbPC.cls(); |
flash_ahaa | 0:5c21b4de143f | 70 | usbPC.printf("Max = %1.4f\tMin = %1.4f\nAverage = %1.4f\tact. Sample = %1.4f\n", adcMax, adcMin, adcAverage, newSample); |
flash_ahaa | 0:5c21b4de143f | 71 | |
flash_ahaa | 0:5c21b4de143f | 72 | for(int i=0; i<NUMBER_OF_SAMPLES; i++) |
flash_ahaa | 0:5c21b4de143f | 73 | usbPC.printf("%1.4f\n",adcSavings[i]); |
flash_ahaa | 0:5c21b4de143f | 74 | } |
flash_ahaa | 0:5c21b4de143f | 75 | |
flash_ahaa | 0:5c21b4de143f | 76 | if(save == false) break; |
flash_ahaa | 0:5c21b4de143f | 77 | |
flash_ahaa | 0:5c21b4de143f | 78 | } |
flash_ahaa | 0:5c21b4de143f | 79 | }/* end main */ |
flash_ahaa | 0:5c21b4de143f | 80 | |
flash_ahaa | 0:5c21b4de143f | 81 | |
flash_ahaa | 0:5c21b4de143f | 82 | |
flash_ahaa | 0:5c21b4de143f | 83 | |
flash_ahaa | 0:5c21b4de143f | 84 | /* interrupt service routine from adc object |
flash_ahaa | 0:5c21b4de143f | 85 | * here should be done the data processing |
flash_ahaa | 0:5c21b4de143f | 86 | * variable and output updates |
flash_ahaa | 0:5c21b4de143f | 87 | */ |
flash_ahaa | 0:5c21b4de143f | 88 | void getADC(int chan, uint32_t value) { |
flash_ahaa | 0:5c21b4de143f | 89 | //static double adcMax_temp; |
flash_ahaa | 0:5c21b4de143f | 90 | //static double adcMin_temp; //volts max value value |
flash_ahaa | 0:5c21b4de143f | 91 | static double adcTotal = 0.0; |
flash_ahaa | 0:5c21b4de143f | 92 | static double adcSample; |
flash_ahaa | 0:5c21b4de143f | 93 | static long cycleCounter = 0; |
flash_ahaa | 0:5c21b4de143f | 94 | |
flash_ahaa | 0:5c21b4de143f | 95 | adcSample = (double) adc.read(p15); |
flash_ahaa | 0:5c21b4de143f | 96 | adcSample = adcSample * ULSB; // - ADC_BIAS; |
flash_ahaa | 0:5c21b4de143f | 97 | |
flash_ahaa | 0:5c21b4de143f | 98 | adcTotal += adcSample; |
flash_ahaa | 0:5c21b4de143f | 99 | cycleCounter++; |
flash_ahaa | 0:5c21b4de143f | 100 | |
flash_ahaa | 0:5c21b4de143f | 101 | if (adcSample < adcMin) |
flash_ahaa | 0:5c21b4de143f | 102 | adcMin = adcSample; |
flash_ahaa | 0:5c21b4de143f | 103 | |
flash_ahaa | 0:5c21b4de143f | 104 | if (adcSample > adcMax) |
flash_ahaa | 0:5c21b4de143f | 105 | adcMax = adcSample; |
flash_ahaa | 0:5c21b4de143f | 106 | |
flash_ahaa | 0:5c21b4de143f | 107 | |
flash_ahaa | 0:5c21b4de143f | 108 | if(cycleCounter < NUMBER_OF_SAMPLES) { |
flash_ahaa | 0:5c21b4de143f | 109 | adcSavings[cycleCounter] = adcSample; |
flash_ahaa | 0:5c21b4de143f | 110 | if((cycleCounter == NUMBER_OF_SAMPLES-1) && save) { |
flash_ahaa | 0:5c21b4de143f | 111 | save = false; |
flash_ahaa | 0:5c21b4de143f | 112 | |
flash_ahaa | 0:5c21b4de143f | 113 | newSample = adcSample; |
flash_ahaa | 0:5c21b4de143f | 114 | //adcMax = adcMax_temp; |
flash_ahaa | 0:5c21b4de143f | 115 | adcAverage = (double)(adcTotal / cycleCounter); |
flash_ahaa | 0:5c21b4de143f | 116 | //adcMin = adcMin_temp; |
flash_ahaa | 0:5c21b4de143f | 117 | adcMax = 0.0; |
flash_ahaa | 0:5c21b4de143f | 118 | adcMin = 3.3; |
flash_ahaa | 0:5c21b4de143f | 119 | adcTotal = 0.0; |
flash_ahaa | 0:5c21b4de143f | 120 | cycleCounter = 0; |
flash_ahaa | 0:5c21b4de143f | 121 | } |
flash_ahaa | 0:5c21b4de143f | 122 | } |
flash_ahaa | 0:5c21b4de143f | 123 | } |
flash_ahaa | 0:5c21b4de143f | 124 | |
flash_ahaa | 0:5c21b4de143f | 125 | /* function to initialize the main program, objects and |
flash_ahaa | 0:5c21b4de143f | 126 | * implement all variables |
flash_ahaa | 0:5c21b4de143f | 127 | */ |
flash_ahaa | 0:5c21b4de143f | 128 | void mainInit() { |
flash_ahaa | 0:5c21b4de143f | 129 | |
flash_ahaa | 0:5c21b4de143f | 130 | save = true; |
flash_ahaa | 0:5c21b4de143f | 131 | |
flash_ahaa | 0:5c21b4de143f | 132 | adcMin = 3.3; |
flash_ahaa | 0:5c21b4de143f | 133 | adcMax = 0.0; |
flash_ahaa | 0:5c21b4de143f | 134 | adcAverage = 0.0; |
flash_ahaa | 0:5c21b4de143f | 135 | |
flash_ahaa | 0:5c21b4de143f | 136 | for (int i = 0; i < NUMBER_OF_SAMPLES; i++) |
flash_ahaa | 0:5c21b4de143f | 137 | adcSavings[i] = 0.0f; |
flash_ahaa | 0:5c21b4de143f | 138 | |
flash_ahaa | 0:5c21b4de143f | 139 | |
flash_ahaa | 0:5c21b4de143f | 140 | |
flash_ahaa | 0:5c21b4de143f | 141 | usbPC.printf("...variables implemented\n"); |
flash_ahaa | 0:5c21b4de143f | 142 | wait(0.2); |
flash_ahaa | 0:5c21b4de143f | 143 | |
flash_ahaa | 0:5c21b4de143f | 144 | |
flash_ahaa | 0:5c21b4de143f | 145 | /* setup adc input |
flash_ahaa | 0:5c21b4de143f | 146 | */ |
flash_ahaa | 0:5c21b4de143f | 147 | adc.append(&getADC); |
flash_ahaa | 0:5c21b4de143f | 148 | |
flash_ahaa | 0:5c21b4de143f | 149 | adc.startmode(0,0); |
flash_ahaa | 0:5c21b4de143f | 150 | adc.burst(1); |
flash_ahaa | 0:5c21b4de143f | 151 | |
flash_ahaa | 0:5c21b4de143f | 152 | adc.setup(p15,1); |
flash_ahaa | 0:5c21b4de143f | 153 | adc.setup(p16,0); |
flash_ahaa | 0:5c21b4de143f | 154 | adc.setup(p17,0); |
flash_ahaa | 0:5c21b4de143f | 155 | adc.setup(p18,0); |
flash_ahaa | 0:5c21b4de143f | 156 | adc.setup(p19,0); |
flash_ahaa | 0:5c21b4de143f | 157 | adc.setup(p20,0); |
flash_ahaa | 0:5c21b4de143f | 158 | |
flash_ahaa | 0:5c21b4de143f | 159 | adc.interrupt_state(p15,1); |
flash_ahaa | 0:5c21b4de143f | 160 | |
flash_ahaa | 0:5c21b4de143f | 161 | |
flash_ahaa | 0:5c21b4de143f | 162 | usbPC.printf("%u, %u, %u, %u\n", adc.setup(p15), |
flash_ahaa | 0:5c21b4de143f | 163 | adc.burst(), |
flash_ahaa | 0:5c21b4de143f | 164 | adc.interrupt_state(p15), |
flash_ahaa | 0:5c21b4de143f | 165 | adc.actual_sample_rate()); |
flash_ahaa | 0:5c21b4de143f | 166 | |
flash_ahaa | 0:5c21b4de143f | 167 | usbPC.printf("...ADC initialized\n"); |
flash_ahaa | 0:5c21b4de143f | 168 | wait(0.2); |
flash_ahaa | 0:5c21b4de143f | 169 | |
flash_ahaa | 0:5c21b4de143f | 170 | |
flash_ahaa | 0:5c21b4de143f | 171 | } |