JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Arduino RTC(DS1307)のテストその2

2021-06-04 16:46:47 | Arduino
 前回の記事でテストできなかった内容を今回テストします。

 まず、Timekeeper Registerのアドレス00hのbit7を1にするとRTCはstopします。電源ONで立ち上がった時は、1になっていて、secondのデータが書き込まれた時に、bit7が0になり、RTCがスタートします。
 bit7を操作することにより、強制的にRTCをスタート/ストップできます。

 次に、12時間制と24時間制の切り替えです。
 これは、アドレス02h(Hourに関するレジスタ)のbit6で切り替えます。
 bit6=0で24時間制(0~23)、bit6=1で12時間制(1~12)になり、12時間制では、bit5=0でAM,bit5=1でPMを表します。

 12時間制で動かしてみました。PM11:59:30からスタートさせ、AM0:0:0に切り替わるのが分かります。ただ、bit6=1だけの設定ですと、AM12:0:0になってしまい、どうもいけません。12の時は強制的に0にするようにプログラミングしました。

 時間表示に関する部分のプログラムです。
--------------------------------------------------------------------------
if((REG_table[2] & 0x20) == 0 ){
Serial.print("AM");
}else{
Serial.print("PM");
}
if((REG_table[2] & 0x1F) == 0x12){
Serial.print("0");
}else{
Serial.print((REG_table[2] & 0x1F),HEX);
}
--------------------------------------------------------------------------

 SQW/OUT(方形波出力)についてテストしました。アドレス07hのbit7(OUT),bit4(SQWE),bit<1:0>(RS1,RS0)の設定で次の表のように設定されます。
 例えば、SQWE=1,RS1=1,RS0=1と設定すると32.768KHzの方形波がSQW/OUTに出力されます。デューティ比は、50%です。
 SQWE=0の場合は、OUT=1とすれば、SQW/OUTは、1(High)の固定されます。
 

 SQWE=1,RS1=1,RS0=1の場合の出力波形と周波数です。

1Hz程度の誤差で正確です。

SQWE=1,RS1=1,RS0=0の場合の出力波形と周波数です。


SQWE=1,RS1=0,RS0=1の場合の出力波形と周波数です。


SQWE=1,RS1=0,RS0=0の場合の出力波形です。

いずれも正確な方形波が出力されました。
そこで、この1secの方形波でLEDを点滅させてみます。
SQW/OUTの出力は、オープンドレインになっていますので、プルアップ抵抗を接続し、デジタルトランジスタでLEDをドライブしています。


ブレッドボードです。


 500msごとに点灯と消灯を繰り返します。(1secごとに点滅)
 SQW/OUT信号は、割込みや秒を表す点滅などにつかえそうです。

 他に、DS1307には、56byteのメモリー(アドレス08h~3Fh)がありますので、これも利用できます。