リアルタイムクロックモジュール(DS1307チップ)の時間取得

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

カテゴリーから探す


関西ドローン安全協議会修了済み

モバイルショップ

広告