でかデジタル時計の製作(3)プロト完成!
今日、とりあえず、GPSモジュールから時刻を設定するプログラムも追加して、動作確認も終了。GPSモジュールの時刻は、mbed側のRTCから30秒以上ズレている条件で、時刻設定するようにしている。あと、GPSモジュールは、1m程度のリボンケーブルで接続して、電波を受け易い場所へ置けるようにした。
今回の回路図は、、、、
// Digital Clock (4 digits) driven by CMOS LOGIC 4026s // made by Hirofumi Inomata, (C) 2011 #include "mbed.h" #include "string.h" #include "PowerControl/PowerControl.h" #include "EthernetPowerControl.h" #include "ClockControl.h" DigitalOut myled(LED1); DigitalOut D1_CLK_EN(p17); DigitalOut D2_CLK_EN(p18); DigitalOut D3_CLK_EN(p19); DigitalOut D4_CLK_EN(p20); DigitalOut D1_N_RST(p24); DigitalOut D2_N_RST(p23); DigitalOut D3_N_RST(p22); DigitalOut D4_N_RST(p21); DigitalOut DD_N_CLK(p25); Serial gps( p28, p27); // Ticker myTicker; char buf[4096]; int cnt = 0; #define USR_POWERDOWN (0x104) int semihost_powerdown() { uint32_t arg; return __semihost(USR_POWERDOWN, &arg); } void handler_ticker(void); void handler_serial(void) { char cc; int i; for (;;) { cc = gps.getc(); if (cc == '$') break; } for ( i=0; i%d/%d/%d %d:%d:%d ¥n¥r", gpsTm.tm_year, gpsTm.tm_mon, gpsTm.tm_mday, gpsTm.tm_hour, gpsTm.tm_min, gpsTm.tm_sec ); curSeconds = time(NULL); if ( ((gpsSeconds - curSeconds) > 30) && ((curSeconds - gpsSeconds) > 30) ) { printf( "set RTC %d to %d ¥n¥r", curSeconds, gpsSeconds ); set_time( gpsSeconds ); } } handler_ticker(); } } int preD1 = 0; int preD2 = 0; int preD3 = 0; int preD4 = 0; void D1(int digi ) { int i; if (digi == preD1 ) return; preD1 = digi; D1_N_RST = 0; wait(0.01); D1_N_RST = 1; D1_CLK_EN = 1; for (i=0; i tm_hour, tmCur->tm_min, tmCur->tm_sec, seconds ); dispTime( tmCur->tm_hour, tmCur->tm_min ); myled = 0; } int main() { struct tm initTm; time_t initSec; semihost_powerdown(); PHY_PowerDown(); gps.baud(9600); D1_CLK_EN = 0; D2_CLK_EN = 0; D3_CLK_EN = 0; D4_CLK_EN = 0; D1_N_RST = 0; D2_N_RST = 0; D3_N_RST = 0; D4_N_RST = 0; wait( 0.1); D1_N_RST = 1; D2_N_RST = 1; D3_N_RST = 1; D4_N_RST = 1; DD_N_CLK = 1; myled = 0; gps.attach(handler_serial); while(1) { Sleep(); } }
こんな感じ。7セグLEDの表示更新を、当初は、tickerでやろうとしたが、GPSとのシリアル通信の割り込みで沈む混むことが判明し、GPSの通信の割り込みハンドラ内でやることにした。
トラックバック(0)
このブログ記事を参照しているブログ一覧: でかデジタル時計の製作(3)プロト完成!
このブログ記事に対するトラックバックURL: http://the.nerd.jp/blogs/cgi-bin/mt-tb.cgi/4700