マイコンボードZT-PIC16F194701にはあらかじめRTCが搭載している物もあり、別途時計チップを試す必要も無いかもしれませんが、DS1307はバッテリー接続用のピンもあり、時計を保持させる面に関しては優れています。 そこであえて時計無しのマイコンボードを使用し、時間をLCDに表示させます。尚、LCD表示に関しては別途記事を参照願います。
RTCとLCDを接続するためにI2Cのコネクタを二つに分け、並列に接続しています。RTCのBATコネクタをアナログ値として取得したいところですが、そのまま接続するとバッテリーの電力をマイコンが消費してしまい、時計の保持が出来ないため、何らかの回路が無いと無理と思われます。
※注意:RTCモジュール側でI2Cのプルアップ抵抗があるため、マイコンボード側のプルアップは外す必要があります。基板上の赤いマークのある2.2kチップ抵抗です。
使用機器は下記のとおり。他、パソコンや電源、PICKIT2も当然ながら必要です。
I2Cリアルタイムクロックモジュール SainSmart SKU-20-019-108*WB
マイコンボード(PIC16F1947搭載) ZEATEC co.,ltd. ZT-PIC16F194701(5V仕様)
プロジェクトファイルも含めたサンプル zt-16f194701_ds1307.zip
開発環境:MPLAB_IDE_8_92 + CCS-C PCMコンパイラVer.4.132
配線図:DS1307_wiring.zip
rtc_date_read()を実行するだけで各変数に値が取得され、使うことが出来ます。
so1602awxb_cmd(0x80);
rtc_date_read();
printf(so1602awxb_puts,"ZEATEC 20%02x/%02x/%02x%c",
year,month,day,life_char[life_index]);
//2行目表示 so1602awxb_cmd(0xa0);
if(week == 1){
printf(so1602awxb_puts,"Sunday ");
//SUN
}else if(week == 2){
printf(so1602awxb_puts,"Monday ");
//MON
}else if(week == 3){
printf(so1602awxb_puts,"Tuesday ");
//TUE
}else if(week == 4){
printf(so1602awxb_puts,"Wednesday");
//WED
}else if(week == 5){
printf(so1602awxb_puts,"Thursday ");
//THU
}else if(week == 6){
printf(so1602awxb_puts,"Friday ");
//FRI
}else if(week == 7){
printf(so1602awxb_puts,"Saturday ");
//SAT
}else{
printf(so1602awxb_puts,"Error ");
//
}
printf(so1602awxb_puts," %02x:%02x:%02x",hour,min,sec);
©ZEATEC co.,ltd.