Browse Source

wait on programming startup until the PRG is released.

Klaas, Wilfried 5 years ago
parent
commit
eaf107ac31
1 changed files with 128 additions and 126 deletions
  1. 128 126
      SPS/prgmode.ino

+ 128 - 126
SPS/prgmode.ino

@@ -1,126 +1,128 @@
-/*
-  entering the programming mode
-*/
-
-#define BLINK_DELAY 250
-#define SHOW_DELAY 500
-#define KEY_DELAY 250
-
-enum PROGRAMMING_MODE {ADDRESS, COMMAND, DATA};
-
-PROGRAMMING_MODE prgMode;
-
-void programMode() {
-  // checking if advance programmer board connected?
-#ifdef SPS_ENHANCEMENT
-  if (digitalRead(SW_SEL) == 0) {
-    advancePrg();
-  }
-  else {
-#endif
-    dbgOutLn("PrgMode");
-    blinkAll();
-    prgMode = ADDRESS;
-    addr = 0;
-    do {
-      blinkD1();
-      dbgOut("Adr:");
-      dbgOutLn(addr);
-      // LoNibble Adresse anzeigen
-      doPort(addr);
-      delay(SHOW_DELAY);
-
-      blinkD2();
-      // HiNibble Adresse anzeigen
-      data = (addr & 0xf0) >> 4;                                  //Adresse anzeigen
-      doPort(data);
-      delay(SHOW_DELAY);
-
-      byte Eebyte = EEPROM.read(addr);
-      data = Eebyte & 15;
-      com = Eebyte >> 4;
-
-      blinkD3();
-      prgMode = COMMAND;
-      dbgOutLn("com");
-      doPort(com); //show command
-
-      do {
-        if (digitalRead(SW_SEL) == 0) {
-          delay(KEY_DELAY);
-          com += 1;
-          com = com & 0x0F;
-          doPort(com);
-        }
-      }
-      while (digitalRead(SW_PRG) == 1);
-      delay(DEBOUNCE);
-
-      blinkD4();
-      prgMode = DATA;
-      dbgOutLn("dat");
-      doPort(data); //show data
-
-      do {
-        if (digitalRead(SW_SEL) == 0) {
-          delay(KEY_DELAY);
-          data += 1;
-          data = data & 0x0F;
-          doPort(data);
-        }
-      }
-      while (digitalRead(SW_PRG) == 1); // S2 = 1
-      delay(DEBOUNCE);
-      
-      byte newValue = (com << 4) + data;
-      if (newValue != Eebyte) {
-        EEPROM.write(addr, newValue); //           Writeeeprom Eebyte , Addr
-        blinkAll();
-      }
-      addr += 1;
-    }
-    while (true);
-#ifdef SPS_ENHANCEMENT
-  }
-#endif
-}
-
-void blinkAll() {
-  blinkNull();
-  doPort(0x0F);
-  delay(BLINK_DELAY);
-}
-
-void blinkD1() {
-  blinkNull();
-  doPort(0x01);
-  delay(BLINK_DELAY);
-  blinkNull();
-}
-
-void blinkD2() {
-  blinkNull();
-  doPort(0x02);
-  delay(BLINK_DELAY);
-  blinkNull();
-}
-
-void blinkD3() {
-  blinkNull();
-  doPort(0x04);
-  delay(BLINK_DELAY);
-  blinkNull();
-}
-
-void blinkD4() {
-  blinkNull();
-  doPort(0x08);
-  delay(BLINK_DELAY);
-  blinkNull();
-}
-
-void blinkNull() {
-  doPort(0x00);
-  delay(BLINK_DELAY);
-}
-
+/*
+  entering the programming mode
+*/
+
+#define BLINK_DELAY 250
+#define SHOW_DELAY 500
+#define KEY_DELAY 250
+
+enum PROGRAMMING_MODE {ADDRESS, COMMAND, DATA};
+
+PROGRAMMING_MODE prgMode;
+
+void programMode() {
+  // checking if advance programmer board connected?
+#ifdef SPS_ENHANCEMENT
+  if (digitalRead(SW_SEL) == 0) {
+    advancePrg();
+  }
+  else {
+#endif
+    dbgOutLn("PrgMode");
+    blinkAll();
+    while (digitalRead(SW_PRG) == 0) {
+      // waiting for PRG to release
+    }
+    prgMode = ADDRESS;
+    addr = 0;
+    do {
+      blinkD1();
+      dbgOut("Adr:");
+      dbgOutLn(addr);
+      // LoNibble Adresse anzeigen
+      doPort(addr);
+      delay(SHOW_DELAY);
+
+      blinkD2();
+      // HiNibble Adresse anzeigen
+      data = (addr & 0xf0) >> 4;                                  //Adresse anzeigen
+      doPort(data);
+      delay(SHOW_DELAY);
+
+      byte Eebyte = EEPROM.read(addr);
+      data = Eebyte & 15;
+      com = Eebyte >> 4;
+
+      blinkD3();
+      prgMode = COMMAND;
+      dbgOutLn("com");
+      doPort(com); //show command
+
+      do {
+        if (digitalRead(SW_SEL) == 0) {
+          delay(KEY_DELAY);
+          com += 1;
+          com = com & 0x0F;
+          doPort(com);
+        }
+      }
+      while (digitalRead(SW_PRG) == 1);
+      delay(DEBOUNCE);
+
+      blinkD4();
+      prgMode = DATA;
+      dbgOutLn("dat");
+      doPort(data); //show data
+
+      do {
+        if (digitalRead(SW_SEL) == 0) {
+          delay(KEY_DELAY);
+          data += 1;
+          data = data & 0x0F;
+          doPort(data);
+        }
+      }
+      while (digitalRead(SW_PRG) == 1); // S2 = 1
+      delay(DEBOUNCE);
+      
+      byte newValue = (com << 4) + data;
+      if (newValue != Eebyte) {
+        EEPROM.write(addr, newValue); //           Writeeeprom Eebyte , Addr
+        blinkAll();
+      }
+      addr += 1;
+    }
+    while (true);
+#ifdef SPS_ENHANCEMENT
+  }
+#endif
+}
+
+void blinkAll() {
+  blinkNull();
+  doPort(0x0F);
+  delay(BLINK_DELAY);
+}
+
+void blinkD1() {
+  blinkNull();
+  doPort(0x01);
+  delay(BLINK_DELAY);
+  blinkNull();
+}
+
+void blinkD2() {
+  blinkNull();
+  doPort(0x02);
+  delay(BLINK_DELAY);
+  blinkNull();
+}
+
+void blinkD3() {
+  blinkNull();
+  doPort(0x04);
+  delay(BLINK_DELAY);
+  blinkNull();
+}
+
+void blinkD4() {
+  blinkNull();
+  doPort(0x08);
+  delay(BLINK_DELAY);
+  blinkNull();
+}
+
+void blinkNull() {
+  doPort(0x00);
+  delay(BLINK_DELAY);
+}