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

Dependencies:   DS1683 mbed vt100

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?

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 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 }