DCS_TEAM / Mbed 2 deprecated Chemical_Sensor_DMA

Dependencies:   mbed

Dependents:   DCS_FINAL_CODE

Fork of Chemical_Sensor_DMA by Jared Baxter

Committer:
baxterja
Date:
Sat Oct 31 20:06:37 2015 +0000
Revision:
3:a85b742be262
Parent:
2:3771b3195c7b
Child:
4:9fd291254686
Sample Should be accessible, also most of the filter code is done.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
baxterja 2:3771b3195c7b 1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
baxterja 2:3771b3195c7b 2 *
baxterja 2:3771b3195c7b 3 * Pinout for FRDM-k64f
baxterja 2:3771b3195c7b 4 * J2
baxterja 2:3771b3195c7b 5 * X X
baxterja 2:3771b3195c7b 6 * X X
baxterja 2:3771b3195c7b 7 * X X
baxterja 2:3771b3195c7b 8 * J3 X X GND
baxterja 2:3771b3195c7b 9 * X X X X SCLK
baxterja 2:3771b3195c7b 10 * X X X X MISO
baxterja 2:3771b3195c7b 11 * X X X X MOSI
baxterja 2:3771b3195c7b 12 * X X X X CS
baxterja 2:3771b3195c7b 13 * X X GND X X
baxterja 2:3771b3195c7b 14 * GND X X X X
baxterja 2:3771b3195c7b 15 * GND X X
baxterja 2:3771b3195c7b 16 * 5Vin X X J1
baxterja 2:3771b3195c7b 17 * X X
baxterja 2:3771b3195c7b 18 * J4 X X motorA
baxterja 2:3771b3195c7b 19 * X X X X motorB
baxterja 2:3771b3195c7b 20 * mic1 X X X X
baxterja 2:3771b3195c7b 21 * mic2 X X X X
baxterja 2:3771b3195c7b 22 * X X X X
baxterja 2:3771b3195c7b 23 * X X quadA X X
baxterja 2:3771b3195c7b 24 * X X quadB X X
baxterja 2:3771b3195c7b 25 *
baxterja 2:3771b3195c7b 26 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
baxterja 2:3771b3195c7b 27 #include "mbed.h"
baxterja 2:3771b3195c7b 28 #include "pause.cpp"
baxterja 2:3771b3195c7b 29
baxterja 2:3771b3195c7b 30 // Sampling
baxterja 2:3771b3195c7b 31 #include "Sample/adc.h"
baxterja 2:3771b3195c7b 32 #include "Sample/pdb.h"
baxterja 2:3771b3195c7b 33 #include "Sample/quad.h"
baxterja 2:3771b3195c7b 34
baxterja 2:3771b3195c7b 35 #include "AngleEncoder.h"
baxterja 2:3771b3195c7b 36 #include "MotorControl.h"
baxterja 2:3771b3195c7b 37
baxterja 3:a85b742be262 38 #include "SignalProcessing.h"
baxterja 2:3771b3195c7b 39 // for debug purposes
baxterja 2:3771b3195c7b 40 Serial pc(USBTX, USBRX);
baxterja 2:3771b3195c7b 41 DigitalOut led_red(LED_RED);
baxterja 2:3771b3195c7b 42 DigitalOut led_green(LED_GREEN);
baxterja 2:3771b3195c7b 43 DigitalOut led_blue(LED_BLUE);
baxterja 2:3771b3195c7b 44 //DigitalIn switch1(PTA4);
baxterja 2:3771b3195c7b 45 //DigitalIn switch2(PTC6);
baxterja 2:3771b3195c7b 46 //DigitalOut TotalInd(PTC4);
baxterja 2:3771b3195c7b 47 //DigitalOut SampleInd(PTC5);
baxterja 2:3771b3195c7b 48
baxterja 2:3771b3195c7b 49 MotorControl motor(PTC2, PTA2, 2000, 25); // cw, ccw, period_us, safetyPeriod_us
baxterja 2:3771b3195c7b 50 AngleEncoder angle_encoder(PTD2, PTD3, PTD1, PTD0, 8, 0, 1000000); // mosi, miso, sclk, cs, bit_width, mode, hz
baxterja 2:3771b3195c7b 51
baxterja 2:3771b3195c7b 52 // defined in dma.cpp
baxterja 2:3771b3195c7b 53 extern int len;
baxterja 2:3771b3195c7b 54 extern uint16_t sample_array0[];
baxterja 2:3771b3195c7b 55 extern uint16_t sample_array1[];
baxterja 2:3771b3195c7b 56 extern uint16_t angle_array[];
baxterja 2:3771b3195c7b 57 extern bool dma_done;
baxterja 2:3771b3195c7b 58 extern bool dma_half_done;
baxterja 2:3771b3195c7b 59
baxterja 2:3771b3195c7b 60 int motorVal = 10;
baxterja 2:3771b3195c7b 61
baxterja 2:3771b3195c7b 62 // Declaration of functions
baxterja 2:3771b3195c7b 63 void output_data();
baxterja 2:3771b3195c7b 64
baxterja 2:3771b3195c7b 65 Timer t1;
baxterja 2:3771b3195c7b 66 using namespace std;
baxterja 2:3771b3195c7b 67
baxterja 3:a85b742be262 68 int main()
baxterja 3:a85b742be262 69 {
baxterja 2:3771b3195c7b 70 led_blue = 1;
baxterja 2:3771b3195c7b 71 led_green = 1;
baxterja 2:3771b3195c7b 72 led_red = 1;
baxterja 3:a85b742be262 73 pre_compute_tables();
baxterja 3:a85b742be262 74 printf("STARTING\n\r");
baxterja 3:a85b742be262 75 t1.reset();
baxterja 3:a85b742be262 76 for (int t = 0; t<500000; t++)
baxterja 3:a85b742be262 77 {
baxterja 3:a85b742be262 78 int input1 = 5000*cos(3.14159265359 * 2*10000*t*.00001)+2500;
baxterja 3:a85b742be262 79 int input2 = 2500*sin(3.14159265359 * 2*10000*t*.00001)+2500;
baxterja 3:a85b742be262 80 t1.start();
baxterja 3:a85b742be262 81 filter100K(input1, input2);
baxterja 3:a85b742be262 82 t1.stop();
baxterja 3:a85b742be262 83 }
baxterja 3:a85b742be262 84 printf("FINAL TIME: %f\n\r",t1.read());
baxterja 3:a85b742be262 85 /*
baxterja 3:a85b742be262 86
baxterja 2:3771b3195c7b 87
baxterja 2:3771b3195c7b 88 pc.baud(230400);
baxterja 2:3771b3195c7b 89 pc.printf("Starting...\r\n");
baxterja 2:3771b3195c7b 90
baxterja 2:3771b3195c7b 91 for(int i = 0; i < 86; i++)
baxterja 2:3771b3195c7b 92 {
baxterja 2:3771b3195c7b 93 if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2);
baxterja 2:3771b3195c7b 94 }
baxterja 2:3771b3195c7b 95
baxterja 2:3771b3195c7b 96 // Give hardware associated with
baxterja 2:3771b3195c7b 97 // sampling the highest priority
baxterja 2:3771b3195c7b 98 NVIC_SetPriority(ADC1_IRQn,0);
baxterja 2:3771b3195c7b 99 NVIC_SetPriority(ADC0_IRQn,0);
baxterja 2:3771b3195c7b 100 NVIC_SetPriority(PDB0_IRQn,0);
baxterja 2:3771b3195c7b 101 NVIC_SetPriority(DMA0_IRQn,0);
baxterja 2:3771b3195c7b 102 NVIC_SetPriority(DMA1_IRQn,0);
baxterja 2:3771b3195c7b 103 NVIC_SetPriority(DMA2_IRQn,0);
baxterja 2:3771b3195c7b 104
baxterja 2:3771b3195c7b 105 NVIC_SetPriority(ENET_1588_Timer_IRQn,1);
baxterja 2:3771b3195c7b 106 NVIC_SetPriority(ENET_Transmit_IRQn,1);
baxterja 2:3771b3195c7b 107 NVIC_SetPriority(ENET_Receive_IRQn,1);
baxterja 2:3771b3195c7b 108 NVIC_SetPriority(ENET_Error_IRQn,1);
baxterja 2:3771b3195c7b 109
baxterja 2:3771b3195c7b 110 //quad_init(); // initialize FTM2 quadrature decoder
baxterja 2:3771b3195c7b 111 //quad_invert(); // invert the direction of counting
baxterja 2:3771b3195c7b 112 adc_init(); // initialize ADCs (always initialize adc before dma)
baxterja 2:3771b3195c7b 113 dma_init(); // initializes DMAs
baxterja 2:3771b3195c7b 114 pdb_init(); // initialize PDB0 as the timer for ADCs and DMA2
baxterja 2:3771b3195c7b 115
baxterja 2:3771b3195c7b 116 // flash green led indicating startup complete
baxterja 2:3771b3195c7b 117 led_red = 1;
baxterja 2:3771b3195c7b 118 led_blue = 1;
baxterja 2:3771b3195c7b 119 led_green = 0;
baxterja 2:3771b3195c7b 120 pause_ms(500);
baxterja 2:3771b3195c7b 121 led_green = 1;
baxterja 2:3771b3195c7b 122 pause_ms(200);
baxterja 2:3771b3195c7b 123 led_green = 0;
baxterja 2:3771b3195c7b 124 pause_ms(500);
baxterja 2:3771b3195c7b 125 led_green = 1;
baxterja 2:3771b3195c7b 126 pdb_start();
baxterja 2:3771b3195c7b 127 t1.start();
baxterja 2:3771b3195c7b 128 t1.reset();
baxterja 2:3771b3195c7b 129 int startAddress = (int)&sample_array0[0];
baxterja 2:3771b3195c7b 130 while (1)
baxterja 2:3771b3195c7b 131 {
baxterja 2:3771b3195c7b 132 if (t1.read()>2)
baxterja 2:3771b3195c7b 133 {
baxterja 2:3771b3195c7b 134 //pdb_start();
baxterja 2:3771b3195c7b 135 pc.printf("%i\t%i\t%i\r\n", sample_array0[1], sample_array1[1],(DMA_TCD0_DADDR-startAddress)/2);
baxterja 2:3771b3195c7b 136 t1.reset();
baxterja 2:3771b3195c7b 137 }
baxterja 2:3771b3195c7b 138 }
baxterja 3:a85b742be262 139 */
baxterja 2:3771b3195c7b 140 // while(1) {
baxterja 2:3771b3195c7b 141 // if(pc.readable() > 0) {
baxterja 2:3771b3195c7b 142 // char temp = pc.getc();
baxterja 2:3771b3195c7b 143 //
baxterja 2:3771b3195c7b 144 // switch(temp) {
baxterja 2:3771b3195c7b 145 // case '1': // run motor and sample
baxterja 2:3771b3195c7b 146 // {
baxterja 2:3771b3195c7b 147 // // wait for angle to set to zero
baxterja 2:3771b3195c7b 148 // led_blue = 0;
baxterja 2:3771b3195c7b 149 // while(!angle_encoder.set_zero()) {pc.printf("AngleNotSet");}
baxterja 2:3771b3195c7b 150 // quad_reset();
baxterja 2:3771b3195c7b 151 // led_blue = 1;
baxterja 2:3771b3195c7b 152 //
baxterja 2:3771b3195c7b 153 // // release mallet
baxterja 2:3771b3195c7b 154 // motor.releaseMallet();
baxterja 2:3771b3195c7b 155 //
baxterja 2:3771b3195c7b 156 // // wait for mallet to drop to certin point before beginning to sample
baxterja 2:3771b3195c7b 157 // /*
baxterja 2:3771b3195c7b 158 // led_red = 0;
baxterja 2:3771b3195c7b 159 // int angleVal;
baxterja 2:3771b3195c7b 160 // do {
baxterja 2:3771b3195c7b 161 // angleVal = angle_encoder.absolute_angle();
baxterja 2:3771b3195c7b 162 // }
baxterja 2:3771b3195c7b 163 // while(!(angleVal > 150 && angleVal < 400));
baxterja 2:3771b3195c7b 164 // led_red = 1;
baxterja 2:3771b3195c7b 165 // */
baxterja 2:3771b3195c7b 166 //
baxterja 2:3771b3195c7b 167 // // begin sampling
baxterja 2:3771b3195c7b 168 // pdb_start();
baxterja 2:3771b3195c7b 169 // //pause_us(TOTAL_SAMPLES*10);
baxterja 2:3771b3195c7b 170 // //while(!dma_done) {led_green = 0;}
baxterja 2:3771b3195c7b 171 // led_green = 1;
baxterja 2:3771b3195c7b 172 //
baxterja 2:3771b3195c7b 173 // // reset mallet
baxterja 2:3771b3195c7b 174 // motor.reset();
baxterja 2:3771b3195c7b 175 // output_data();
baxterja 2:3771b3195c7b 176 //
baxterja 2:3771b3195c7b 177 //
baxterja 2:3771b3195c7b 178 // led_red = 1;
baxterja 2:3771b3195c7b 179 // led_blue = 1;
baxterja 2:3771b3195c7b 180 // led_green = 1;
baxterja 2:3771b3195c7b 181 // }
baxterja 2:3771b3195c7b 182 // break;
baxterja 2:3771b3195c7b 183 //
baxterja 2:3771b3195c7b 184 // case '2':
baxterja 2:3771b3195c7b 185 // {
baxterja 2:3771b3195c7b 186 // motor.releaseMallet();
baxterja 2:3771b3195c7b 187 // pause(1);
baxterja 2:3771b3195c7b 188 //
baxterja 2:3771b3195c7b 189 // while(!angle_encoder.set_zero()) {}
baxterja 2:3771b3195c7b 190 // quad_reset();
baxterja 2:3771b3195c7b 191 //
baxterja 2:3771b3195c7b 192 // pdb_start();
baxterja 2:3771b3195c7b 193 // motor.clockwise(1);
baxterja 2:3771b3195c7b 194 // pause(1);
baxterja 2:3771b3195c7b 195 // motor.off();
baxterja 2:3771b3195c7b 196 // output_data();
baxterja 2:3771b3195c7b 197 //
baxterja 2:3771b3195c7b 198 // }
baxterja 2:3771b3195c7b 199 // break;
baxterja 2:3771b3195c7b 200 //
baxterja 2:3771b3195c7b 201 // case '3':
baxterja 2:3771b3195c7b 202 // {
baxterja 2:3771b3195c7b 203 // /*
baxterja 2:3771b3195c7b 204 // while(angleVar)
baxterja 2:3771b3195c7b 205 // {
baxterja 2:3771b3195c7b 206 // counter++;
baxterja 2:3771b3195c7b 207 // angleVar = angle_encoder.absolute_angle();
baxterja 2:3771b3195c7b 208 // angleVar -= motorVal;
baxterja 2:3771b3195c7b 209 // if(angleVar == 0x00ff0000) {} // do nothing
baxterja 2:3771b3195c7b 210 // //else if(angleVar > 340) motorB.pulsewidth_us(8000); // max speed
baxterja 2:3771b3195c7b 211 // else if(angleVar < 43) {
baxterja 2:3771b3195c7b 212 // angleVar = 0; // exit loop
baxterja 2:3771b3195c7b 213 // //motorB.pulsewidth_us(0);} // min speed
baxterja 2:3771b3195c7b 214 // //else motorB.pulsewidth_us(angleVar*800/34);
baxterja 2:3771b3195c7b 215 // }
baxterja 2:3771b3195c7b 216 // motor.off();
baxterja 2:3771b3195c7b 217 // */
baxterja 2:3771b3195c7b 218 // }
baxterja 2:3771b3195c7b 219 // break;
baxterja 2:3771b3195c7b 220 //
baxterja 2:3771b3195c7b 221 //
baxterja 2:3771b3195c7b 222 // /********************************************************************
baxterja 2:3771b3195c7b 223 // * The code below is for testing and troubleshooting. Don't delete. *
baxterja 2:3771b3195c7b 224 // ********************************************************************/
baxterja 2:3771b3195c7b 225 // case 'B':
baxterja 2:3771b3195c7b 226 // case 'b':
baxterja 2:3771b3195c7b 227 // led_blue = !led_blue;
baxterja 2:3771b3195c7b 228 // pc.printf("Blue LED\r\n");
baxterja 2:3771b3195c7b 229 // break;
baxterja 2:3771b3195c7b 230 // case 'R':
baxterja 2:3771b3195c7b 231 // case 'r':
baxterja 2:3771b3195c7b 232 // led_red = !led_red;
baxterja 2:3771b3195c7b 233 // pc.printf("Red LED\r\n");
baxterja 2:3771b3195c7b 234 // break;
baxterja 2:3771b3195c7b 235 //
baxterja 2:3771b3195c7b 236 // // test sampling
baxterja 2:3771b3195c7b 237 // case 'Q':
baxterja 2:3771b3195c7b 238 // case 'q':
baxterja 2:3771b3195c7b 239 // quad_reset();
baxterja 2:3771b3195c7b 240 // pdb_start();
baxterja 2:3771b3195c7b 241 //
baxterja 2:3771b3195c7b 242 // while(!dma_half_done) {
baxterja 2:3771b3195c7b 243 // pc.printf("first half\r\n");
baxterja 2:3771b3195c7b 244 // pause_ms(1);
baxterja 2:3771b3195c7b 245 // }
baxterja 2:3771b3195c7b 246 //
baxterja 2:3771b3195c7b 247 // while(!dma_done) {
baxterja 2:3771b3195c7b 248 // pc.printf("second half\r\n");
baxterja 2:3771b3195c7b 249 // pause_ms(1);
baxterja 2:3771b3195c7b 250 // }
baxterja 2:3771b3195c7b 251 // for(int i = 0; i < len; i++) pc.printf("%i\t %i\t %i\r\n", sample_array0[i],sample_array1[i], angle_array[i]);
baxterja 2:3771b3195c7b 252 // pc.printf("\r\n");
baxterja 2:3771b3195c7b 253 //
baxterja 2:3771b3195c7b 254 // led_red = 1;
baxterja 2:3771b3195c7b 255 // led_green = 1;
baxterja 2:3771b3195c7b 256 // led_blue = 1;
baxterja 2:3771b3195c7b 257 //
baxterja 2:3771b3195c7b 258 //
baxterja 2:3771b3195c7b 259 // /*
baxterja 2:3771b3195c7b 260 // while(!angle_encoder.set_zero()) {}
baxterja 2:3771b3195c7b 261 // quad_reset();
baxterja 2:3771b3195c7b 262 //
baxterja 2:3771b3195c7b 263 //
baxterja 2:3771b3195c7b 264 // pdb_start();
baxterja 2:3771b3195c7b 265 // pause_us(TOTAL_SAMPLES*10);
baxterja 2:3771b3195c7b 266 // output_data();*/
baxterja 2:3771b3195c7b 267 //
baxterja 2:3771b3195c7b 268 // break;
baxterja 2:3771b3195c7b 269 // case 'W':
baxterja 2:3771b3195c7b 270 // case 'w': // reads 0 unless the counter is running
baxterja 2:3771b3195c7b 271 // pc.printf("PDB: %i\r\n",PDB0_CNT);
baxterja 2:3771b3195c7b 272 // break;
baxterja 2:3771b3195c7b 273 //
baxterja 2:3771b3195c7b 274 // // test angle encoder
baxterja 2:3771b3195c7b 275 // case 'A':
baxterja 2:3771b3195c7b 276 // case 'a': // set zero
baxterja 2:3771b3195c7b 277 // if(angle_encoder.set_zero()) {
baxterja 2:3771b3195c7b 278 // pc.printf("Zero set\r\n");
baxterja 2:3771b3195c7b 279 // }
baxterja 2:3771b3195c7b 280 // else {
baxterja 2:3771b3195c7b 281 // pc.printf("Zero NOT set\r\n");
baxterja 2:3771b3195c7b 282 // }
baxterja 2:3771b3195c7b 283 // break;
baxterja 2:3771b3195c7b 284 // case 'S':
baxterja 2:3771b3195c7b 285 // case 's': // perform "no operation", which returns 0xa5
baxterja 2:3771b3195c7b 286 // {
baxterja 2:3771b3195c7b 287 // pc.printf("NOP: 0x%02x\r\n", angle_encoder.nop());
baxterja 2:3771b3195c7b 288 // break;
baxterja 2:3771b3195c7b 289 // }
baxterja 2:3771b3195c7b 290 // case 'D':
baxterja 2:3771b3195c7b 291 // case 'd': // read absolute and relative angles
baxterja 2:3771b3195c7b 292 // {
baxterja 2:3771b3195c7b 293 // pc.printf("Angle: %i %i\r\n", angle_encoder.absolute_angle(), quad_read());
baxterja 2:3771b3195c7b 294 // break;
baxterja 2:3771b3195c7b 295 // }
baxterja 2:3771b3195c7b 296 // case 'F':
baxterja 2:3771b3195c7b 297 // case 'f':
baxterja 2:3771b3195c7b 298 // pc.printf("Quad Cnt: %i\r\n", quad_read());
baxterja 2:3771b3195c7b 299 // break;
baxterja 2:3771b3195c7b 300 //
baxterja 2:3771b3195c7b 301 // // test motor
baxterja 2:3771b3195c7b 302 // case 'Z':
baxterja 2:3771b3195c7b 303 // case 'z': // release the mallet
baxterja 2:3771b3195c7b 304 // motor.releaseMallet();
baxterja 2:3771b3195c7b 305 // break;
baxterja 2:3771b3195c7b 306 // case 'X':
baxterja 2:3771b3195c7b 307 // case 'x':
baxterja 2:3771b3195c7b 308 // motor.hardReset(motorVal);
baxterja 2:3771b3195c7b 309 // break;
baxterja 2:3771b3195c7b 310 // case '+':
baxterja 2:3771b3195c7b 311 // case '=':
baxterja 2:3771b3195c7b 312 // motorVal++;
baxterja 2:3771b3195c7b 313 // if(motorVal > 8000) motorVal = 8000;
baxterja 2:3771b3195c7b 314 // pc.printf("MotorVal: %i\r\n", motorVal);
baxterja 2:3771b3195c7b 315 // break;
baxterja 2:3771b3195c7b 316 // case '-':
baxterja 2:3771b3195c7b 317 // {
baxterja 2:3771b3195c7b 318 // motorVal--;
baxterja 2:3771b3195c7b 319 // if(motorVal < 0) motorVal = 0;
baxterja 2:3771b3195c7b 320 // pc.printf("MotorVal: %i\r\n", motorVal);
baxterja 2:3771b3195c7b 321 // break;
baxterja 2:3771b3195c7b 322 // }
baxterja 2:3771b3195c7b 323 // }
baxterja 2:3771b3195c7b 324 // }
baxterja 2:3771b3195c7b 325 // }
baxterja 3:a85b742be262 326
baxterja 2:3771b3195c7b 327 }
baxterja 2:3771b3195c7b 328
baxterja 2:3771b3195c7b 329 void output_data()
baxterja 2:3771b3195c7b 330 {
baxterja 2:3771b3195c7b 331 for (int n = 0; n < len; n++) {
baxterja 2:3771b3195c7b 332 pc.printf("%i\t%i\r\n", sample_array0[n], sample_array1[n]);
baxterja 2:3771b3195c7b 333
baxterja 2:3771b3195c7b 334 }
baxterja 2:3771b3195c7b 335 }