Test program for DS1683, Maxim Total-Elapsed-Time and Event Recorder with Alarm.
Dependencies: DS1683 mbed vt100
testDS1683.cpp@1:c0fdefcb18ae, 2017-01-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |