Test program for DS1683, Maxim Total-Elapsed-Time and Event Recorder with Alarm.
Dependencies: DS1683 mbed vt100
testDS1683.cpp@4:8fac856f8a67, 2017-04-14 (annotated)
- Committer:
- Rhyme
- Date:
- Fri Apr 14 06:55:25 2017 +0000
- Revision:
- 4:8fac856f8a67
- Parent:
- 3:7043500e6f93
MAX32600MBED support added.; Use breadboard instead of MSS for this MCU board
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 | 3:7043500e6f93 | 11 | DigitalOut ledD1(PIN_SCK, 1) ; |
Rhyme | 3:7043500e6f93 | 12 | DigitalOut ledD2(PIN_MISO, 1) ; |
Rhyme | 3:7043500e6f93 | 13 | DigitalOut ledD3(PIN_MOSI, 1) ; |
Rhyme | 3:7043500e6f93 | 14 | DigitalOut ledD4(PIN_CS0, 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 | 2:746993c2ea4a | 39 | #if 0 |
Rhyme | 1:c0fdefcb18ae | 40 | printf(" : ") ; |
Rhyme | 1:c0fdefcb18ae | 41 | for (i = 0 ; i < 0x10 ; i++ ) { |
Rhyme | 1:c0fdefcb18ae | 42 | printf("%02X ", i) ; |
Rhyme | 1:c0fdefcb18ae | 43 | } |
Rhyme | 1:c0fdefcb18ae | 44 | printf("\n") ; |
Rhyme | 1:c0fdefcb18ae | 45 | for (i = 0 ; i < 0x30 ; i++ ) { |
Rhyme | 0:fa3939708086 | 46 | if ((i % 0x10)==0) { |
Rhyme | 0:fa3939708086 | 47 | printf("%02X : ", i) ; |
Rhyme | 0:fa3939708086 | 48 | } |
Rhyme | 0:fa3939708086 | 49 | printf("%02X ", data[i]) ; |
Rhyme | 0:fa3939708086 | 50 | if (((i+1) % 0x10)==0) { |
Rhyme | 0:fa3939708086 | 51 | printf("\n") ; |
Rhyme | 0:fa3939708086 | 52 | } |
Rhyme | 0:fa3939708086 | 53 | } |
Rhyme | 0:fa3939708086 | 54 | printf("\n") ; |
Rhyme | 2:746993c2ea4a | 55 | #else |
Rhyme | 2:746993c2ea4a | 56 | printf("EVENT PIN: ") ; |
Rhyme | 2:746993c2ea4a | 57 | if (data[1] & 0x04) { |
Rhyme | 2:746993c2ea4a | 58 | printf("ON") ; |
Rhyme | 2:746993c2ea4a | 59 | } else { |
Rhyme | 2:746993c2ea4a | 60 | printf("OFF") ; |
Rhyme | 2:746993c2ea4a | 61 | } |
Rhyme | 2:746993c2ea4a | 62 | printf("\n") ; |
Rhyme | 2:746993c2ea4a | 63 | printf("EVENT Alarm: ") ; |
Rhyme | 2:746993c2ea4a | 64 | if (data[1] & 0x02) { |
Rhyme | 2:746993c2ea4a | 65 | printf("[ON] ") ; |
Rhyme | 2:746993c2ea4a | 66 | } else { |
Rhyme | 2:746993c2ea4a | 67 | printf("[OFF] ") ; |
Rhyme | 2:746993c2ea4a | 68 | } |
Rhyme | 2:746993c2ea4a | 69 | printf("Event Counter: %02X%02X / ", data[9], data[8]) ; |
Rhyme | 2:746993c2ea4a | 70 | printf("%02X%02X\n", data[0x11], data[0x10]) ; |
Rhyme | 2:746993c2ea4a | 71 | printf("ETC Alarm: ") ; |
Rhyme | 2:746993c2ea4a | 72 | if (data[1] & 0x01) { |
Rhyme | 2:746993c2ea4a | 73 | printf("[ON] ") ; |
Rhyme | 2:746993c2ea4a | 74 | } else { |
Rhyme | 2:746993c2ea4a | 75 | printf("[OFF] ") ; |
Rhyme | 2:746993c2ea4a | 76 | } |
Rhyme | 2:746993c2ea4a | 77 | printf("ETC Counter: %02X%02X%02X%02X / ", |
Rhyme | 2:746993c2ea4a | 78 | data[0x0D], data[0x0C], data[0x0B], data[0x0A]) ; |
Rhyme | 2:746993c2ea4a | 79 | printf("%02X%02X%02X%02X\n", |
Rhyme | 2:746993c2ea4a | 80 | data[0x15], data[0x14], data[0x13], data[0x12]) ; |
Rhyme | 2:746993c2ea4a | 81 | printf("\n") ; |
Rhyme | 2:746993c2ea4a | 82 | #endif |
Rhyme | 0:fa3939708086 | 83 | } |
Rhyme | 0:fa3939708086 | 84 | } |
Rhyme | 0:fa3939708086 | 85 | |
Rhyme | 0:fa3939708086 | 86 | void init_hardware(void) |
Rhyme | 0:fa3939708086 | 87 | { |
Rhyme | 3:7043500e6f93 | 88 | #if defined (TARGET_MAX32600MBED) |
Rhyme | 3:7043500e6f93 | 89 | tty = new vt100(57600) ; |
Rhyme | 3:7043500e6f93 | 90 | DigitalIn tmpIn(P2_5, PullUp) ; |
Rhyme | 3:7043500e6f93 | 91 | DigitalOut tmpOut(P1_2) ; |
Rhyme | 4:8fac856f8a67 | 92 | ds1683 = new DS1683( |
Rhyme | 4:8fac856f8a67 | 93 | PIN_SDA, /* I2C SDA */ |
Rhyme | 4:8fac856f8a67 | 94 | PIN_SCL, /* I2C SCL */ |
Rhyme | 4:8fac856f8a67 | 95 | P1_2, /* event GPIO output */ /* MAX32600 only */ |
Rhyme | 4:8fac856f8a67 | 96 | P2_5, /* alarm interrupt */ |
Rhyme | 4:8fac856f8a67 | 97 | MSU_DS1683_ADDRESS ) ; /* 0x6B as 7bit address */ |
Rhyme | 3:7043500e6f93 | 98 | #else |
Rhyme | 0:fa3939708086 | 99 | tty = new vt100() ; |
Rhyme | 0:fa3939708086 | 100 | DigitalIn tmpIn(PIN_INT0, PullUp) ; |
Rhyme | 0:fa3939708086 | 101 | DigitalOut tmpOut(PIN_AN0) ; |
Rhyme | 4:8fac856f8a67 | 102 | ds1683 = new DS1683( |
Rhyme | 0:fa3939708086 | 103 | PIN_SDA, /* I2C SDA */ |
Rhyme | 0:fa3939708086 | 104 | PIN_SCL, /* I2C SCL */ |
Rhyme | 4:8fac856f8a67 | 105 | PIN_AN0, /* event GPIO output */ |
Rhyme | 4:8fac856f8a67 | 106 | PIN_INT0, /* alarm interrupt */ |
Rhyme | 0:fa3939708086 | 107 | MSU_DS1683_ADDRESS ) ; /* 0x6B as 7bit address */ |
Rhyme | 4:8fac856f8a67 | 108 | #endif |
Rhyme | 4:8fac856f8a67 | 109 | |
Rhyme | 0:fa3939708086 | 110 | ds1683->enterPW(0xFFFFFFFF) ; |
Rhyme | 4:8fac856f8a67 | 111 | tty->cls() ; |
Rhyme | 0:fa3939708086 | 112 | } |
Rhyme | 0:fa3939708086 | 113 | |
Rhyme | 0:fa3939708086 | 114 | /* test Elapsed Time Counter */ |
Rhyme | 0:fa3939708086 | 115 | void doETC(int sec) |
Rhyme | 0:fa3939708086 | 116 | { |
Rhyme | 0:fa3939708086 | 117 | int loop = 0 ; |
Rhyme | 0:fa3939708086 | 118 | int time_out ; |
Rhyme | 0:fa3939708086 | 119 | ds_alarm_flag = 0 ; |
Rhyme | 0:fa3939708086 | 120 | ds1683->event = 0 ; /* set event pin inactive */ |
Rhyme | 1:c0fdefcb18ae | 121 | ds1683->clearETC() ; /* clear elapsed time counter */ |
Rhyme | 1:c0fdefcb18ae | 122 | ds1683->setETCAlarm(sec * 4) ; /* etc alarm limit sec x 250msdiv(4) */ |
Rhyme | 0:fa3939708086 | 123 | time_out = sec + 5 ; |
Rhyme | 0:fa3939708086 | 124 | ds1683->enableETCAlarm() ; |
Rhyme | 0:fa3939708086 | 125 | |
Rhyme | 1:c0fdefcb18ae | 126 | printf("ETC (Elapsed Time Count) Test for %d sec\n", sec) ; |
Rhyme | 0:fa3939708086 | 127 | ds1683->event = 1 ; /* activate event pin */ |
Rhyme | 0:fa3939708086 | 128 | while(ds_alarm_flag == 0) { |
Rhyme | 1:c0fdefcb18ae | 129 | ledD3 = 0 ; |
Rhyme | 1:c0fdefcb18ae | 130 | wait(0.5) ; |
Rhyme | 1:c0fdefcb18ae | 131 | ledD3 = 1 ; |
Rhyme | 1:c0fdefcb18ae | 132 | wait(0.5) ; |
Rhyme | 0:fa3939708086 | 133 | printf("%d sec\n", loop++) ; fflush(stdout) ; |
Rhyme | 0:fa3939708086 | 134 | |
Rhyme | 0:fa3939708086 | 135 | if (ds1683->getStatus() & 0x01) { /* ETC_AF_BIT */ |
Rhyme | 0:fa3939708086 | 136 | printf("ETC alarm detected\n") ; |
Rhyme | 1:c0fdefcb18ae | 137 | ledD1 = 0 ; /* LED1 ON */ |
Rhyme | 0:fa3939708086 | 138 | break ; |
Rhyme | 0:fa3939708086 | 139 | } else if (loop > time_out) { |
Rhyme | 0:fa3939708086 | 140 | printf("ETC Test Time Out\n") ; |
Rhyme | 0:fa3939708086 | 141 | break ; |
Rhyme | 0:fa3939708086 | 142 | } |
Rhyme | 0:fa3939708086 | 143 | } |
Rhyme | 0:fa3939708086 | 144 | ds1683->event = 0 ; |
Rhyme | 0:fa3939708086 | 145 | ds_alarm_flag = 0 ; |
Rhyme | 0:fa3939708086 | 146 | } |
Rhyme | 0:fa3939708086 | 147 | |
Rhyme | 0:fa3939708086 | 148 | /* test Event Counter */ |
Rhyme | 0:fa3939708086 | 149 | void doEvent(int num) |
Rhyme | 0:fa3939708086 | 150 | { |
Rhyme | 0:fa3939708086 | 151 | int loop = 0 ; |
Rhyme | 0:fa3939708086 | 152 | int time_out ; |
Rhyme | 0:fa3939708086 | 153 | ds_alarm_flag = 0 ; |
Rhyme | 0:fa3939708086 | 154 | ds1683->disableEventAlarm() ; |
Rhyme | 0:fa3939708086 | 155 | ds1683->clearEvent() ; |
Rhyme | 0:fa3939708086 | 156 | ds1683->clearAlarm() ; |
Rhyme | 0:fa3939708086 | 157 | ds1683->setEventAlarm(num) ; |
Rhyme | 0:fa3939708086 | 158 | time_out = num + 5 ; |
Rhyme | 1:c0fdefcb18ae | 159 | printf("Event count test for %d events\n", num) ; |
Rhyme | 0:fa3939708086 | 160 | ds1683->enableEventAlarm() ; |
Rhyme | 0:fa3939708086 | 161 | ds1683->event.write(1) ; |
Rhyme | 0:fa3939708086 | 162 | while(ds_alarm_flag == 0) { |
Rhyme | 1:c0fdefcb18ae | 163 | ledD4 = 0 ; /* LED ON */ |
Rhyme | 0:fa3939708086 | 164 | ds1683->event.write(0) ; |
Rhyme | 1:c0fdefcb18ae | 165 | printf("%d ", loop++) ; fflush(stdout) ; |
Rhyme | 1:c0fdefcb18ae | 166 | wait(0.4) ; |
Rhyme | 0:fa3939708086 | 167 | ds1683->event.write(1) ; |
Rhyme | 1:c0fdefcb18ae | 168 | ledD4 = 1 ; /* LED OFF */ |
Rhyme | 0:fa3939708086 | 169 | if (ds1683->getStatus() & 0x02) { /* EVENT_AF_BIT */ |
Rhyme | 1:c0fdefcb18ae | 170 | printf("\nEvent count alarm detected\n") ; |
Rhyme | 1:c0fdefcb18ae | 171 | ledD2 = 0 ; /* LED2 ON */ |
Rhyme | 0:fa3939708086 | 172 | break ; |
Rhyme | 0:fa3939708086 | 173 | } else if (loop > time_out) { |
Rhyme | 1:c0fdefcb18ae | 174 | printf("\nEvent count test time out\n") ; |
Rhyme | 0:fa3939708086 | 175 | break ; |
Rhyme | 0:fa3939708086 | 176 | } |
Rhyme | 0:fa3939708086 | 177 | wait(0.1) ; |
Rhyme | 0:fa3939708086 | 178 | } |
Rhyme | 0:fa3939708086 | 179 | ds1683->event = 0 ; |
Rhyme | 0:fa3939708086 | 180 | ds_alarm_flag = 0 ; |
Rhyme | 0:fa3939708086 | 181 | } |
Rhyme | 0:fa3939708086 | 182 | |
Rhyme | 0:fa3939708086 | 183 | void doCommand(char *cmd) |
Rhyme | 0:fa3939708086 | 184 | { |
Rhyme | 0:fa3939708086 | 185 | int count = 0 ; |
Rhyme | 0:fa3939708086 | 186 | int addr ; |
Rhyme | 0:fa3939708086 | 187 | int data ; |
Rhyme | 0:fa3939708086 | 188 | |
Rhyme | 0:fa3939708086 | 189 | switch(*cmd) { |
Rhyme | 0:fa3939708086 | 190 | case 'e': case 'E': /* event */ |
Rhyme | 0:fa3939708086 | 191 | scanf("%d", &count) ; |
Rhyme | 0:fa3939708086 | 192 | doEvent(count) ; |
Rhyme | 0:fa3939708086 | 193 | break ; |
Rhyme | 0:fa3939708086 | 194 | case 't': case 'T': /* ETC */ |
Rhyme | 0:fa3939708086 | 195 | scanf("%d", &count) ; |
Rhyme | 0:fa3939708086 | 196 | doETC(count) ; |
Rhyme | 0:fa3939708086 | 197 | break ; |
Rhyme | 0:fa3939708086 | 198 | case 'm': case 'M': /* dump Memory */ |
Rhyme | 0:fa3939708086 | 199 | dump_mem() ; |
Rhyme | 0:fa3939708086 | 200 | break ; |
Rhyme | 1:c0fdefcb18ae | 201 | case 'c': case 'C': /* clear registers */ |
Rhyme | 1:c0fdefcb18ae | 202 | ds1683->clearRegs() ; |
Rhyme | 1:c0fdefcb18ae | 203 | break ; |
Rhyme | 0:fa3939708086 | 204 | case 'w': case 'W': /* write byte */ |
Rhyme | 0:fa3939708086 | 205 | scanf("%x %x",&addr, &data) ; |
Rhyme | 0:fa3939708086 | 206 | ds1683->writeReg8(addr, data) ; |
Rhyme | 0:fa3939708086 | 207 | break ; |
Rhyme | 0:fa3939708086 | 208 | case 'p': case 'P': /* event pin */ |
Rhyme | 0:fa3939708086 | 209 | scanf("%d", &data) ; |
Rhyme | 0:fa3939708086 | 210 | if (data) { |
Rhyme | 0:fa3939708086 | 211 | ds1683->event = 1 ; |
Rhyme | 1:c0fdefcb18ae | 212 | ledD4 = 0 ; |
Rhyme | 0:fa3939708086 | 213 | } else { |
Rhyme | 0:fa3939708086 | 214 | ds1683->event = 0 ; |
Rhyme | 1:c0fdefcb18ae | 215 | ledD4 = 1 ; |
Rhyme | 0:fa3939708086 | 216 | } |
Rhyme | 0:fa3939708086 | 217 | break ; |
Rhyme | 0:fa3939708086 | 218 | default: |
Rhyme | 0:fa3939708086 | 219 | doHelp() ; |
Rhyme | 0:fa3939708086 | 220 | break ; |
Rhyme | 0:fa3939708086 | 221 | } |
Rhyme | 0:fa3939708086 | 222 | } |
Rhyme | 0:fa3939708086 | 223 | |
Rhyme | 1:c0fdefcb18ae | 224 | void doLEDs(void) |
Rhyme | 1:c0fdefcb18ae | 225 | { |
Rhyme | 1:c0fdefcb18ae | 226 | uint8_t status ; |
Rhyme | 1:c0fdefcb18ae | 227 | status = ds1683->getStatus() ; |
Rhyme | 1:c0fdefcb18ae | 228 | if (status & 0x01) { |
Rhyme | 1:c0fdefcb18ae | 229 | ledD1 = 0 ; |
Rhyme | 1:c0fdefcb18ae | 230 | } else { |
Rhyme | 1:c0fdefcb18ae | 231 | ledD1 = 1 ; |
Rhyme | 1:c0fdefcb18ae | 232 | } |
Rhyme | 1:c0fdefcb18ae | 233 | if (status & 0x02) { |
Rhyme | 1:c0fdefcb18ae | 234 | ledD2 = 0 ; |
Rhyme | 1:c0fdefcb18ae | 235 | } else { |
Rhyme | 1:c0fdefcb18ae | 236 | ledD2 = 1 ; |
Rhyme | 1:c0fdefcb18ae | 237 | } |
Rhyme | 1:c0fdefcb18ae | 238 | } |
Rhyme | 0:fa3939708086 | 239 | |
Rhyme | 1:c0fdefcb18ae | 240 | void prompt(void) |
Rhyme | 1:c0fdefcb18ae | 241 | { |
Rhyme | 1:c0fdefcb18ae | 242 | printf("> ") ; |
Rhyme | 1:c0fdefcb18ae | 243 | fflush(stdout) ; |
Rhyme | 1:c0fdefcb18ae | 244 | wait(0.01) ; |
Rhyme | 1:c0fdefcb18ae | 245 | doLEDs() ; |
Rhyme | 1:c0fdefcb18ae | 246 | } |
Rhyme | 0:fa3939708086 | 247 | |
Rhyme | 0:fa3939708086 | 248 | int main() { |
Rhyme | 0:fa3939708086 | 249 | char cmd[32] ; |
Rhyme | 1:c0fdefcb18ae | 250 | |
Rhyme | 0:fa3939708086 | 251 | init_hardware() ; |
Rhyme | 0:fa3939708086 | 252 | |
Rhyme | 0:fa3939708086 | 253 | doHelp() ; |
Rhyme | 0:fa3939708086 | 254 | prompt() ; |
Rhyme | 0:fa3939708086 | 255 | while(1) { |
Rhyme | 0:fa3939708086 | 256 | scanf("%s", cmd) ; |
Rhyme | 0:fa3939708086 | 257 | doCommand(cmd) ; |
Rhyme | 0:fa3939708086 | 258 | prompt() ; |
Rhyme | 0:fa3939708086 | 259 | } |
Rhyme | 0:fa3939708086 | 260 | } |