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