test program to power up two MAX11410 ADCs and check the inputs of ADC1. Uses MAX11410 library.
Fork of MAX11410-test by
main.cpp@12:75efd1e2314c, 2019-02-23 (annotated)
- Committer:
- laserdad
- Date:
- Sat Feb 23 00:58:04 2019 +0000
- Revision:
- 12:75efd1e2314c
- Parent:
- 11:1050ffc0e9ef
- Child:
- 13:02c28a5a26c0
put in running average instead of IIR filter
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simon | 0:4f78cdfc99de | 1 | #include "mbed.h" |
laserdad | 5:d7b803aa9079 | 2 | #include "MAX11410.h" |
simon | 0:4f78cdfc99de | 3 | |
laserdad | 5:d7b803aa9079 | 4 | #define CS1 D9 |
laserdad | 5:d7b803aa9079 | 5 | #define CS2 D10 |
laserdad | 5:d7b803aa9079 | 6 | #define MOSI_1 D11 |
laserdad | 5:d7b803aa9079 | 7 | #define MISO_1 D12 |
laserdad | 5:d7b803aa9079 | 8 | #define SCLK_1 D13 |
laserdad | 5:d7b803aa9079 | 9 | #define VDD 3.3 |
laserdad | 6:c3db4eff9170 | 10 | |
laserdad | 6:c3db4eff9170 | 11 | |
laserdad | 5:d7b803aa9079 | 12 | AnalogOut vOut1(A3); |
laserdad | 5:d7b803aa9079 | 13 | AnalogOut vOut2(A4); |
laserdad | 5:d7b803aa9079 | 14 | DigitalOut cs_pin1(CS1); |
laserdad | 5:d7b803aa9079 | 15 | DigitalOut cs_pin2(CS2); |
laserdad | 5:d7b803aa9079 | 16 | SPI spi(MOSI_1, MISO_1, SCLK_1); |
laserdad | 5:d7b803aa9079 | 17 | MAX11410 adc1(&spi,&cs_pin1); |
laserdad | 5:d7b803aa9079 | 18 | MAX11410 adc2(&spi,&cs_pin2); |
laserdad | 7:5295cbdb123c | 19 | Serial pc(USBTX, USBRX,115200); |
laserdad | 7:5295cbdb123c | 20 | //Serial pc(USBTX, USBRX, 9600); |
laserdad | 6:c3db4eff9170 | 21 | Serial rpi(PA_9,PA_10,115200); |
laserdad | 5:d7b803aa9079 | 22 | |
laserdad | 12:75efd1e2314c | 23 | #define NUM_CHANNELS 10 |
laserdad | 12:75efd1e2314c | 24 | |
laserdad | 12:75efd1e2314c | 25 | int32_t channel_data[NUM_CHANNELS]; |
laserdad | 12:75efd1e2314c | 26 | int32_t new_data; |
laserdad | 12:75efd1e2314c | 27 | int32_t avg_data; |
laserdad | 12:75efd1e2314c | 28 | int32t data_buffer[NUM_CHANNELS][10]; |
laserdad | 12:75efd1e2314c | 29 | int32t data_sum[NUM_CHANNELS]; |
laserdad | 12:75efd1e2314c | 30 | int32t ind = 0; |
laserdad | 12:75efd1e2314c | 31 | int num_samples = 0; |
laserdad | 12:75efd1e2314c | 32 | int num_avgs = 4; |
laserdad | 12:75efd1e2314c | 33 | int ptr =-1; |
laserdad | 12:75efd1e2314c | 34 | |
laserdad | 5:d7b803aa9079 | 35 | void starting() |
smartsystemdesign | 2:39ba9beabf3c | 36 | { |
laserdad | 5:d7b803aa9079 | 37 | pc.printf("this program has started\r\n"); |
laserdad | 5:d7b803aa9079 | 38 | } |
laserdad | 5:d7b803aa9079 | 39 | |
simon | 0:4f78cdfc99de | 40 | |
laserdad | 6:c3db4eff9170 | 41 | char getNthByte(int32_t data, int ind) |
laserdad | 6:c3db4eff9170 | 42 | { |
laserdad | 6:c3db4eff9170 | 43 | return (data>>(8*ind)) & 0x000000FF ; |
laserdad | 6:c3db4eff9170 | 44 | } |
laserdad | 5:d7b803aa9079 | 45 | |
laserdad | 5:d7b803aa9079 | 46 | |
laserdad | 5:d7b803aa9079 | 47 | void print8bitRegsAdc1(char start_reg,char end_reg) |
laserdad | 5:d7b803aa9079 | 48 | { |
laserdad | 5:d7b803aa9079 | 49 | bool int_status; |
laserdad | 5:d7b803aa9079 | 50 | char val; |
laserdad | 5:d7b803aa9079 | 51 | for(int n=start_reg;n<=end_reg;n++) |
laserdad | 5:d7b803aa9079 | 52 | { |
laserdad | 5:d7b803aa9079 | 53 | val = adc1.read8bits(n,&int_status); |
laserdad | 5:d7b803aa9079 | 54 | pc.printf("reg %02x, val =%02x\r\n",n,val); |
simon | 0:4f78cdfc99de | 55 | } |
laserdad | 5:d7b803aa9079 | 56 | |
laserdad | 5:d7b803aa9079 | 57 | } |
laserdad | 5:d7b803aa9079 | 58 | |
laserdad | 5:d7b803aa9079 | 59 | void print8bitRegsAdc2(char start_reg,char end_reg) |
laserdad | 5:d7b803aa9079 | 60 | { |
laserdad | 5:d7b803aa9079 | 61 | bool int_status; |
laserdad | 5:d7b803aa9079 | 62 | char val; |
laserdad | 5:d7b803aa9079 | 63 | for(int n=start_reg;n<=end_reg;n++) |
laserdad | 5:d7b803aa9079 | 64 | { |
laserdad | 5:d7b803aa9079 | 65 | val = adc2.read8bits(n,&int_status); |
laserdad | 5:d7b803aa9079 | 66 | pc.printf("reg %02x, val =%02x\r\n",n,val); |
laserdad | 5:d7b803aa9079 | 67 | } |
simon | 0:4f78cdfc99de | 68 | } |
smartsystemdesign | 2:39ba9beabf3c | 69 | |
laserdad | 7:5295cbdb123c | 70 | |
laserdad | 12:75efd1e2314c | 71 | void get_avgs() { |
laserdad | 12:75efd1e2314c | 72 | ptr++; //increment pointer |
laserdad | 12:75efd1e2314c | 73 | if (ptr == num_avgs) { |
laserdad | 12:75efd1e2314c | 74 | ptr = 0; //reset pointer |
laserdad | 12:75efd1e2314c | 75 | } |
laserdad | 12:75efd1e2314c | 76 | if num_samples < num_avgs { |
laserdad | 12:75efd1e2314c | 77 | num_samples++; //increment number of samples |
laserdad | 12:75efd1e2314c | 78 | } |
laserdad | 12:75efd1e2314c | 79 | else { |
laserdad | 12:75efd1e2314c | 80 | for (int n = 0; n<NUM_CHANNELS; n++) { //loop over channels |
laserdad | 12:75efd1e2314c | 81 | data_sum[n] -= data_buffer[n][ptr]; //subtract oldest sample |
laserdad | 12:75efd1e2314c | 82 | } |
laserdad | 12:75efd1e2314c | 83 | } |
laserdad | 12:75efd1e2314c | 84 | for (int n=0;n<NUM_CHANNELS;n++) { |
laserdad | 12:75efd1e2314c | 85 | data_buffer[n][ptr] = channel_data[n]; //put new sample in buffer |
laserdad | 12:75efd1e2314c | 86 | data_sum[n] += channel_data[n]; //add new sample |
laserdad | 12:75efd1e2314c | 87 | avg_data[n] = data_sum[n] / num_avgs; //get new average |
laserdad | 12:75efd1e2314c | 88 | } |
laserdad | 12:75efd1e2314c | 89 | { |
laserdad | 12:75efd1e2314c | 90 | |
laserdad | 12:75efd1e2314c | 91 | |
laserdad | 5:d7b803aa9079 | 92 | int main() |
smartsystemdesign | 2:39ba9beabf3c | 93 | { |
laserdad | 12:75efd1e2314c | 94 | |
laserdad | 12:75efd1e2314c | 95 | // int32_t channel_data2[NUM_CHANNELS]; |
laserdad | 12:75efd1e2314c | 96 | |
laserdad | 12:75efd1e2314c | 97 | |
laserdad | 12:75efd1e2314c | 98 | |
laserdad | 12:75efd1e2314c | 99 | |
laserdad | 12:75efd1e2314c | 100 | |
laserdad | 12:75efd1e2314c | 101 | |
laserdad | 11:1050ffc0e9ef | 102 | int filterdiv = 4; //this is the divisor in the IIR channel filter. |
laserdad | 11:1050ffc0e9ef | 103 | // It adds 1/filterdiv of the difference between the new sample and the average to the new average |
laserdad | 11:1050ffc0e9ef | 104 | // This is integer math, so I am sticking to multiples of 2 for now. |
laserdad | 7:5295cbdb123c | 105 | int32_t checksum2 =0; |
laserdad | 7:5295cbdb123c | 106 | int32_t checksum = 0; |
laserdad | 7:5295cbdb123c | 107 | char checksum_byte = 0; |
laserdad | 7:5295cbdb123c | 108 | char byte2print[40]; |
laserdad | 6:c3db4eff9170 | 109 | double vdiff=0.01; |
laserdad | 5:d7b803aa9079 | 110 | vOut1 = 0.5-vdiff/2; |
laserdad | 5:d7b803aa9079 | 111 | vOut2 = 0.5+vdiff/2; |
laserdad | 5:d7b803aa9079 | 112 | starting(); |
laserdad | 7:5295cbdb123c | 113 | |
laserdad | 5:d7b803aa9079 | 114 | bool int_state; |
laserdad | 5:d7b803aa9079 | 115 | spi.format(8,MAX11410_SPI_MODE); //configure number of spi bits 8, 16 |
laserdad | 5:d7b803aa9079 | 116 | spi.frequency(8000000); // Max 8MHz |
laserdad | 5:d7b803aa9079 | 117 | //read chip ID |
laserdad | 5:d7b803aa9079 | 118 | |
laserdad | 5:d7b803aa9079 | 119 | pc.printf("chip ID %d\r\n",adc1.read8bits(REG_PART_ID,&int_state) ); |
laserdad | 5:d7b803aa9079 | 120 | |
laserdad | 5:d7b803aa9079 | 121 | //config ADC 1 |
laserdad | 11:1050ffc0e9ef | 122 | adc1.reset(); //POR chip 1 |
laserdad | 11:1050ffc0e9ef | 123 | adc2.reset(); //POR chip 2 |
laserdad | 5:d7b803aa9079 | 124 | |
laserdad | 5:d7b803aa9079 | 125 | //check default register configs |
laserdad | 5:d7b803aa9079 | 126 | pc.printf("default regs for ADC1\r\n"); |
laserdad | 5:d7b803aa9079 | 127 | print8bitRegsAdc1(REG_PD,REG_WAIT_START); |
laserdad | 5:d7b803aa9079 | 128 | |
laserdad | 5:d7b803aa9079 | 129 | pc.printf("default regs for ADC2\r\n"); |
laserdad | 5:d7b803aa9079 | 130 | print8bitRegsAdc2(REG_PD,REG_WAIT_START); |
laserdad | 5:d7b803aa9079 | 131 | |
laserdad | 5:d7b803aa9079 | 132 | //config interrupts, PGA, Buffer, polarity, reference |
laserdad | 5:d7b803aa9079 | 133 | char mode_config = MODE_NORMAL; |
laserdad | 5:d7b803aa9079 | 134 | adc1.write8bitReg(REG_PD,mode_config); //got to normal mode |
laserdad | 5:d7b803aa9079 | 135 | adc2.write8bitReg(REG_PD,mode_config); //got to normal mode |
laserdad | 5:d7b803aa9079 | 136 | |
laserdad | 11:1050ffc0e9ef | 137 | char filter_config = FIR_SIXTY | _RATE(5) ; //five is the max at 35.6 sps |
laserdad | 5:d7b803aa9079 | 138 | adc1.write8bitReg( REG_FILTER,filter_config ); |
laserdad | 5:d7b803aa9079 | 139 | adc2.write8bitReg( REG_FILTER,filter_config ); |
laserdad | 5:d7b803aa9079 | 140 | |
laserdad | 5:d7b803aa9079 | 141 | char ctrl_config = INT_CLOCK | BIPOLAR | TWOS_COMP | _PBUF_EN(0) | _NBUF_EN(0) | REF_AVDD ; //ADC configuration |
laserdad | 5:d7b803aa9079 | 142 | adc1.write8bitReg( REG_CTRL, ctrl_config ); |
laserdad | 5:d7b803aa9079 | 143 | adc2.write8bitReg( REG_CTRL, ctrl_config ); |
laserdad | 5:d7b803aa9079 | 144 | |
laserdad | 5:d7b803aa9079 | 145 | char source_config = VBIAS_ACTIVE | BRN_OFF | _IDAC(0); //not sourcing current |
laserdad | 5:d7b803aa9079 | 146 | adc1.write8bitReg( REG_SOURCE,source_config ); |
laserdad | 5:d7b803aa9079 | 147 | adc2.write8bitReg( REG_SOURCE,source_config ); |
laserdad | 5:d7b803aa9079 | 148 | |
laserdad | 5:d7b803aa9079 | 149 | uint32_t status_ie_config = DATA_RDY_INT | CAL_RDY_INT | CONV_RDY_INT; |
laserdad | 5:d7b803aa9079 | 150 | adc1.write24bitReg(REG_STATUS_IE,status_ie_config); |
laserdad | 5:d7b803aa9079 | 151 | adc2.write8bitReg( REG_SOURCE,source_config ); |
laserdad | 5:d7b803aa9079 | 152 | |
laserdad | 5:d7b803aa9079 | 153 | char gain_setting = 0; |
laserdad | 5:d7b803aa9079 | 154 | char pga_config = PGA | _GAIN_EXP(gain_setting) ; //no gain |
laserdad | 5:d7b803aa9079 | 155 | adc1.write8bitReg(REG_PGA,pga_config); |
laserdad | 5:d7b803aa9079 | 156 | adc2.write8bitReg(REG_PGA,pga_config); |
laserdad | 5:d7b803aa9079 | 157 | |
laserdad | 5:d7b803aa9079 | 158 | pc.printf("PGA gain = %d\r\n",1<<gain_setting); |
laserdad | 5:d7b803aa9079 | 159 | |
laserdad | 5:d7b803aa9079 | 160 | //check register writes |
laserdad | 5:d7b803aa9079 | 161 | pc.printf("checking register writes\r\n"); |
laserdad | 5:d7b803aa9079 | 162 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_PD,adc1.read8bits(REG_PD,&int_state),mode_config); |
laserdad | 5:d7b803aa9079 | 163 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_FILTER,adc1.read8bits(REG_FILTER,&int_state),filter_config); |
laserdad | 5:d7b803aa9079 | 164 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_CTRL,adc1.read8bits(REG_CTRL,&int_state),ctrl_config); |
laserdad | 5:d7b803aa9079 | 165 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_SOURCE,adc1.read8bits(REG_SOURCE,&int_state),source_config); |
laserdad | 5:d7b803aa9079 | 166 | pc.printf("reg %02x, val %06x, set to %06x\r\n",REG_STATUS_IE,adc1.read24bits(REG_STATUS_IE,&int_state),status_ie_config); |
laserdad | 5:d7b803aa9079 | 167 | pc.printf("reg %02x, val %02x, set to %02x\r\n",REG_PGA,adc1.read8bits(REG_PGA,&int_state),pga_config); |
laserdad | 5:d7b803aa9079 | 168 | |
laserdad | 5:d7b803aa9079 | 169 | // for each channel 1-5 |
shawjo | 9:5d9509c15e8a | 170 | /// for(int n=0;n<5;n++) |
shawjo | 9:5d9509c15e8a | 171 | /// { |
shawjo | 9:5d9509c15e8a | 172 | /// //select channel |
shawjo | 9:5d9509c15e8a | 173 | /// char p_ch = 2*n<<4; |
shawjo | 9:5d9509c15e8a | 174 | /// char n_ch = 2*n+1; |
shawjo | 9:5d9509c15e8a | 175 | /// adc1.write8bitReg(REG_MUX_CTRL0, p_ch | n_ch ); |
shawjo | 9:5d9509c15e8a | 176 | /// |
shawjo | 9:5d9509c15e8a | 177 | /// //select data output register and begin conversion |
shawjo | 9:5d9509c15e8a | 178 | /// adc1.write8bitReg(REG_CONV_START, (_DEST(n) | SINGLE_CONV) ); |
shawjo | 9:5d9509c15e8a | 179 | /// |
shawjo | 9:5d9509c15e8a | 180 | /// //optional: cal Gain |
shawjo | 9:5d9509c15e8a | 181 | /// |
shawjo | 9:5d9509c15e8a | 182 | /// //optional: cal Offset |
shawjo | 9:5d9509c15e8a | 183 | /// |
shawjo | 9:5d9509c15e8a | 184 | /// //optional: store cal parameters |
shawjo | 9:5d9509c15e8a | 185 | /// |
shawjo | 9:5d9509c15e8a | 186 | /// //begin conversion |
shawjo | 9:5d9509c15e8a | 187 | /// |
shawjo | 9:5d9509c15e8a | 188 | /// //wait for interrupt |
shawjo | 9:5d9509c15e8a | 189 | /// while(!adc1.interrupt() ) |
shawjo | 9:5d9509c15e8a | 190 | /// { |
shawjo | 9:5d9509c15e8a | 191 | /// wait_ms(CONV_DELAY_MS);//do nothing |
shawjo | 9:5d9509c15e8a | 192 | ///// pc.printf("waiting for int"); |
shawjo | 9:5d9509c15e8a | 193 | /// } |
shawjo | 9:5d9509c15e8a | 194 | /// |
shawjo | 9:5d9509c15e8a | 195 | /// //read conversion |
shawjo | 9:5d9509c15e8a | 196 | /// channel_data[n] = adc1.read24bitsSigned(REG_DATA0+n,&int_state); |
shawjo | 9:5d9509c15e8a | 197 | /// pc.printf("%d, ",channel_data[n]); |
shawjo | 9:5d9509c15e8a | 198 | /// } //channel sweep |
shawjo | 9:5d9509c15e8a | 199 | /// pc.printf("\r\n"); |
shawjo | 9:5d9509c15e8a | 200 | /// |
shawjo | 9:5d9509c15e8a | 201 | /// |
shawjo | 9:5d9509c15e8a | 202 | /// //config ADC 2: repeat above |
laserdad | 5:d7b803aa9079 | 203 | |
laserdad | 5:d7b803aa9079 | 204 | |
laserdad | 7:5295cbdb123c | 205 | |
laserdad | 7:5295cbdb123c | 206 | pc.printf("beginning while loop"); |
laserdad | 7:5295cbdb123c | 207 | wait_ms(1000); |
laserdad | 6:c3db4eff9170 | 208 | while(1) |
laserdad | 6:c3db4eff9170 | 209 | { |
laserdad | 6:c3db4eff9170 | 210 | for(int n=0; n<5; n++) |
laserdad | 6:c3db4eff9170 | 211 | { |
laserdad | 11:1050ffc0e9ef | 212 | //setup ADCs to read in parallel |
laserdad | 6:c3db4eff9170 | 213 | //select channel |
shawjo | 9:5d9509c15e8a | 214 | char p_ch = 2*n+1<<4; |
shawjo | 9:5d9509c15e8a | 215 | char n_ch = 2*n; |
laserdad | 6:c3db4eff9170 | 216 | adc1.write8bitReg(REG_MUX_CTRL0, p_ch | n_ch ); |
laserdad | 11:1050ffc0e9ef | 217 | adc2.write8bitReg(REG_MUX_CTRL0, p_ch | n_ch ); |
laserdad | 6:c3db4eff9170 | 218 | |
laserdad | 6:c3db4eff9170 | 219 | //select data output register and begin conversion |
laserdad | 6:c3db4eff9170 | 220 | adc1.write8bitReg(REG_CONV_START, (_DEST(n) | SINGLE_CONV) ); |
laserdad | 11:1050ffc0e9ef | 221 | adc2.write8bitReg(REG_CONV_START, (_DEST(n) | SINGLE_CONV) ); |
laserdad | 6:c3db4eff9170 | 222 | |
laserdad | 6:c3db4eff9170 | 223 | //optional: cal Gain |
laserdad | 6:c3db4eff9170 | 224 | |
laserdad | 6:c3db4eff9170 | 225 | //optional: cal Offset |
laserdad | 6:c3db4eff9170 | 226 | |
laserdad | 6:c3db4eff9170 | 227 | //optional: store cal parameters |
laserdad | 6:c3db4eff9170 | 228 | |
laserdad | 6:c3db4eff9170 | 229 | //begin conversion |
laserdad | 6:c3db4eff9170 | 230 | |
laserdad | 6:c3db4eff9170 | 231 | //wait for interrupt |
laserdad | 6:c3db4eff9170 | 232 | while(!adc1.interrupt() ) |
laserdad | 6:c3db4eff9170 | 233 | { |
laserdad | 6:c3db4eff9170 | 234 | wait_ms(CONV_DELAY_MS);//do nothing |
laserdad | 7:5295cbdb123c | 235 | // pc.printf("waiting for int"); |
laserdad | 6:c3db4eff9170 | 236 | } |
laserdad | 11:1050ffc0e9ef | 237 | if (channel_data[n] == 0) |
laserdad | 11:1050ffc0e9ef | 238 | { |
laserdad | 11:1050ffc0e9ef | 239 | channel_data[n] = adc1.read24bitsSigned(REG_DATA0+n,&int_state); |
laserdad | 11:1050ffc0e9ef | 240 | } |
laserdad | 11:1050ffc0e9ef | 241 | else |
laserdad | 11:1050ffc0e9ef | 242 | { |
laserdad | 12:75efd1e2314c | 243 | new_data = adc1.read24bitsSigned(REG_DATA0+n,&int_state); |
laserdad | 12:75efd1e2314c | 244 | // channel_data[n] += (new_data-channel_data[n])/filterdiv; |
laserdad | 12:75efd1e2314c | 245 | channel_data[n] = new_data; |
laserdad | 11:1050ffc0e9ef | 246 | } |
laserdad | 6:c3db4eff9170 | 247 | while(!adc2.interrupt() ) |
laserdad | 6:c3db4eff9170 | 248 | { |
laserdad | 6:c3db4eff9170 | 249 | wait_ms(CONV_DELAY_MS);//do nothing |
laserdad | 11:1050ffc0e9ef | 250 | // pc.printf("waiting for int"); |
laserdad | 6:c3db4eff9170 | 251 | } |
laserdad | 6:c3db4eff9170 | 252 | //read conversion |
laserdad | 11:1050ffc0e9ef | 253 | if (channel_data[n+5] == 0) |
laserdad | 11:1050ffc0e9ef | 254 | { |
laserdad | 11:1050ffc0e9ef | 255 | channel_data[n+5] = adc2.read24bitsSigned(REG_DATA0+n,&int_state); |
laserdad | 11:1050ffc0e9ef | 256 | } |
laserdad | 11:1050ffc0e9ef | 257 | else |
laserdad | 11:1050ffc0e9ef | 258 | { |
laserdad | 12:75efd1e2314c | 259 | new_data = adc2.read24bitsSigned(REG_DATA0+n,&int_state); |
laserdad | 12:75efd1e2314c | 260 | //channel_data[n+5] += (new_data-channel_data[n+5])/filterdiv; |
laserdad | 12:75efd1e2314c | 261 | channel_data[n] = new_data; |
laserdad | 11:1050ffc0e9ef | 262 | } |
laserdad | 6:c3db4eff9170 | 263 | } |
laserdad | 6:c3db4eff9170 | 264 | // calc checksum |
laserdad | 11:1050ffc0e9ef | 265 | checksum = 0x66 + 0x01; |
laserdad | 12:75efd1e2314c | 266 | // for (int n=0; n<NUM_CHANNELS; n++) |
shawjo | 8:882a6cdb1bf3 | 267 | // { |
shawjo | 8:882a6cdb1bf3 | 268 | // checksum += channel_data[n]; |
shawjo | 8:882a6cdb1bf3 | 269 | // } |
shawjo | 8:882a6cdb1bf3 | 270 | // checksum_byte = (char) checksum; |
laserdad | 6:c3db4eff9170 | 271 | |
laserdad | 12:75efd1e2314c | 272 | for (int n=0; n<NUM_CHANNELS; n++) |
laserdad | 6:c3db4eff9170 | 273 | { |
laserdad | 6:c3db4eff9170 | 274 | for(int m=0;m<4;m++) |
laserdad | 6:c3db4eff9170 | 275 | { |
laserdad | 6:c3db4eff9170 | 276 | byte2print[n*4+m] = getNthByte(channel_data[n],3-m); |
shawjo | 8:882a6cdb1bf3 | 277 | checksum += getNthByte(channel_data[n],3-m); |
shawjo | 8:882a6cdb1bf3 | 278 | } |
laserdad | 6:c3db4eff9170 | 279 | } |
shawjo | 8:882a6cdb1bf3 | 280 | checksum_byte = (char) checksum; |
shawjo | 8:882a6cdb1bf3 | 281 | |
laserdad | 6:c3db4eff9170 | 282 | //print data and checksum |
laserdad | 6:c3db4eff9170 | 283 | |
laserdad | 6:c3db4eff9170 | 284 | // print header 0x6601 |
laserdad | 6:c3db4eff9170 | 285 | rpi.putc(0x66); |
laserdad | 6:c3db4eff9170 | 286 | rpi.putc(0x01); |
laserdad | 6:c3db4eff9170 | 287 | for (int n =0; n<40;n++) |
laserdad | 6:c3db4eff9170 | 288 | { |
laserdad | 6:c3db4eff9170 | 289 | rpi.putc(byte2print[n]); |
laserdad | 6:c3db4eff9170 | 290 | } |
laserdad | 7:5295cbdb123c | 291 | rpi.putc( checksum_byte ); |
laserdad | 7:5295cbdb123c | 292 | // now reassemble the bits and print them |
laserdad | 11:1050ffc0e9ef | 293 | // |
laserdad | 12:75efd1e2314c | 294 | // for (int n=0;n<NUM_CHANNELS;n++) |
laserdad | 11:1050ffc0e9ef | 295 | // { |
laserdad | 11:1050ffc0e9ef | 296 | // channel_data2[n] = (byte2print[4*n]<<24 ) | ( byte2print[4*n+1]<<16 ) | ( byte2print[4*n+2] << 8 ) | byte2print[4*n+3]; |
laserdad | 11:1050ffc0e9ef | 297 | // } |
laserdad | 11:1050ffc0e9ef | 298 | // pc.printf("orig reconstructed\r\n"); |
laserdad | 12:75efd1e2314c | 299 | |
laserdad | 12:75efd1e2314c | 300 | get_avgs(); //calculate running average |
laserdad | 12:75efd1e2314c | 301 | |
laserdad | 12:75efd1e2314c | 302 | for (int n=0;n<NUM_CHANNELS;n++) |
laserdad | 12:75efd1e2314c | 303 | { |
laserdad | 12:75efd1e2314c | 304 | pc.printf("%d, %d\r\n",n,avg_data[n]); |
laserdad | 12:75efd1e2314c | 305 | } |
laserdad | 11:1050ffc0e9ef | 306 | // checksum2 = 0; |
laserdad | 12:75efd1e2314c | 307 | // for(int n=0;n<NUM_CHANNELS;n++) |
laserdad | 11:1050ffc0e9ef | 308 | // { |
laserdad | 11:1050ffc0e9ef | 309 | // checksum2 += channel_data2[n]; |
laserdad | 11:1050ffc0e9ef | 310 | // } |
laserdad | 11:1050ffc0e9ef | 311 | // pc.printf("checksum %02X, %08X, %08X\r\n",checksum_byte,checksum,checksum2); |
laserdad | 6:c3db4eff9170 | 312 | } //end while |
laserdad | 5:d7b803aa9079 | 313 | |
laserdad | 5:d7b803aa9079 | 314 | } //END MAIN |