From 1f6017f769f023d55552033f5c44be553b2052cf Mon Sep 17 00:00:00 2001 From: Michael Dryden Date: Wed, 26 Nov 2014 18:45:04 -0500 Subject: [PATCH] Add command for setting switches for potentiometry (pot_exp_start()). Add pot_experiment() for acquiring voltage measurements from RE input for potentiometry or OCP. (currently not called anywhere) --- DSTAT-temp/src/experiment.c | 70 ++++++++++++++++++++++++++++++++++++ DSTAT-temp/src/experiment.h | 6 ++++ DSTAT1.atsuo | Bin 57344 -> 51712 bytes 3 files changed, 76 insertions(+) diff --git a/DSTAT-temp/src/experiment.c b/DSTAT-temp/src/experiment.c index d209962..03e92f4 100644 --- a/DSTAT-temp/src/experiment.c +++ b/DSTAT-temp/src/experiment.c @@ -237,6 +237,15 @@ void volt_exp_stop(void){ #endif } +void pot_exp_start(void){ + /** + * All switches open. + */ + #if BOARD_VER_MAJOR == 1 && BOARD_VER_MINOR == 2 + arch_ioport_set_port_level(IOPORT_PORTB, PIN2_bm|PIN3_bm|PIN4_bm|PIN5_bm, 0); + #endif +} + void precond(int16_t v1, uint16_t t1, int16_t v2, uint16_t t2){ //assumes potentiostat switches are already set /** * Performs experiment preconditioning. @@ -564,6 +573,67 @@ static void lsv_cca_callback(void){ return; } +#if BOARD_VER_MAJOR == 1 && BOARD_VER_MINOR == 2 + +void pot_experiment(uint16_t time_seconds){ + /** + * Performs a potentiometry experiment. Assumes either pot_exp_start() or ocp_exp_start() has been called and appropriate switches are set. + * + * @param time_seconds Time until automatic stop. If 0, can only be cancelled by abort signal. + */ + while (RTC.STATUS & RTC_SYNCBUSY_bm); + RTC.PER = 999; + while (RTC.STATUS & RTC_SYNCBUSY_bm); + RTC.CTRL = RTC_PRESCALER_DIV1_gc; //1ms tick + RTC.CNT = 0; + + EVSYS.CH0MUX = EVSYS_CHMUX_RTC_OVF_gc; //EV CH0 -- RTC overflow 1s + + portd_int0_callback = portd_int0_ca; //ADC interrupt + + tc_enable(&TCC0); + + ads1255_mux(ADS_MUX_POT); + ads1255_rdatac(); + ads1255_wakeup(); + + tc_write_period(&TCC0,0xffff); + tc_write_clock_source(&TCC0, TC_CLKSEL_EVCH0_gc); + tc_set_direction(&TCC0, TC_UP); + TCC0.CNT = 0; + + up = 1; + if (time_seconds >= 1){ //only enable interrupt if non-zero timeout specified + tc_set_cca_interrupt_callback(&TCC0, ca_cca_callback); + tc_write_cc(&TCC0, TC_CCA, time_seconds-1); + tc_enable_cc_channels(&TCC0, TC_CCAEN); + tc_set_cca_interrupt_level(&TCC0, TC_INT_LVL_MED); + } + + RTC.CNT=0; + PORTD.INTCTRL = PORT_INT0LVL_LO_gc; + + while (up !=0){ + if (udi_cdc_is_rx_ready()){ + if (getchar() == 'a'){ + ca_cca_callback(); + printf("##ABORT\n\r"); + goto aborting; + } + } + } + + aborting: + tc_set_cca_interrupt_level(&TCC0, TC_INT_LVL_OFF); + tc_write_clock_source(&TCC0, TC_CLKSEL_OFF_gc); + tc_disable(&TCC0); + volt_exp_stop(); + ads1255_standby(); + + return; +} +#endif + 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 943d15a..a8a00f6 100644 --- a/DSTAT-temp/src/experiment.h +++ b/DSTAT-temp/src/experiment.h @@ -78,9 +78,15 @@ void pot_init(void); void pot_set_gain(void); void volt_exp_start(void); void volt_exp_stop(void); +void pot_exp_start(void); void precond(int16_t v1, uint16_t t1, int16_t v2, uint16_t t2); void cv_experiment(int16_t v1, int16_t v2, int16_t start, uint8_t scans, uint16_t slope); uint8_t lsv_experiment(int16_t start, int16_t stop, uint16_t slope, int8_t first_run); + +#if BOARD_VER_MAJOR == 1 && BOARD_VER_MINOR == 2 + void pot_experiment(uint16_t time_seconds); +#endif + 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, uint16_t scans); void dpv_experiment(int16_t start, int16_t stop, uint16_t step, uint16_t pulse_height, uint16_t pulse_period, uint16_t pulse_width); diff --git a/DSTAT1.atsuo b/DSTAT1.atsuo index bc336d114d679c8f911ab15af332082573992a49..7e2408b7311fdb99ece7cd1647659109e2be695c 100644 GIT binary patch delta 1996 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 -- GitLab