MSS / Mbed 2 deprecated testDS1683

Dependencies:   DS1683 mbed vt100

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers testDS1683.cpp Source File

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 }