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

Dependencies:   DS1683 mbed vt100

Committer:
Rhyme
Date:
Wed Jan 18 23:26:36 2017 +0000
Revision:
0:fa3939708086
Child:
1:c0fdefcb18ae
First working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:fa3939708086 1 #include "mbed.h"
Rhyme 0:fa3939708086 2 #include "vt100.h"
Rhyme 0:fa3939708086 3 #include "MSS.h"
Rhyme 0:fa3939708086 4 #include "DS1683.h"
Rhyme 0:fa3939708086 5
Rhyme 0:fa3939708086 6 #define MSU_DS1683_ADDRESS 0x6B
Rhyme 0:fa3939708086 7
Rhyme 0:fa3939708086 8 vt100 *tty = 0 ;
Rhyme 0:fa3939708086 9 DS1683 *ds1683 = 0 ;
Rhyme 0:fa3939708086 10 int ds_alarm_flag = 0 ;
Rhyme 0:fa3939708086 11 DigitalOut myled(LED1) ;
Rhyme 0:fa3939708086 12
Rhyme 0:fa3939708086 13 void prompt(void)
Rhyme 0:fa3939708086 14 {
Rhyme 0:fa3939708086 15 printf("> ") ;
Rhyme 0:fa3939708086 16 fflush(stdout) ;
Rhyme 0:fa3939708086 17 }
Rhyme 0:fa3939708086 18
Rhyme 0:fa3939708086 19 void doHelp(void)
Rhyme 0:fa3939708086 20 {
Rhyme 0:fa3939708086 21 printf("DS1683 test program %s\n", __DATE__) ;
Rhyme 0:fa3939708086 22 printf("event <count>\n") ;
Rhyme 0:fa3939708086 23 printf("time <etc time in sec>\n") ;
Rhyme 0:fa3939708086 24 printf("mem : dump memory\n") ;
Rhyme 0:fa3939708086 25 printf("write <addr> <value> : write byte data to address\n") ;
Rhyme 0:fa3939708086 26 printf("help : print this\n") ;
Rhyme 0:fa3939708086 27 printf("\n") ;
Rhyme 0:fa3939708086 28 }
Rhyme 0:fa3939708086 29
Rhyme 0:fa3939708086 30 void ds_alarm(void)
Rhyme 0:fa3939708086 31 {
Rhyme 0:fa3939708086 32 ds_alarm_flag = 1 ;
Rhyme 0:fa3939708086 33 }
Rhyme 0:fa3939708086 34
Rhyme 0:fa3939708086 35 void dump_mem(void)
Rhyme 0:fa3939708086 36 {
Rhyme 0:fa3939708086 37 uint8_t data[0x30] ;
Rhyme 0:fa3939708086 38 if (ds1683) {
Rhyme 0:fa3939708086 39 ds1683->read(0, data, 0x10) ; wait(0.1) ;
Rhyme 0:fa3939708086 40 ds1683->read(0x10, &data[0x10], 0x10) ; wait(0.1) ;
Rhyme 0:fa3939708086 41 ds1683->read(0x20, &data[0x20], 0x10) ; wait(0.1) ;
Rhyme 0:fa3939708086 42 for (int i = 0 ; i < 0x30 ; i++ ) {
Rhyme 0:fa3939708086 43 if ((i % 0x10)==0) {
Rhyme 0:fa3939708086 44 printf("%02X : ", i) ;
Rhyme 0:fa3939708086 45 }
Rhyme 0:fa3939708086 46 printf("%02X ", data[i]) ;
Rhyme 0:fa3939708086 47 if (((i+1) % 0x10)==0) {
Rhyme 0:fa3939708086 48 printf("\n") ;
Rhyme 0:fa3939708086 49 }
Rhyme 0:fa3939708086 50 }
Rhyme 0:fa3939708086 51 printf("\n") ;
Rhyme 0:fa3939708086 52 }
Rhyme 0:fa3939708086 53 }
Rhyme 0:fa3939708086 54
Rhyme 0:fa3939708086 55 void init_hardware(void)
Rhyme 0:fa3939708086 56 {
Rhyme 0:fa3939708086 57 tty = new vt100() ;
Rhyme 0:fa3939708086 58 tty->cls() ;
Rhyme 0:fa3939708086 59 DigitalIn tmpIn(PIN_INT0, PullUp) ;
Rhyme 0:fa3939708086 60 DigitalOut tmpOut(PIN_AN0) ;
Rhyme 0:fa3939708086 61
Rhyme 0:fa3939708086 62 ds1683 = new DS1683(
Rhyme 0:fa3939708086 63 PIN_SDA, /* I2C SDA */
Rhyme 0:fa3939708086 64 PIN_SCL, /* I2C SCL */
Rhyme 0:fa3939708086 65 PIN_AN0, /* event GPIO output */
Rhyme 0:fa3939708086 66 PIN_INT0, /* alarm interrupt */
Rhyme 0:fa3939708086 67 MSU_DS1683_ADDRESS ) ; /* 0x6B as 7bit address */
Rhyme 0:fa3939708086 68 ds1683->enterPW(0xFFFFFFFF) ;
Rhyme 0:fa3939708086 69 }
Rhyme 0:fa3939708086 70
Rhyme 0:fa3939708086 71 /* test Elapsed Time Counter */
Rhyme 0:fa3939708086 72 void doETC(int sec)
Rhyme 0:fa3939708086 73 {
Rhyme 0:fa3939708086 74 int loop = 0 ;
Rhyme 0:fa3939708086 75 int time_out ;
Rhyme 0:fa3939708086 76 ds_alarm_flag = 0 ;
Rhyme 0:fa3939708086 77 ds1683->event = 0 ; /* set event pin inactive */
Rhyme 0:fa3939708086 78 ds1683->clearETC() ;
Rhyme 0:fa3939708086 79 ds1683->setETCAlarm(sec * 4) ; /* sec sec x 250msdiv(4) */
Rhyme 0:fa3939708086 80 time_out = sec + 5 ;
Rhyme 0:fa3939708086 81 ds1683->enableETCAlarm() ;
Rhyme 0:fa3939708086 82
Rhyme 0:fa3939708086 83 printf("ETC Test ready\n") ;
Rhyme 0:fa3939708086 84 // dump_mem() ;
Rhyme 0:fa3939708086 85 ds1683->event = 1 ; /* activate event pin */
Rhyme 0:fa3939708086 86 printf("ETC Test started\n") ;
Rhyme 0:fa3939708086 87 // dump_mem() ;
Rhyme 0:fa3939708086 88 while(ds_alarm_flag == 0) {
Rhyme 0:fa3939708086 89 printf("%d sec\n", loop++) ; fflush(stdout) ;
Rhyme 0:fa3939708086 90 // dump_mem() ;
Rhyme 0:fa3939708086 91
Rhyme 0:fa3939708086 92 if (ds1683->getStatus() & 0x01) { /* ETC_AF_BIT */
Rhyme 0:fa3939708086 93 printf("ETC alarm detected\n") ;
Rhyme 0:fa3939708086 94 dump_mem() ; printf("\n") ;
Rhyme 0:fa3939708086 95 break ;
Rhyme 0:fa3939708086 96 } else if (loop > time_out) {
Rhyme 0:fa3939708086 97 printf("ETC Test Time Out\n") ;
Rhyme 0:fa3939708086 98 break ;
Rhyme 0:fa3939708086 99 }
Rhyme 0:fa3939708086 100 wait(1.0) ;
Rhyme 0:fa3939708086 101 }
Rhyme 0:fa3939708086 102 // ds1683->dumpRegs() ;
Rhyme 0:fa3939708086 103 ds1683->disableETCAlarm() ;
Rhyme 0:fa3939708086 104 ds1683->setETCAlarm(0) ; /* disable ETC Alarm */
Rhyme 0:fa3939708086 105 ds1683->event = 0 ;
Rhyme 0:fa3939708086 106 ds_alarm_flag = 0 ;
Rhyme 0:fa3939708086 107 }
Rhyme 0:fa3939708086 108
Rhyme 0:fa3939708086 109 /* test Event Counter */
Rhyme 0:fa3939708086 110 void doEvent(int num)
Rhyme 0:fa3939708086 111 {
Rhyme 0:fa3939708086 112 int loop = 0 ;
Rhyme 0:fa3939708086 113 int time_out ;
Rhyme 0:fa3939708086 114 ds_alarm_flag = 0 ;
Rhyme 0:fa3939708086 115 ds1683->disableEventAlarm() ;
Rhyme 0:fa3939708086 116 ds1683->clearEvent() ;
Rhyme 0:fa3939708086 117 ds1683->clearAlarm() ;
Rhyme 0:fa3939708086 118 ds1683->setEventAlarm(num) ;
Rhyme 0:fa3939708086 119 time_out = num + 5 ;
Rhyme 0:fa3939708086 120 printf("Event count test started\n") ;
Rhyme 0:fa3939708086 121 ds1683->enableEventAlarm() ;
Rhyme 0:fa3939708086 122 ds1683->event.write(1) ;
Rhyme 0:fa3939708086 123 while(ds_alarm_flag == 0) {
Rhyme 0:fa3939708086 124 // dump_mem() ;
Rhyme 0:fa3939708086 125 ds1683->event.write(0) ;
Rhyme 0:fa3939708086 126 printf(".") ; fflush(stdout) ;
Rhyme 0:fa3939708086 127 wait(1) ;
Rhyme 0:fa3939708086 128 ds1683->event.write(1) ;
Rhyme 0:fa3939708086 129 loop++ ;
Rhyme 0:fa3939708086 130 if (ds1683->getStatus() & 0x02) { /* EVENT_AF_BIT */
Rhyme 0:fa3939708086 131 printf("Event count alarm detected\n") ;
Rhyme 0:fa3939708086 132 break ;
Rhyme 0:fa3939708086 133 } else if (loop > time_out) {
Rhyme 0:fa3939708086 134 printf("Event count test time out\n") ;
Rhyme 0:fa3939708086 135 break ;
Rhyme 0:fa3939708086 136 }
Rhyme 0:fa3939708086 137 wait(0.1) ;
Rhyme 0:fa3939708086 138 }
Rhyme 0:fa3939708086 139 ds1683->event = 0 ;
Rhyme 0:fa3939708086 140 ds1683->dumpRegs() ;
Rhyme 0:fa3939708086 141 ds1683->disableEventAlarm() ;
Rhyme 0:fa3939708086 142 ds1683->setEventAlarm(0) ;
Rhyme 0:fa3939708086 143 ds_alarm_flag = 0 ;
Rhyme 0:fa3939708086 144 }
Rhyme 0:fa3939708086 145
Rhyme 0:fa3939708086 146 void doCommand(char *cmd)
Rhyme 0:fa3939708086 147 {
Rhyme 0:fa3939708086 148 int count = 0 ;
Rhyme 0:fa3939708086 149 int addr ;
Rhyme 0:fa3939708086 150 int data ;
Rhyme 0:fa3939708086 151
Rhyme 0:fa3939708086 152 switch(*cmd) {
Rhyme 0:fa3939708086 153 case 'e': case 'E': /* event */
Rhyme 0:fa3939708086 154 scanf("%d", &count) ;
Rhyme 0:fa3939708086 155 doEvent(count) ;
Rhyme 0:fa3939708086 156 break ;
Rhyme 0:fa3939708086 157 case 't': case 'T': /* ETC */
Rhyme 0:fa3939708086 158 scanf("%d", &count) ;
Rhyme 0:fa3939708086 159 doETC(count) ;
Rhyme 0:fa3939708086 160 break ;
Rhyme 0:fa3939708086 161 case 'm': case 'M': /* dump Memory */
Rhyme 0:fa3939708086 162 dump_mem() ;
Rhyme 0:fa3939708086 163 break ;
Rhyme 0:fa3939708086 164 case 'w': case 'W': /* write byte */
Rhyme 0:fa3939708086 165 scanf("%x %x",&addr, &data) ;
Rhyme 0:fa3939708086 166 ds1683->writeReg8(addr, data) ;
Rhyme 0:fa3939708086 167 break ;
Rhyme 0:fa3939708086 168 case 'p': case 'P': /* event pin */
Rhyme 0:fa3939708086 169 scanf("%d", &data) ;
Rhyme 0:fa3939708086 170 if (data) {
Rhyme 0:fa3939708086 171 ds1683->event = 1 ;
Rhyme 0:fa3939708086 172 } else {
Rhyme 0:fa3939708086 173 ds1683->event = 0 ;
Rhyme 0:fa3939708086 174 }
Rhyme 0:fa3939708086 175 break ;
Rhyme 0:fa3939708086 176 default:
Rhyme 0:fa3939708086 177 doHelp() ;
Rhyme 0:fa3939708086 178 break ;
Rhyme 0:fa3939708086 179 }
Rhyme 0:fa3939708086 180 }
Rhyme 0:fa3939708086 181
Rhyme 0:fa3939708086 182
Rhyme 0:fa3939708086 183
Rhyme 0:fa3939708086 184 int main() {
Rhyme 0:fa3939708086 185 char cmd[32] ;
Rhyme 0:fa3939708086 186 init_hardware() ;
Rhyme 0:fa3939708086 187
Rhyme 0:fa3939708086 188 printf("Hello DS1683 %s\n", __DATE__ ) ;
Rhyme 0:fa3939708086 189 doHelp() ;
Rhyme 0:fa3939708086 190 // ds1683->dumpRegs() ;
Rhyme 0:fa3939708086 191
Rhyme 0:fa3939708086 192 // doEVENT() ;
Rhyme 0:fa3939708086 193 // doETC() ;
Rhyme 0:fa3939708086 194 prompt() ;
Rhyme 0:fa3939708086 195 while(1) {
Rhyme 0:fa3939708086 196 scanf("%s", cmd) ;
Rhyme 0:fa3939708086 197 doCommand(cmd) ;
Rhyme 0:fa3939708086 198 prompt() ;
Rhyme 0:fa3939708086 199 }
Rhyme 0:fa3939708086 200 }