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

Dependencies:   DS1683 mbed vt100

Committer:
Rhyme
Date:
Thu Jan 19 02:47:59 2017 +0000
Revision:
1:c0fdefcb18ae
Parent:
0:fa3939708086
Child:
2:746993c2ea4a
Commit for demo on 19-Jan-2017

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