前回の記事でテストできなかった内容を今回テストします。
まず、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);
}
--------------------------------------------------------------------------
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)がありますので、これも利用できます。