Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DS1683 mbed vt100
testDS1683.cpp
00001 #include "mbed.h" 00002 #include "vt100.h" 00003 #include "MSS.h" 00004 #include "DS1683.h" 00005 00006 #define MSU_DS1683_ADDRESS 0x6B 00007 00008 vt100 *tty = 0 ; 00009 DS1683 *ds1683 = 0 ; 00010 int ds_alarm_flag = 0 ; 00011 DigitalOut ledD1(PIN_SCK, 1) ; 00012 DigitalOut ledD2(PIN_MISO, 1) ; 00013 DigitalOut ledD3(PIN_MOSI, 1) ; 00014 DigitalOut ledD4(PIN_CS0, 1) ; 00015 00016 void doHelp(void) 00017 { 00018 printf("DS1683 test program %s\n", __DATE__) ; 00019 printf("event <count> : event count test\n") ; 00020 printf("time <sec> : elapsed time count test\n") ; 00021 printf("clear : clear event and etc registers\n") ; 00022 printf("mem : dump memory\n") ; 00023 printf("write <addr> <value> : write byte data to address\n") ; 00024 printf("help : print this\n") ; 00025 printf("\n") ; 00026 } 00027 00028 void ds_alarm(void) 00029 { 00030 ds_alarm_flag = 1 ; 00031 } 00032 00033 void dump_mem(void) 00034 { 00035 int i ; 00036 uint8_t data[0x30] ; 00037 if (ds1683) { 00038 ds1683->read(0, data, 0x30) ; 00039 #if 0 00040 printf(" : ") ; 00041 for (i = 0 ; i < 0x10 ; i++ ) { 00042 printf("%02X ", i) ; 00043 } 00044 printf("\n") ; 00045 for (i = 0 ; i < 0x30 ; i++ ) { 00046 if ((i % 0x10)==0) { 00047 printf("%02X : ", i) ; 00048 } 00049 printf("%02X ", data[i]) ; 00050 if (((i+1) % 0x10)==0) { 00051 printf("\n") ; 00052 } 00053 } 00054 printf("\n") ; 00055 #else 00056 printf("EVENT PIN: ") ; 00057 if (data[1] & 0x04) { 00058 printf("ON") ; 00059 } else { 00060 printf("OFF") ; 00061 } 00062 printf("\n") ; 00063 printf("EVENT Alarm: ") ; 00064 if (data[1] & 0x02) { 00065 printf("[ON] ") ; 00066 } else { 00067 printf("[OFF] ") ; 00068 } 00069 printf("Event Counter: %02X%02X / ", data[9], data[8]) ; 00070 printf("%02X%02X\n", data[0x11], data[0x10]) ; 00071 printf("ETC Alarm: ") ; 00072 if (data[1] & 0x01) { 00073 printf("[ON] ") ; 00074 } else { 00075 printf("[OFF] ") ; 00076 } 00077 printf("ETC Counter: %02X%02X%02X%02X / ", 00078 data[0x0D], data[0x0C], data[0x0B], data[0x0A]) ; 00079 printf("%02X%02X%02X%02X\n", 00080 data[0x15], data[0x14], data[0x13], data[0x12]) ; 00081 printf("\n") ; 00082 #endif 00083 } 00084 } 00085 00086 void init_hardware(void) 00087 { 00088 #if defined (TARGET_MAX32600MBED) 00089 tty = new vt100(57600) ; 00090 DigitalIn tmpIn(P2_5, PullUp) ; 00091 DigitalOut tmpOut(P1_2) ; 00092 ds1683 = new DS1683( 00093 PIN_SDA, /* I2C SDA */ 00094 PIN_SCL, /* I2C SCL */ 00095 P1_2, /* event GPIO output */ /* MAX32600 only */ 00096 P2_5, /* alarm interrupt */ 00097 MSU_DS1683_ADDRESS ) ; /* 0x6B as 7bit address */ 00098 #else 00099 tty = new vt100() ; 00100 DigitalIn tmpIn(PIN_INT0, PullUp) ; 00101 DigitalOut tmpOut(PIN_AN0) ; 00102 ds1683 = new DS1683( 00103 PIN_SDA, /* I2C SDA */ 00104 PIN_SCL, /* I2C SCL */ 00105 PIN_AN0, /* event GPIO output */ 00106 PIN_INT0, /* alarm interrupt */ 00107 MSU_DS1683_ADDRESS ) ; /* 0x6B as 7bit address */ 00108 #endif 00109 00110 ds1683->enterPW(0xFFFFFFFF) ; 00111 tty->cls() ; 00112 } 00113 00114 /* test Elapsed Time Counter */ 00115 void doETC(int sec) 00116 { 00117 int loop = 0 ; 00118 int time_out ; 00119 ds_alarm_flag = 0 ; 00120 ds1683->event = 0 ; /* set event pin inactive */ 00121 ds1683->clearETC() ; /* clear elapsed time counter */ 00122 ds1683->setETCAlarm(sec * 4) ; /* etc alarm limit sec x 250msdiv(4) */ 00123 time_out = sec + 5 ; 00124 ds1683->enableETCAlarm() ; 00125 00126 printf("ETC (Elapsed Time Count) Test for %d sec\n", sec) ; 00127 ds1683->event = 1 ; /* activate event pin */ 00128 while(ds_alarm_flag == 0) { 00129 ledD3 = 0 ; 00130 wait(0.5) ; 00131 ledD3 = 1 ; 00132 wait(0.5) ; 00133 printf("%d sec\n", loop++) ; fflush(stdout) ; 00134 00135 if (ds1683->getStatus() & 0x01) { /* ETC_AF_BIT */ 00136 printf("ETC alarm detected\n") ; 00137 ledD1 = 0 ; /* LED1 ON */ 00138 break ; 00139 } else if (loop > time_out) { 00140 printf("ETC Test Time Out\n") ; 00141 break ; 00142 } 00143 } 00144 ds1683->event = 0 ; 00145 ds_alarm_flag = 0 ; 00146 } 00147 00148 /* test Event Counter */ 00149 void doEvent(int num) 00150 { 00151 int loop = 0 ; 00152 int time_out ; 00153 ds_alarm_flag = 0 ; 00154 ds1683->disableEventAlarm() ; 00155 ds1683->clearEvent() ; 00156 ds1683->clearAlarm() ; 00157 ds1683->setEventAlarm(num) ; 00158 time_out = num + 5 ; 00159 printf("Event count test for %d events\n", num) ; 00160 ds1683->enableEventAlarm() ; 00161 ds1683->event.write(1) ; 00162 while(ds_alarm_flag == 0) { 00163 ledD4 = 0 ; /* LED ON */ 00164 ds1683->event.write(0) ; 00165 printf("%d ", loop++) ; fflush(stdout) ; 00166 wait(0.4) ; 00167 ds1683->event.write(1) ; 00168 ledD4 = 1 ; /* LED OFF */ 00169 if (ds1683->getStatus() & 0x02) { /* EVENT_AF_BIT */ 00170 printf("\nEvent count alarm detected\n") ; 00171 ledD2 = 0 ; /* LED2 ON */ 00172 break ; 00173 } else if (loop > time_out) { 00174 printf("\nEvent count test time out\n") ; 00175 break ; 00176 } 00177 wait(0.1) ; 00178 } 00179 ds1683->event = 0 ; 00180 ds_alarm_flag = 0 ; 00181 } 00182 00183 void doCommand(char *cmd) 00184 { 00185 int count = 0 ; 00186 int addr ; 00187 int data ; 00188 00189 switch(*cmd) { 00190 case 'e': case 'E': /* event */ 00191 scanf("%d", &count) ; 00192 doEvent(count) ; 00193 break ; 00194 case 't': case 'T': /* ETC */ 00195 scanf("%d", &count) ; 00196 doETC(count) ; 00197 break ; 00198 case 'm': case 'M': /* dump Memory */ 00199 dump_mem() ; 00200 break ; 00201 case 'c': case 'C': /* clear registers */ 00202 ds1683->clearRegs() ; 00203 break ; 00204 case 'w': case 'W': /* write byte */ 00205 scanf("%x %x",&addr, &data) ; 00206 ds1683->writeReg8(addr, data) ; 00207 break ; 00208 case 'p': case 'P': /* event pin */ 00209 scanf("%d", &data) ; 00210 if (data) { 00211 ds1683->event = 1 ; 00212 ledD4 = 0 ; 00213 } else { 00214 ds1683->event = 0 ; 00215 ledD4 = 1 ; 00216 } 00217 break ; 00218 default: 00219 doHelp() ; 00220 break ; 00221 } 00222 } 00223 00224 void doLEDs(void) 00225 { 00226 uint8_t status ; 00227 status = ds1683->getStatus() ; 00228 if (status & 0x01) { 00229 ledD1 = 0 ; 00230 } else { 00231 ledD1 = 1 ; 00232 } 00233 if (status & 0x02) { 00234 ledD2 = 0 ; 00235 } else { 00236 ledD2 = 1 ; 00237 } 00238 } 00239 00240 void prompt(void) 00241 { 00242 printf("> ") ; 00243 fflush(stdout) ; 00244 wait(0.01) ; 00245 doLEDs() ; 00246 } 00247 00248 int main() { 00249 char cmd[32] ; 00250 00251 init_hardware() ; 00252 00253 doHelp() ; 00254 prompt() ; 00255 while(1) { 00256 scanf("%s", cmd) ; 00257 doCommand(cmd) ; 00258 prompt() ; 00259 } 00260 }
Generated on Sat Jul 16 2022 03:28:07 by
1.7.2