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.
Fork of Impedance_Fast_Circuitry by
main.cpp@85:f1be018aacac, 2018-04-25 (annotated)
- Committer:
- baxterja
- Date:
- Wed Apr 25 16:21:11 2018 +0000
- Revision:
- 85:f1be018aacac
- Parent:
- 84:5b4466dd2326
- Child:
- 86:850351993d88
Made it so that to change frequencies we only need to change the probe number.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
donatien | 0:bb128f0e952f | 1 | #include "mbed.h" |
timmey9 | 22:523e316cbe70 | 2 | |
timmey9 | 52:5a40cc58c4c2 | 3 | // Sampling |
bmazzeo | 53:83a90a47c1fd | 4 | #include "DMA_sampling/adc.h" |
bmazzeo | 54:1697dc574b96 | 5 | #include "DMA_sampling/dac.h" |
bmazzeo | 55:2526b3317bc8 | 6 | #include "DMA_sampling/pdb.h" |
baxterja | 73:b059b5bdc664 | 7 | #include "Jareds_DSP/filters_jared.h" |
baxterja | 75:8bb94685c80b | 8 | #include "Jareds_DSP/demodulate.h" |
bmazzeo | 67:ec0c58490ce6 | 9 | // DSP |
bmazzeo | 67:ec0c58490ce6 | 10 | #include "dsp.h" |
baxterja | 76:704fc58ffcd0 | 11 | #include "print_data.h" |
bmazzeo | 67:ec0c58490ce6 | 12 | |
baxterja | 85:f1be018aacac | 13 | #define PROBE_NUMBER 5 |
baxterja | 85:f1be018aacac | 14 | #if PROBE_NUMBER == 1 |
baxterja | 85:f1be018aacac | 15 | #define PRE_COMPUTE_LENGTH 232 |
baxterja | 85:f1be018aacac | 16 | #elif PROBE_NUMBER == 2 |
baxterja | 85:f1be018aacac | 17 | #define PRE_COMPUTE_LENGTH 528 |
baxterja | 85:f1be018aacac | 18 | #elif PROBE_NUMBER == 3 |
baxterja | 85:f1be018aacac | 19 | #define PRE_COMPUTE_LENGTH 176 |
baxterja | 85:f1be018aacac | 20 | #elif PROBE_NUMBER == 4 |
baxterja | 85:f1be018aacac | 21 | #define PRE_COMPUTE_LENGTH 320 |
baxterja | 85:f1be018aacac | 22 | #elif PROBE_NUMBER == 5 |
baxterja | 85:f1be018aacac | 23 | #define PRE_COMPUTE_LENGTH 208 |
baxterja | 85:f1be018aacac | 24 | #elif PROBE_NUMBER == 6 |
baxterja | 85:f1be018aacac | 25 | #define PRE_COMPUTE_LENGTH 528 |
baxterja | 85:f1be018aacac | 26 | #endif |
baxterja | 85:f1be018aacac | 27 | //#define probe_number 1 //Probe number |
baxterja | 85:f1be018aacac | 28 | const int probe_number = PROBE_NUMBER; |
baxterja | 85:f1be018aacac | 29 | //const int PCL_LUT[] = {232,528,176,320,208}; //Pre-compute-length for the different probe numbers |
baxterja | 85:f1be018aacac | 30 | //190Hz 528 |
baxterja | 85:f1be018aacac | 31 | //312Hz 320 |
baxterja | 85:f1be018aacac | 32 | //431Hz 232 |
baxterja | 85:f1be018aacac | 33 | //481Hz 208 |
baxterja | 85:f1be018aacac | 34 | //568Hz 176 |
baxterja | 85:f1be018aacac | 35 | |
baxterja | 72:0b554f5026b9 | 36 | #define PRINT_BUFFER_LENGTH 10000 |
baxterja | 73:b059b5bdc664 | 37 | #define GATHER_STATISTICS 1 |
bmazzeo | 67:ec0c58490ce6 | 38 | |
baxterja | 85:f1be018aacac | 39 | Serial pc(USBTX, USBRX); |
baxterja | 74:ebc9f09fda11 | 40 | |
timmey9 | 22:523e316cbe70 | 41 | // for debug purposes |
timmey9 | 18:b17ddeeb1c09 | 42 | DigitalOut led_red(LED_RED); |
timmey9 | 18:b17ddeeb1c09 | 43 | DigitalOut led_green(LED_GREEN); |
timmey9 | 18:b17ddeeb1c09 | 44 | DigitalOut led_blue(LED_BLUE); |
bmazzeo | 58:4bee89daccff | 45 | DigitalOut status_0(D0); |
bmazzeo | 58:4bee89daccff | 46 | DigitalOut status_1(D1); |
baxterja | 77:1ee17a9e9f8b | 47 | DigitalOut status_3(D3); |
baxterja | 85:f1be018aacac | 48 | DigitalOut Start_sync(D4);// Currently not being used. |
baxterja | 85:f1be018aacac | 49 | DigitalIn sw2(SW2);//Button 2 Currently not being used |
baxterja | 85:f1be018aacac | 50 | DigitalIn sw3(SW3);//Button 3 Currently not being used |
timmey9 | 51:43143a3fc2d7 | 51 | |
timmey9 | 52:5a40cc58c4c2 | 52 | // defined in dma.cpp |
timmey9 | 45:d591d138cdeb | 53 | extern int len; |
baxterja | 73:b059b5bdc664 | 54 | extern uint16_t static_input_array0[];//ADC 0(swaps between a0 and a1. Used to measure current) |
baxterja | 73:b059b5bdc664 | 55 | extern uint16_t static_input_array1[];//ADC 1(measures the voltage between the probe and ground) |
baxterja | 73:b059b5bdc664 | 56 | extern uint16_t static_output_array0[];//DAC outputs whatever wave form we want. |
baxterja | 73:b059b5bdc664 | 57 | extern uint16_t sampling_status;//used to determine when adc's are done reading. |
bmazzeo | 57:7b8c49e1c1f6 | 58 | |
baxterja | 85:f1be018aacac | 59 | //#define INPUT_ARRAY_SIZE 32 |
baxterja | 85:f1be018aacac | 60 | //#define DECIMATION_FACTOR 8 |
baxterja | 85:f1be018aacac | 61 | //#define DEMODULATED_SIGNAL_LENGTH 64 |
baxterja | 73:b059b5bdc664 | 62 | |
baxterja | 73:b059b5bdc664 | 63 | float *input_50k[8]; |
baxterja | 73:b059b5bdc664 | 64 | |
baxterja | 85:f1be018aacac | 65 | |
baxterja | 85:f1be018aacac | 66 | |
baxterja | 73:b059b5bdc664 | 67 | |
baxterja | 73:b059b5bdc664 | 68 | |
baxterja | 84:5b4466dd2326 | 69 | //190Hz 528 |
baxterja | 84:5b4466dd2326 | 70 | //312Hz 320 |
baxterja | 84:5b4466dd2326 | 71 | //431Hz 232 |
baxterja | 84:5b4466dd2326 | 72 | //481Hz 208 |
baxterja | 84:5b4466dd2326 | 73 | //568Hz 176 |
baxterja | 85:f1be018aacac | 74 | //#define pre_compute_length 208 |
baxterja | 85:f1be018aacac | 75 | //#define CarrierFrequency (100000/pre_compute_length) |
baxterja | 85:f1be018aacac | 76 | const int pre_compute_length = PRE_COMPUTE_LENGTH; |
baxterja | 85:f1be018aacac | 77 | const float CarrierFrequency = (100000/pre_compute_length); |
baxterja | 69:014d4bbd4e03 | 78 | #define SAMPLEFREQUENCY 100000 |
baxterja | 85:f1be018aacac | 79 | |
baxterja | 73:b059b5bdc664 | 80 | uint16_t out_val_pre[pre_compute_length]; //used to write values to the dac |
baxterja | 69:014d4bbd4e03 | 81 | float twopi = 3.14159265359 * 2; |
baxterja | 69:014d4bbd4e03 | 82 | |
baxterja | 69:014d4bbd4e03 | 83 | |
baxterja | 69:014d4bbd4e03 | 84 | void pre_compute_tables() { |
baxterja | 69:014d4bbd4e03 | 85 | // This function will precompute the cos and sin tables used in the rest of the program |
baxterja | 69:014d4bbd4e03 | 86 | for(int precompute_counter = 0; precompute_counter < pre_compute_length; precompute_counter++){ |
baxterja | 84:5b4466dd2326 | 87 | out_val_pre[precompute_counter] = (int) ((cos(twopi * CarrierFrequency /SAMPLEFREQUENCY * precompute_counter)) * 2046.0 + 2048.0);//12 bit cos wave |
baxterja | 69:014d4bbd4e03 | 88 | } |
baxterja | 73:b059b5bdc664 | 89 | |
baxterja | 73:b059b5bdc664 | 90 | |
baxterja | 69:014d4bbd4e03 | 91 | } |
baxterja | 69:014d4bbd4e03 | 92 | |
baxterja | 85:f1be018aacac | 93 | |
emilmont | 7:65188f4a8c25 | 94 | int main() { |
baxterja | 79:5f24cfd685d8 | 95 | |
timmey9 | 22:523e316cbe70 | 96 | led_blue = 1; |
timmey9 | 35:df40c4566826 | 97 | led_green = 1; |
timmey9 | 18:b17ddeeb1c09 | 98 | led_red = 1; |
timmey9 | 34:44cc9b76a507 | 99 | |
baxterja | 79:5f24cfd685d8 | 100 | pre_compute_tables(); |
baxterja | 79:5f24cfd685d8 | 101 | precompute_tables(); |
baxterja | 79:5f24cfd685d8 | 102 | //turn off all LEDs |
baxterja | 73:b059b5bdc664 | 103 | |
baxterja | 84:5b4466dd2326 | 104 | //slight change. |
baxterja | 79:5f24cfd685d8 | 105 | |
baxterja | 79:5f24cfd685d8 | 106 | |
baxterja | 73:b059b5bdc664 | 107 | |
baxterja | 73:b059b5bdc664 | 108 | pc.baud(230400); |
baxterja | 85:f1be018aacac | 109 | /* |
baxterja | 79:5f24cfd685d8 | 110 | //pc.printf("High: %x Mid: %x Low: %x",SIM->UIDH,SIM->UIDML,SIM->UIDL); |
baxterja | 84:5b4466dd2326 | 111 | if(SIM->UIDH == 0x2effff && SIM->UIDML == 0x4e453154 && SIM->UIDL == 0x1004001e) probe_number = 6; |
baxterja | 80:7a4856c596fc | 112 | else if(SIM->UIDH == 0x1cffff && SIM->UIDML == 0x4e453215 && SIM->UIDL == 0x700b0003) probe_number = 2; |
baxterja | 80:7a4856c596fc | 113 | else if(SIM->UIDH == 0x2effff && SIM->UIDML == 0x4e453215 && SIM->UIDL == 0x700b0021) probe_number = 3; |
baxterja | 80:7a4856c596fc | 114 | else if(SIM->UIDH == 0x14ffff && SIM->UIDML == 0x4e453154 && SIM->UIDL == 0x5009002b) probe_number = 4; |
baxterja | 84:5b4466dd2326 | 115 | else if(SIM->UIDH == 0x12ffff && SIM->UIDML == 0x4e453103 && SIM->UIDL == 0x60010030) probe_number = 1; |
baxterja | 84:5b4466dd2326 | 116 | else if(SIM->UIDH == 0x10ffff && SIM->UIDML == 0x4e453105 && SIM->UIDL == 0x100b0031) probe_number = 5; |
baxterja | 80:7a4856c596fc | 117 | else if(SIM->UIDH == 0x19ffff && SIM->UIDML == 0x4d441504 && SIM->UIDL == 0x90110031) probe_number = 7;//this FRDM board had a bad usb connection |
baxterja | 80:7a4856c596fc | 118 | else |
baxterja | 80:7a4856c596fc | 119 | { |
baxterja | 80:7a4856c596fc | 120 | pc.printf("FRDM BOARD NOT RECOGNIZED. Here is the new ID:\n\r"); |
baxterja | 80:7a4856c596fc | 121 | pc.printf("High: %x Mid: %x Low: %x\n\r",SIM->UIDH,SIM->UIDML,SIM->UIDL); |
baxterja | 80:7a4856c596fc | 122 | probe_number = 6; |
baxterja | 80:7a4856c596fc | 123 | } |
baxterja | 85:f1be018aacac | 124 | */ |
baxterja | 80:7a4856c596fc | 125 | pc.printf("PROBE #%d",probe_number); |
baxterja | 80:7a4856c596fc | 126 | wait(1.0f); |
baxterja | 85:f1be018aacac | 127 | |
baxterja | 79:5f24cfd685d8 | 128 | int DAC_COUNTER = 0; |
baxterja | 85:f1be018aacac | 129 | |
baxterja | 78:10b2916b8f5c | 130 | |
baxterja | 85:f1be018aacac | 131 | //Filters used in program. Coefficients generated using matlab FDA tool |
baxterja | 78:10b2916b8f5c | 132 | //Fs = 100000, FPass = 1500, FStop = 4500, -40db |
baxterja | 78:10b2916b8f5c | 133 | float Coeffs_100k[64] = {0.00368762746013400, -0.00390835182721185, -0.00352466159836192, -0.00378044968164769, -0.00434746630849834, -0.00502920744118478, -0.00570543677799210, -0.00628464650365093, -0.00668691824262464, -0.00683917139561193, -0.00667505410229485, -0.00613341508706847, -0.00516232410283893, -0.00371868951723358, -0.00177417571286934, 0.000685809876396031, 0.00365648516386919, 0.00711658039739992, 0.0110234409358280, 0.0153179248880130, 0.0199204447074274, 0.0247385052308702, 0.0296636617979935, 0.0345813441342327, 0.0393672306749833, 0.0438989152744108, 0.0480511039644129, 0.0517108728403463, 0.0547710075854812, 0.0571509837193129, 0.0587848911618005, 0.0596038010741317, 0.0596038010741317, 0.0587848911618005, 0.0571509837193129, 0.0547710075854812, 0.0517108728403463, 0.0480511039644129, 0.0438989152744108, 0.0393672306749833, 0.0345813441342327, 0.0296636617979935, 0.0247385052308702, 0.0199204447074274, 0.0153179248880130, 0.0110234409358280, 0.00711658039739992, 0.00365648516386919, 0.000685809876396031, -0.00177417571286934, -0.00371868951723358, -0.00516232410283893, -0.00613341508706847, -0.00667505410229485, -0.00683917139561193, -0.00668691824262464, -0.00628464650365093, -0.00570543677799210, -0.00502920744118478, -0.00434746630849834, -0.00378044968164769, -0.00352466159836192, -0.00390835182721185, 0.00368762746013400}; |
baxterja | 78:10b2916b8f5c | 134 | //FS = 12500, Fpass = 100 Fstop 595 -50 db, picks on 1KHz signal |
baxterja | 78:10b2916b8f5c | 135 | float Coeffs_12500[64] = {-0.00222124676855946, -0.00163176345559825, -0.00214372257722720, -0.00268653504526241, -0.00323192624665395, -0.00374368158669702, -0.00417907979321931, -0.00449328006488225, -0.00463658803501384, -0.00455550760053878, -0.00419848205106894, -0.00352024663122325, -0.00247317556122392, -0.00102679426345247, 0.000845020041268567, 0.00315252023354445, 0.00589238992243332, 0.00904676286706929, 0.0125796442526745, 0.0164391331165775, 0.0205582919104753, 0.0248562683452381, 0.0292399202971496, 0.0336089813533200, 0.0378556202824368, 0.0418719268554270, 0.0455508704073759, 0.0487915537931733, 0.0515035460002020, 0.0536094934833149, 0.0550483048257919, 0.0557785148825623, 0.0557785148825623, 0.0550483048257919, 0.0536094934833149, 0.0515035460002020, 0.0487915537931733, 0.0455508704073759, 0.0418719268554270, 0.0378556202824368, 0.0336089813533200, 0.0292399202971496, 0.0248562683452381, 0.0205582919104753, 0.0164391331165775, 0.0125796442526745, 0.00904676286706929, 0.00589238992243332, 0.00315252023354445, 0.000845020041268567, -0.00102679426345247, -0.00247317556122392, -0.00352024663122325, -0.00419848205106894, -0.00455550760053878, -0.00463658803501384, -0.00449328006488225, -0.00417907979321931, -0.00374368158669702, -0.00323192624665395, -0.00268653504526241, -0.00214372257722720, -0.00163176345559825, -0.00222124676855946}; |
baxterja | 78:10b2916b8f5c | 136 | //Fs = 1562.5 Fpass = 100, FStop = 195.6, null at 200 Hz |
baxterja | 78:10b2916b8f5c | 137 | float Coeffs_1563[32] = {-0.00296990567211633, 0.00784631357544163, 0.00955642274001412, 0.0105078670942049, 0.00746432577935901, -0.000715888274492355, -0.0127656342089486, -0.0248578255670040, -0.0313597093257934, -0.0264804428976321, -0.00639056527392095, 0.0289495639622991, 0.0749846381319702, 0.123239880157668, 0.163403327438059, 0.186215627611441, 0.186215627611441, 0.163403327438059, 0.123239880157668, 0.0749846381319702, 0.0289495639622991, -0.00639056527392095, -0.0264804428976321, -0.0313597093257934, -0.0248578255670040, -0.0127656342089486, -0.000715888274492355, 0.00746432577935901, 0.0105078670942049, 0.00955642274001412, 0.00784631357544163, -0.00296990567211633}; |
baxterja | 78:10b2916b8f5c | 138 | //Fs = 781.25, Fpass = 60, Fstop = 120, -50 Db |
baxterja | 78:10b2916b8f5c | 139 | float Coeffs_782[32] = {-0.00423132648651131, -0.00413085595827858, -0.00212955364173648, 0.00345345707266939, 0.0105870277845968, 0.0147191914630408, 0.0108878516242339, -0.00283458314983071, -0.0224398052018669, -0.0377493805765767, -0.0358474685211045, -0.00721456868509791, 0.0483564412276129, 0.119338204671425, 0.185468453617916, 0.225354002914126, 0.225354002914126, 0.185468453617916, 0.119338204671425, 0.0483564412276129, -0.00721456868509791, -0.0358474685211045, -0.0377493805765767, -0.0224398052018669, -0.00283458314983071, 0.0108878516242339, 0.0147191914630408, 0.0105870277845968, 0.00345345707266939, -0.00212955364173648, -0.00413085595827858, -0.00423132648651131}; |
baxterja | 76:704fc58ffcd0 | 140 | |
baxterja | 73:b059b5bdc664 | 141 | float Coeffs[20] = {0.0328368433284673, 0.0237706090075265, 0.0309894695180997, 0.0385253568846695, 0.0459996974310349, 0.0530165318016261, 0.0591943866845610, 0.0641755708098907, 0.0676960677594849, 0.0694621149975389, 0.0694621149975389, 0.0676960677594849, 0.0641755708098907, 0.0591943866845610, 0.0530165318016261, 0.0459996974310349, 0.0385253568846695, 0.0309894695180997, 0.0237706090075265, 0.0328368433284673}; |
baxterja | 73:b059b5bdc664 | 142 | float Coeffs2[20] = {-0.00506451294187997, -0.00824932319607346, -0.00986370066237912, -0.00518913235010027, 0.00950858650162284, 0.0357083149022659, 0.0711557142019980, 0.109659494661247, 0.142586101123340, 0.161603335553589, 0.161603335553589, 0.142586101123340, 0.109659494661247, 0.0711557142019980, 0.0357083149022659, 0.00950858650162284, -0.00518913235010027, -0.00986370066237912, -0.00824932319607346, -0.00506451294187997}; |
baxterja | 73:b059b5bdc664 | 143 | |
baxterja | 85:f1be018aacac | 144 | //note I allocate space for 4 adc inputs, but usually I only use 2 |
baxterja | 73:b059b5bdc664 | 145 | for(int i = 0; i < 8; i++) |
baxterja | 77:1ee17a9e9f8b | 146 | input_50k[i] = new float[64];//each array represents the input of the adcs |
baxterja | 78:10b2916b8f5c | 147 | |
baxterja | 85:f1be018aacac | 148 | //filters(const int num_filters, const int DECIMATION, filters * f, const int block_size, const int numTaps, float coeffs[], int demodulate_after) |
baxterja | 85:f1be018aacac | 149 | //num filters: usually 4. In-phase and quadrature phase for both voltage and current |
baxterja | 85:f1be018aacac | 150 | //DECIMATION: Decimation Factor |
baxterja | 85:f1be018aacac | 151 | //f: the filter after current filter. |
baxterja | 85:f1be018aacac | 152 | //block_size: block size of each filter command should be an integer multiple of DECIMATION |
baxterja | 85:f1be018aacac | 153 | //Flag noting rather or not to demodulate, and if so what frequency to demodulate at |
baxterja | 78:10b2916b8f5c | 154 | filters f4 = filters(4, 8, NULL, 8, 32, Coeffs_782,DEMOD_No_Demod); |
baxterja | 78:10b2916b8f5c | 155 | filters f3 = filters(4, 2, &f4, 4, 32, Coeffs_1563,DEMOD_No_Demod); |
baxterja | 78:10b2916b8f5c | 156 | filters f2 = filters(4, 8, &f3, 8, 64, Coeffs_12500,DEMOD_No_Demod); |
baxterja | 78:10b2916b8f5c | 157 | filters f1 = filters(2, 8, &f2, 64, 64, Coeffs_100k,DEMOD_200HZ); |
baxterja | 73:b059b5bdc664 | 158 | |
baxterja | 84:5b4466dd2326 | 159 | /* |
baxterja | 78:10b2916b8f5c | 160 | filters f4_b = filters(4, 8, NULL, 8, 32, Coeffs_782,DEMOD_No_Demod); |
baxterja | 78:10b2916b8f5c | 161 | filters f3_b = filters(4, 2, &f4_b, 4, 32, Coeffs_1563,DEMOD_No_Demod); |
baxterja | 78:10b2916b8f5c | 162 | filters f2_b = filters(4, 8, &f3_b, 8, 64, Coeffs_12500,DEMOD_No_Demod); |
baxterja | 78:10b2916b8f5c | 163 | filters f1_b = filters(2, 8, &f2_b, 64, 64, Coeffs_100k,DEMOD_1000HZ); |
baxterja | 84:5b4466dd2326 | 164 | */ |
baxterja | 78:10b2916b8f5c | 165 | //filters f_pre = filters(2, 2, &f1, 64, 64, Coeffs_50k,false); |
baxterja | 69:014d4bbd4e03 | 166 | |
baxterja | 73:b059b5bdc664 | 167 | //float output_print_buffer[PRINT_BUFFER_LENGTH];//used to store the adc0 values(current measurment) |
baxterja | 73:b059b5bdc664 | 168 | //float output_print_buffer2[PRINT_BUFFER_LENGTH];//used to store the adc0 values(voltage measurment) |
baxterja | 70:8cd7a8a2c153 | 169 | int print_buffer_count = 0; |
baxterja | 70:8cd7a8a2c153 | 170 | |
bmazzeo | 66:72c5c24e532c | 171 | pdb_init(); // Initalize PDB |
bmazzeo | 66:72c5c24e532c | 172 | dac_init(); // initializes DAC |
timmey9 | 45:d591d138cdeb | 173 | adc_init(); // always initialize adc before dma |
bmazzeo | 53:83a90a47c1fd | 174 | pc.printf("ADC Initialized\r\n"); |
baxterja | 74:ebc9f09fda11 | 175 | dma_init2(); // initializes DMAs |
bmazzeo | 55:2526b3317bc8 | 176 | dma_reset(); // This clears any DMA triggers that may have gotten things into a different state |
bmazzeo | 67:ec0c58490ce6 | 177 | pc.printf("Buffer Size: %i\r\n", len); |
bmazzeo | 54:1697dc574b96 | 178 | |
timmey9 | 46:a015ebf4663b | 179 | led_green = 1; |
baxterja | 79:5f24cfd685d8 | 180 | pc.printf("High: %x Mid: %x Low: %x",SIM->UIDH,SIM->UIDML,SIM->UIDL); |
timmey9 | 40:bd6d8c35e822 | 181 | pc.printf("\r\n\r\n\r\n"); |
timmey9 | 37:8bdc71f3e874 | 182 | |
bmazzeo | 64:bb4a4bd57681 | 183 | pdb_start(); |
baxterja | 84:5b4466dd2326 | 184 | bool is_actively_printing = false; |
baxterja | 84:5b4466dd2326 | 185 | char read_in_character = 'a'; |
baxterja | 70:8cd7a8a2c153 | 186 | //while(print_buffer_count<PRINT_BUFFER_LENGTH) |
baxterja | 73:b059b5bdc664 | 187 | while(!GATHER_STATISTICS||print_buffer_count<PRINT_BUFFER_LENGTH) |
baxterja | 73:b059b5bdc664 | 188 | { |
baxterja | 79:5f24cfd685d8 | 189 | if(pc.readable())//if the python code has sent any characters recently |
baxterja | 79:5f24cfd685d8 | 190 | { |
baxterja | 85:f1be018aacac | 191 | while(pc.readable())//if there is a Keyboard input |
baxterja | 84:5b4466dd2326 | 192 | { |
baxterja | 85:f1be018aacac | 193 | read_in_character = pc.getc();// read the keyboard input |
baxterja | 85:f1be018aacac | 194 | if (read_in_character == 'R')//start printing |
baxterja | 84:5b4466dd2326 | 195 | is_actively_printing = true; |
baxterja | 85:f1be018aacac | 196 | else if (read_in_character == 'S')//Stop printing |
baxterja | 84:5b4466dd2326 | 197 | is_actively_printing = false; |
baxterja | 85:f1be018aacac | 198 | else if (read_in_character == 'P')//return probe number |
baxterja | 84:5b4466dd2326 | 199 | pc.printf("p%d",probe_number); |
baxterja | 84:5b4466dd2326 | 200 | } |
baxterja | 84:5b4466dd2326 | 201 | |
baxterja | 79:5f24cfd685d8 | 202 | } |
baxterja | 79:5f24cfd685d8 | 203 | |
baxterja | 85:f1be018aacac | 204 | while(sampling_status == 0)//wait until the ADCs read a new values |
baxterja | 73:b059b5bdc664 | 205 | { |
baxterja | 85:f1be018aacac | 206 | status_0 = 1; //used for debugging allows to see utilization |
baxterja | 85:f1be018aacac | 207 | print_filter_data(&pc,is_actively_printing);//while waiting for new samples print as much data as possible |
baxterja | 75:8bb94685c80b | 208 | //Thread::wait(.0001); |
baxterja | 73:b059b5bdc664 | 209 | } |
baxterja | 73:b059b5bdc664 | 210 | sampling_status = 0;//sets sampling status to 0. DMA sets it to one once ADCs sample |
baxterja | 73:b059b5bdc664 | 211 | status_0 = 0;//Tied to D0. use an O-scope to measure how much free time there is to play with. |
baxterja | 73:b059b5bdc664 | 212 | status_1 = 1;//Tied to D1. use an O-scope to measure how much time the processing takes |
baxterja | 73:b059b5bdc664 | 213 | |
baxterja | 77:1ee17a9e9f8b | 214 | for(int i = 0; i < len; i++) |
bmazzeo | 61:a56cca07d4a6 | 215 | { |
baxterja | 73:b059b5bdc664 | 216 | static_output_array0[i] = out_val_pre[DAC_COUNTER];//DAC output |
baxterja | 73:b059b5bdc664 | 217 | DAC_COUNTER++;//Counter to kepp track of where we are in our precomputed table |
baxterja | 73:b059b5bdc664 | 218 | if (DAC_COUNTER>=pre_compute_length) {DAC_COUNTER = 0;}//wrap around the counter |
baxterja | 77:1ee17a9e9f8b | 219 | //static_output_array0[i+1] = out_val_pre[DAC_COUNTER];//DAC output |
baxterja | 77:1ee17a9e9f8b | 220 | //DAC_COUNTER++;//Counter to kepp track of where we are in our precomputed table |
baxterja | 77:1ee17a9e9f8b | 221 | //if (DAC_COUNTER>=pre_compute_length) {DAC_COUNTER = 0;}//wrap around the counter |
baxterja | 73:b059b5bdc664 | 222 | |
baxterja | 85:f1be018aacac | 223 | //Note currently we are sampling 2 adc at 100 KHz. If desired you can also sample 4 ADCs at 50 KHz |
baxterja | 77:1ee17a9e9f8b | 224 | input_50k[1][i]=float(static_input_array1[i]); |
baxterja | 77:1ee17a9e9f8b | 225 | // input_50k[3][i/2]=static_input_array1[i+1]; |
baxterja | 77:1ee17a9e9f8b | 226 | input_50k[0][i]=float(static_input_array0[i]); |
baxterja | 77:1ee17a9e9f8b | 227 | //input_50k[2][i/2]=static_input_array0[i+1]; |
baxterja | 73:b059b5bdc664 | 228 | |
baxterja | 73:b059b5bdc664 | 229 | }//End of for loop going throught the buffer of adc samples |
baxterja | 85:f1be018aacac | 230 | |
baxterja | 85:f1be018aacac | 231 | |
baxterja | 78:10b2916b8f5c | 232 | f1.input(input_50k,64,DEMOD_200HZ); |
baxterja | 84:5b4466dd2326 | 233 | //f1_b.input(input_50k,64,DEMOD_1000HZ); |
baxterja | 77:1ee17a9e9f8b | 234 | //status_3 = 1; |
baxterja | 77:1ee17a9e9f8b | 235 | //pc.printf("Y"); |
baxterja | 77:1ee17a9e9f8b | 236 | //status_3 = 0; |
baxterja | 73:b059b5bdc664 | 237 | |
baxterja | 70:8cd7a8a2c153 | 238 | |
baxterja | 73:b059b5bdc664 | 239 | status_1 = 0;//turn off D1 used in deterimining how long processing is taking |
baxterja | 85:f1be018aacac | 240 | |
baxterja | 73:b059b5bdc664 | 241 | }//end of while loop |
baxterja | 73:b059b5bdc664 | 242 | |
baxterja | 85:f1be018aacac | 243 | //prints ADC buffer if desired |
baxterja | 85:f1be018aacac | 244 | |
baxterja | 73:b059b5bdc664 | 245 | //for(int i = 0; i<PRINT_BUFFER_LENGTH; i++)//print all the adc values measured |
baxterja | 73:b059b5bdc664 | 246 | //{ |
baxterja | 73:b059b5bdc664 | 247 | // printf("%.1f %.1f\n\r",output_print_buffer[i],output_print_buffer2[i]); |
baxterja | 73:b059b5bdc664 | 248 | //} |
baxterja | 73:b059b5bdc664 | 249 | |
baxterja | 70:8cd7a8a2c153 | 250 | |
bmazzeo | 61:a56cca07d4a6 | 251 | } |
bmazzeo | 63:7903a33e2fd4 | 252 |