Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of Chemical_Sensor_DMA by
main.cpp
- Committer:
- baxterja
- Date:
- 2015-10-31
- Revision:
- 3:a85b742be262
- Parent:
- 2:3771b3195c7b
- Child:
- 4:9fd291254686
File content as of revision 3:a85b742be262:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Pinout for FRDM-k64f * J2 * X X * X X * X X * J3 X X GND * X X X X SCLK * X X X X MISO * X X X X MOSI * X X X X CS * X X GND X X * GND X X X X * GND X X * 5Vin X X J1 * X X * J4 X X motorA * X X X X motorB * mic1 X X X X * mic2 X X X X * X X X X * X X quadA X X * X X quadB X X * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "mbed.h" #include "pause.cpp" // Sampling #include "Sample/adc.h" #include "Sample/pdb.h" #include "Sample/quad.h" #include "AngleEncoder.h" #include "MotorControl.h" #include "SignalProcessing.h" // for debug purposes Serial pc(USBTX, USBRX); DigitalOut led_red(LED_RED); DigitalOut led_green(LED_GREEN); DigitalOut led_blue(LED_BLUE); //DigitalIn switch1(PTA4); //DigitalIn switch2(PTC6); //DigitalOut TotalInd(PTC4); //DigitalOut SampleInd(PTC5); MotorControl motor(PTC2, PTA2, 2000, 25); // cw, ccw, period_us, safetyPeriod_us AngleEncoder angle_encoder(PTD2, PTD3, PTD1, PTD0, 8, 0, 1000000); // mosi, miso, sclk, cs, bit_width, mode, hz // defined in dma.cpp extern int len; extern uint16_t sample_array0[]; extern uint16_t sample_array1[]; extern uint16_t angle_array[]; extern bool dma_done; extern bool dma_half_done; int motorVal = 10; // Declaration of functions void output_data(); Timer t1; using namespace std; int main() { led_blue = 1; led_green = 1; led_red = 1; pre_compute_tables(); printf("STARTING\n\r"); t1.reset(); for (int t = 0; t<500000; t++) { int input1 = 5000*cos(3.14159265359 * 2*10000*t*.00001)+2500; int input2 = 2500*sin(3.14159265359 * 2*10000*t*.00001)+2500; t1.start(); filter100K(input1, input2); t1.stop(); } printf("FINAL TIME: %f\n\r",t1.read()); /* pc.baud(230400); pc.printf("Starting...\r\n"); for(int i = 0; i < 86; i++) { if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2); } // Give hardware associated with // sampling the highest priority NVIC_SetPriority(ADC1_IRQn,0); NVIC_SetPriority(ADC0_IRQn,0); NVIC_SetPriority(PDB0_IRQn,0); NVIC_SetPriority(DMA0_IRQn,0); NVIC_SetPriority(DMA1_IRQn,0); NVIC_SetPriority(DMA2_IRQn,0); NVIC_SetPriority(ENET_1588_Timer_IRQn,1); NVIC_SetPriority(ENET_Transmit_IRQn,1); NVIC_SetPriority(ENET_Receive_IRQn,1); NVIC_SetPriority(ENET_Error_IRQn,1); //quad_init(); // initialize FTM2 quadrature decoder //quad_invert(); // invert the direction of counting adc_init(); // initialize ADCs (always initialize adc before dma) dma_init(); // initializes DMAs pdb_init(); // initialize PDB0 as the timer for ADCs and DMA2 // flash green led indicating startup complete led_red = 1; led_blue = 1; led_green = 0; pause_ms(500); led_green = 1; pause_ms(200); led_green = 0; pause_ms(500); led_green = 1; pdb_start(); t1.start(); t1.reset(); int startAddress = (int)&sample_array0[0]; while (1) { if (t1.read()>2) { //pdb_start(); pc.printf("%i\t%i\t%i\r\n", sample_array0[1], sample_array1[1],(DMA_TCD0_DADDR-startAddress)/2); t1.reset(); } } */ // while(1) { // if(pc.readable() > 0) { // char temp = pc.getc(); // // switch(temp) { // case '1': // run motor and sample // { // // wait for angle to set to zero // led_blue = 0; // while(!angle_encoder.set_zero()) {pc.printf("AngleNotSet");} // quad_reset(); // led_blue = 1; // // // release mallet // motor.releaseMallet(); // // // wait for mallet to drop to certin point before beginning to sample // /* // led_red = 0; // int angleVal; // do { // angleVal = angle_encoder.absolute_angle(); // } // while(!(angleVal > 150 && angleVal < 400)); // led_red = 1; // */ // // // begin sampling // pdb_start(); // //pause_us(TOTAL_SAMPLES*10); // //while(!dma_done) {led_green = 0;} // led_green = 1; // // // reset mallet // motor.reset(); // output_data(); // // // led_red = 1; // led_blue = 1; // led_green = 1; // } // break; // // case '2': // { // motor.releaseMallet(); // pause(1); // // while(!angle_encoder.set_zero()) {} // quad_reset(); // // pdb_start(); // motor.clockwise(1); // pause(1); // motor.off(); // output_data(); // // } // break; // // case '3': // { // /* // while(angleVar) // { // counter++; // angleVar = angle_encoder.absolute_angle(); // angleVar -= motorVal; // if(angleVar == 0x00ff0000) {} // do nothing // //else if(angleVar > 340) motorB.pulsewidth_us(8000); // max speed // else if(angleVar < 43) { // angleVar = 0; // exit loop // //motorB.pulsewidth_us(0);} // min speed // //else motorB.pulsewidth_us(angleVar*800/34); // } // motor.off(); // */ // } // break; // // // /******************************************************************** // * The code below is for testing and troubleshooting. Don't delete. * // ********************************************************************/ // case 'B': // case 'b': // led_blue = !led_blue; // pc.printf("Blue LED\r\n"); // break; // case 'R': // case 'r': // led_red = !led_red; // pc.printf("Red LED\r\n"); // break; // // // test sampling // case 'Q': // case 'q': // quad_reset(); // pdb_start(); // // while(!dma_half_done) { // pc.printf("first half\r\n"); // pause_ms(1); // } // // while(!dma_done) { // pc.printf("second half\r\n"); // pause_ms(1); // } // 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]); // pc.printf("\r\n"); // // led_red = 1; // led_green = 1; // led_blue = 1; // // // /* // while(!angle_encoder.set_zero()) {} // quad_reset(); // // // pdb_start(); // pause_us(TOTAL_SAMPLES*10); // output_data();*/ // // break; // case 'W': // case 'w': // reads 0 unless the counter is running // pc.printf("PDB: %i\r\n",PDB0_CNT); // break; // // // test angle encoder // case 'A': // case 'a': // set zero // if(angle_encoder.set_zero()) { // pc.printf("Zero set\r\n"); // } // else { // pc.printf("Zero NOT set\r\n"); // } // break; // case 'S': // case 's': // perform "no operation", which returns 0xa5 // { // pc.printf("NOP: 0x%02x\r\n", angle_encoder.nop()); // break; // } // case 'D': // case 'd': // read absolute and relative angles // { // pc.printf("Angle: %i %i\r\n", angle_encoder.absolute_angle(), quad_read()); // break; // } // case 'F': // case 'f': // pc.printf("Quad Cnt: %i\r\n", quad_read()); // break; // // // test motor // case 'Z': // case 'z': // release the mallet // motor.releaseMallet(); // break; // case 'X': // case 'x': // motor.hardReset(motorVal); // break; // case '+': // case '=': // motorVal++; // if(motorVal > 8000) motorVal = 8000; // pc.printf("MotorVal: %i\r\n", motorVal); // break; // case '-': // { // motorVal--; // if(motorVal < 0) motorVal = 0; // pc.printf("MotorVal: %i\r\n", motorVal); // break; // } // } // } // } } void output_data() { for (int n = 0; n < len; n++) { pc.printf("%i\t%i\r\n", sample_array0[n], sample_array1[n]); } }