From f7b1841e56759be80f17e5411f180c6a43cbb1f8 Mon Sep 17 00:00:00 2001 From: "Michael D. M. Dryden" <mdryden@chem.utoronto.ca> Date: Tue, 2 Feb 2016 15:22:19 -0500 Subject: [PATCH] Add delay between WE activation and CE. Fixes dstat/dstat-firmware#1 --- DSTAT/src/experiment.c | 20 +++++++++++++------- DSTAT/src/experiment.h | 5 +++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/DSTAT/src/experiment.c b/DSTAT/src/experiment.c index 3da1d45..cae2900 100644 --- a/DSTAT/src/experiment.c +++ b/DSTAT/src/experiment.c @@ -362,17 +362,20 @@ void volt_exp_start(void){ * Connects measurement cell to rest of circuit. */ #if BOARD_VER_MAJOR == 1 && BOARD_VER_MINOR == 1 - ioport_set_port_level(IOPORT_PORTB, PIN3_bm|PIN4_bm|PIN5_bm, PIN3_bm|PIN4_bm|PIN5_bm); + ioport_set_port_level(IOPORT_PORTB, PIN3_bm|PIN4_bm|PIN5_bm, PIN3_bm|PIN4_bm); #endif #if BOARD_VER_MAJOR == 1 && BOARD_VER_MINOR == 2 - ioport_set_port_level(IOPORT_PORTB, PIN2_bm|PIN3_bm|PIN4_bm|PIN5_bm, PIN2_bm|PIN4_bm|PIN5_bm); + ioport_set_port_level(IOPORT_PORTB, PIN2_bm|PIN3_bm|PIN4_bm|PIN5_bm, PIN2_bm|PIN4_bm); #endif + + delay_ms(100); // Make sure WE circuit is connected before control voltage applied + ioport_set_pin_level(PIN_POT_CE, 1); if (g_short == 1) - ioport_set_port_level(IOPORT_PORTB, PIN3_bm, PIN3_bm); + ioport_set_pin_level(PIN_POT_2ELECTRODE, 1); else - ioport_set_port_level(IOPORT_PORTB, PIN3_bm, 0); + ioport_set_pin_level(PIN_POT_2ELECTRODE, 0); } void volt_exp_stop(void){ @@ -380,13 +383,16 @@ void volt_exp_stop(void){ * Disconnects measurement cell. */ #if BOARD_VER_MAJOR == 1 && BOARD_VER_MINOR == 1 - ioport_set_port_level(IOPORT_PORTB, PIN3_bm|PIN4_bm|PIN5_bm, 0); + ioport_set_port_level(IOPORT_PORTB, PIN3_bm|PIN5_bm, 0); #endif #if BOARD_VER_MAJOR == 1 && BOARD_VER_MINOR == 2 - ioport_set_port_level(IOPORT_PORTB, PIN2_bm|PIN3_bm|PIN4_bm|PIN5_bm, 0); + ioport_set_port_level(IOPORT_PORTB, PIN2_bm|PIN3_bm|PIN5_bm, 0); #endif - ioport_set_port_level(IOPORT_PORTB, PIN3_bm, PIN3_bm); + delay_ms(100); // Make sure WE is last to disconnect + ioport_set_pin_level(PIN_POT_WE, 0); + + ioport_set_pin_level(PIN_POT_2ELECTRODE, 1); } #if BOARD_VER_MAJOR == 1 && BOARD_VER_MINOR >= 2 diff --git a/DSTAT/src/experiment.h b/DSTAT/src/experiment.h index 7c171ae..f9db411 100644 --- a/DSTAT/src/experiment.h +++ b/DSTAT/src/experiment.h @@ -45,6 +45,11 @@ #define POT_GAIN_100M 7 #endif +#define PIN_POT_CE IOPORT_CREATE_PIN(PORTB,5) +#define PIN_POT_2ELECTRODE IOPORT_CREATE_PIN(PORTB,3) +#define PIN_POT_CTRL IOPORT_CREATE_PIN(PORTB,2) +#define PIN_POT_WE IOPORT_CREATE_PIN(PORTB,4) + #define POT_OCP 0 #define POT_POTENT 1 -- GitLab