![](/media/cache/group/IMG_1289.JPG.50x50_q85.jpg)
Test program for DS1683, Maxim Total-Elapsed-Time and Event Recorder with Alarm.
Dependencies: DS1683 mbed vt100
Diff: testDS1683.cpp
- 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() ; + } +}