From d8efa0567eb0dcff39aa53d8494a4170728cf986 Mon Sep 17 00:00:00 2001 From: Michael Dryden Date: Mon, 14 Apr 2014 17:21:05 -0400 Subject: [PATCH] Renamed chronoamp function to ca_experiment. Finished command handlers. Adapted CA handler to use dynamic allocation. --- DSTAT-temp/src/experiment.c | 2 +- DSTAT-temp/src/experiment.h | 2 +- DSTAT-temp/src/main.c | 160 ++++++++++++++++++------------------ DSTAT1.atsuo | Bin 47616 -> 47616 bytes 4 files changed, 80 insertions(+), 84 deletions(-) diff --git a/DSTAT-temp/src/experiment.c b/DSTAT-temp/src/experiment.c index 19714f2..ac1f305 100644 --- a/DSTAT-temp/src/experiment.c +++ b/DSTAT-temp/src/experiment.c @@ -433,7 +433,7 @@ static void lsv_cca_callback(void){ return; } -void chronoamp(uint16_t steps, uint16_t step_dac[], uint16_t step_seconds[]){ +void ca_experiment(uint16_t steps, uint16_t step_dac[], uint16_t step_seconds[]){ /** * Performs a chronoamperometry experiment. * diff --git a/DSTAT-temp/src/experiment.h b/DSTAT-temp/src/experiment.h index 67174c8..b0200a8 100644 --- a/DSTAT-temp/src/experiment.h +++ b/DSTAT-temp/src/experiment.h @@ -63,7 +63,7 @@ void pot_exp_start(void); void pot_exp_stop(void); void cv_experiment(int16_t v1, int16_t v2, int16_t start, uint8_t scans, uint16_t slope); void lsv_experiment(int16_t start, int16_t stop, uint16_t slope, int8_t first_run); -void chronoamp(uint16_t steps, uint16_t step_dac[], uint16_t step_seconds[]); +void ca_experiment(uint16_t steps, uint16_t step_dac[], uint16_t step_seconds[]); void swv_experiment(int16_t start, int16_t stop, uint16_t step, uint16_t pulse_height, uint16_t frequency); #endif /* EXPERIMENT_H_ */ \ No newline at end of file diff --git a/DSTAT-temp/src/main.c b/DSTAT-temp/src/main.c index 906f954..ea697b0 100644 --- a/DSTAT-temp/src/main.c +++ b/DSTAT-temp/src/main.c @@ -9,44 +9,90 @@ //Internal global variables int16_t p1, p2, p3, p4; -uint16_t u1; +uint16_t u1, u2, u3; uint8_t p5, o1, o2, o3; -uint16_t step_dac[50], step_seconds[50]; +//uint16_t step_dac[50], step_seconds[50]; //Internal function declarations int8_t command_handler(char command); int8_t command_handler(char command){ + /** + * Deals with commands over USB + * + * Calls functions in + * @param command Command character input. + */ switch (command){ - case 'A': //ADS Buffer/rate/PGA - scanf("%1X%2X%1X",&o1,&o2,&o3); - //Sanity check goes here - ads1255_setup(o1, o2, o3); - break; - case 'G': //Gain - start gain, autogain on/off, (min gain, max gain), low/high switch thresholds - //scanf("%1u%1u%7li%7li",&g_gain,&autogain_enable,&overcurrent_threshold,&undercurrent_threshold); - scanf("%1u",&g_gain); - pot_set_gain(); - break; - case 'L': //LSV - start, stop, slope - scanf("%5i%5i%5i",&p1,&p2,&u1); - printf("%i,%i,%i",&p1,&p2,&u1); - lsv_experiment(p1,p2,u1,2); - break; - case 'C': //CV - v1, v2, start, scans, slope - scanf("%5i%5i%5i%3i%5i",&p1,&p2,&p3,&p5,&u1); - cv_experiment(p1,p2,p3,p5,u1); - break; - case 'S': //SWV - break; - case 'R': //CA - break; - default: - printf("Ee"); - return 1; + case 'A': //ADS Buffer/rate/PGA values from ads1255.h + scanf("%1x%2x%1x",&o1,&o2,&o3); + //Sanity check goes here + ads1255_setup(o1, o2, o3); + break; + + case 'G': //Gain - start gain, autogain on/off, (min gain, max gain), low/high switch thresholds + //scanf("%1u%1u%7li%7li",&g_gain,&autogain_enable,&overcurrent_threshold,&undercurrent_threshold); + scanf("%1u",&g_gain); + pot_set_gain(); //uses global g_gain, so no params + break; + + case 'L': //LSV - start, stop, slope + scanf("%5i%5i%5u",&p1,&p2,&u1); + //printf("%i,%i,%i",&p1,&p2,&u1); + lsv_experiment(p1,p2,u1,2); + break; + + case 'C': //CV - v1, v2, start, scans, slope + scanf("%5i%5i%5i%3u%5u",&p1,&p2,&p3,&p5,&u1); + cv_experiment(p1,p2,p3,p5,u1); + break; + + case 'S': //SWV - start, stop, step size, pulse_height, frequency + scanf("%5i%5i%5u%3u%5u",&p1,&p2,&u1,&u2,&u3); + swv_experiment(p1,p2,u1,u2,u3); + break; + + case 'R': //CA - steps, step_dac[], step_seconds[] + scanf("%u",&p5); //get number of steps + + //allocate arrays for steps + printf("%u\n\r", p5*sizeof(uint16_t)); + uint16_t * step_dac = malloc(p5*sizeof(uint16_t)); + uint16_t * step_seconds = malloc(p5*sizeof(uint16_t)); + //check for successful allocation + if (!step_dac || !step_seconds){ + printf("#ERR: Could not allocate memory\n\r"); + break; + } + + uint8_t i; + + printf("#DAC:\n\r#"); + for (i=0; i3bYkUK^|=YF{rU%gFLLXf{73$5?nwcO39!Y5W4_l zgc$IsiLwC8O66s5G?=((qAqj;L=zXrz+a#)#w~b;S{d%-mpk*FZ{~h;=1y2*!xFoa zs!FM27^V$5jeu2U<+pd@gL+lPBx&x>PbMEi+!tPt22M6@p0|UW(?Hn5!BA2YyyrYr zN(!iX6;?G02NhFV374-_B;8k*Gbj|0Qr83`uV_)IR5CQP0+WqWmO=(GBTQ=GPeu#W z>xw}%HVfnc*0l-`m5l3ZJ{gs?eX6xt6<;S)A%kcO@bcm&r6}3f!KZU;BPht^D!=4q%k<3^#D(WDX zuI-k^vVaCYSlv`Q5>W9@v=k|9RIE;AiJ6WcFC$zgVHmo4;&Zb43C7hh@GGi*JsrG8ZQWaHLEc63=!cD`RWMyY zxYs4XbVLt!E}i`!ywUIxZ;y}S*f%^+0e#SeUC0OTl`zx{^qVRY2AmradDr`v{(S)f z`kD&C((c6ni<|d#5U@w{V0o0M6Axdjqt|1EdS|>`WP}AnXEt0~Hj-Y@-Or|h(Uqjg z6i3P39YS^>xZ;AX7u|H?<{*hove5OWidH@Tq=k3X4Bua-L2SWA&y6jqAZt+zKgMdQ s|K1G(Y5gUjpGk(2zI1wEuF@qA5XQK%o^EqEdBD@Nv)s ze2K4vk9sp|uoIsLvqs}V4`?*;;K9bkqmRV(q@jM>Xk1O4&F*G?^Plhg=0Bfi2$~^G zWZT?RsZ^?i5Q4uHcx)bL5GQ_oxzDzk+N0l}^DNlQUOCH<+3`94aAt|;{ZcGmf5?za^#DYQ1)#w`d zmfOar{e|;_@R-$bBkzR>PgZ!j;R)JI0;;SyWt8Sy<%ayiS%e_Z0$p*OFtd6*FD$L+$1_)gR?#HUT*QUu(r+t_iV&M=1?s$@l(tl`P;Shd6wD}zMNPj7s+vrfs#Yrw z=M0oq{3TzZ*qn2bEVNR!E?b~7Kh{u9nR$8q-pXeg;*^L56Zo`yBUHBLfF3P^OXuz2 zYJN*^!sp#ZiFG?E962GutoCw9HjD6H*@3Fe_<9PN?Mu^0?0ArACxHnXsPp18vOKXt zqu}pTA$iR`uILbLnGcc9d~gl89S%x}3oUrmQO$j=x(Hp(KJc~caI|B!DWWzgV>uA$ ze{lWq zf)|HZQ92A|;azZ1$%2htUP#Vf3}4o>(g0~AA#D8+sUcOQn?%VViI6^wh}lRKUiNJ9 z{9l84A6{BYcaHb|U_JfOPPh_OOyA&PbK10=Yi5-6sL~6tEwE?Nydxk-MZBg3X=8u% zW!UEEr_;_oy;fi3|zx zm;kr#EQ1Xr940`>l>pJ9k?r2qf` -- GitLab