Test program for DS1683, Maxim Total-Elapsed-Time and Event Recorder with Alarm.

Dependencies:   DS1683 mbed vt100

Revision:
0:fa3939708086
Child:
1:c0fdefcb18ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testDS1683.cpp	Wed Jan 18 23:26:36 2017 +0000
@@ -0,0 +1,200 @@
+#include "mbed.h"
+#include "vt100.h"
+#include "MSS.h"
+#include "DS1683.h"
+
+#define MSU_DS1683_ADDRESS 0x6B
+
+vt100 *tty = 0 ;
+DS1683 *ds1683 = 0 ;
+int ds_alarm_flag = 0 ;
+DigitalOut myled(LED1) ;
+
+void prompt(void)
+{
+    printf("> ") ;
+    fflush(stdout) ;
+}
+
+void doHelp(void)
+{
+    printf("DS1683 test program %s\n", __DATE__) ;
+    printf("event <count>\n") ;
+    printf("time <etc time in sec>\n") ;
+    printf("mem : dump memory\n") ;
+    printf("write <addr> <value> : write byte data to address\n") ;
+    printf("help : print this\n") ;
+    printf("\n") ;
+}
+
+void ds_alarm(void)
+{
+    ds_alarm_flag = 1 ;
+}
+
+void dump_mem(void)
+{
+    uint8_t data[0x30] ;
+    if (ds1683) {
+        ds1683->read(0, data, 0x10) ; wait(0.1) ;
+        ds1683->read(0x10, &data[0x10], 0x10) ; wait(0.1) ;
+        ds1683->read(0x20, &data[0x20], 0x10) ; wait(0.1) ;
+        for (int i = 0 ; i < 0x30 ; i++ ) {
+            if ((i % 0x10)==0) {
+                printf("%02X : ", i) ;
+            }
+            printf("%02X ", data[i]) ;
+            if (((i+1) % 0x10)==0) {
+                printf("\n") ;
+            }
+        }
+        printf("\n") ;
+    }
+}
+
+void init_hardware(void)
+{
+    tty = new vt100() ;
+    tty->cls() ;
+    DigitalIn tmpIn(PIN_INT0, PullUp) ;
+    DigitalOut tmpOut(PIN_AN0) ;
+    
+    ds1683 = new DS1683(
+        PIN_SDA,  /* I2C SDA */
+        PIN_SCL,  /* I2C SCL */
+        PIN_AN0,  /* event GPIO output */
+        PIN_INT0, /* alarm interrupt */
+        MSU_DS1683_ADDRESS ) ; /* 0x6B as 7bit address */
+    ds1683->enterPW(0xFFFFFFFF) ;
+}
+
+/* test Elapsed Time Counter */
+void doETC(int sec)
+{
+    int loop = 0 ;
+    int time_out ;
+    ds_alarm_flag = 0 ;
+    ds1683->event = 0 ; /* set event pin inactive */
+    ds1683->clearETC() ; 
+    ds1683->setETCAlarm(sec * 4) ; /* sec sec x 250msdiv(4) */
+    time_out = sec + 5 ;
+    ds1683->enableETCAlarm() ;
+    
+    printf("ETC Test ready\n") ;
+// dump_mem() ;
+    ds1683->event = 1 ; /* activate event pin */
+    printf("ETC Test started\n") ;
+// dump_mem() ; 
+    while(ds_alarm_flag == 0) {
+        printf("%d sec\n", loop++) ;  fflush(stdout) ;
+// dump_mem() ;
+
+        if (ds1683->getStatus() & 0x01) { /* ETC_AF_BIT */
+            printf("ETC alarm detected\n") ;
+            dump_mem() ; printf("\n") ;
+            break ;
+        } else if (loop > time_out) {
+            printf("ETC Test Time Out\n") ;
+            break ;
+        }
+        wait(1.0) ;
+    }
+//    ds1683->dumpRegs() ;
+    ds1683->disableETCAlarm() ;
+    ds1683->setETCAlarm(0) ; /* disable ETC Alarm */
+    ds1683->event = 0 ;
+    ds_alarm_flag = 0 ;
+}
+    
+/* test Event Counter */
+void doEvent(int num)
+{
+    int loop = 0 ;
+    int time_out ;
+    ds_alarm_flag = 0 ;
+    ds1683->disableEventAlarm() ; 
+    ds1683->clearEvent() ;
+    ds1683->clearAlarm() ;
+    ds1683->setEventAlarm(num) ;
+    time_out = num + 5 ;
+    printf("Event count test started\n") ;
+    ds1683->enableEventAlarm() ;
+    ds1683->event.write(1) ;
+    while(ds_alarm_flag == 0) {
+// dump_mem() ;
+        ds1683->event.write(0) ;
+        printf(".") ; fflush(stdout) ;
+        wait(1) ;
+        ds1683->event.write(1) ;
+        loop++ ;
+        if (ds1683->getStatus() & 0x02) { /* EVENT_AF_BIT */
+            printf("Event count alarm detected\n") ;
+            break ;
+        } else if (loop > time_out) {
+            printf("Event count test time out\n") ;
+            break ;
+        }
+        wait(0.1) ;
+    }
+    ds1683->event = 0 ;
+    ds1683->dumpRegs() ;
+    ds1683->disableEventAlarm() ;
+    ds1683->setEventAlarm(0) ;
+    ds_alarm_flag = 0 ;
+}
+
+void doCommand(char *cmd)
+{
+    int count = 0 ;
+    int addr ;
+    int data ;
+    
+    switch(*cmd) {
+    case 'e': case 'E': /* event */
+        scanf("%d", &count) ;
+        doEvent(count) ;
+        break ;
+    case 't': case 'T': /* ETC */
+        scanf("%d", &count) ;
+        doETC(count) ;
+        break ;
+    case 'm': case 'M': /* dump Memory */
+        dump_mem() ;
+        break ;
+    case 'w': case 'W': /* write byte */
+        scanf("%x %x",&addr, &data) ;
+        ds1683->writeReg8(addr, data) ;
+        break ;
+    case 'p': case 'P': /* event pin */
+        scanf("%d", &data) ;
+        if (data) {
+            ds1683->event = 1 ;
+        } else { 
+            ds1683->event = 0 ;
+        }
+        break ;
+    default:
+        doHelp() ;
+        break ;
+    }
+}
+
+
+
+int main() {
+    char cmd[32] ;
+    init_hardware() ;
+    
+    printf("Hello DS1683 %s\n", __DATE__ ) ;
+    doHelp() ;
+//    ds1683->dumpRegs() ;
+    
+//    doEVENT() ;
+//    doETC() ;
+    prompt() ;
+    while(1) {
+        scanf("%s", cmd) ;
+        doCommand(cmd) ;
+        prompt() ;
+    }
+}