株式会社ジーテック

制御機器を小ロット多品種で設計製作

RTCモジュール(DS1307)の時間取得

OLYMPUS DIGITAL CAMERA

マイコンボード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.