Test program for DS1683, Maxim Total-Elapsed-Time and Event Recorder with Alarm.
Dependencies: DS1683 mbed vt100
testDS1683.cpp@0:fa3939708086, 2017-01-18 (annotated)
- 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?
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 | 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 | } |