RTC4543SA + PIC 24FJ64GA002使用のデジタル・クロック
投稿日 2026年07月06日

PIC 24FJ64GA002(28ピンDIP)とRTC4543SA
背景は秋月電子のRTC4543SAに付属する資料
RTC4543SAはどんなRTC?
RTC4543SAは秋月電子でも販売されている比較的廉価なRTC(リアルタイムクロック 現時点で300円)です。内部に32.768KHzの発振部を持っており、電源を加えるだけで1Hzまたは32.768KHzのパルスが得られますので、精度の高いクロック源としても使えます。マイコンとのインターフェースはシリアル方式が採用されており、CE(チップイネーブル)、WR、CLK、DATA、の4本のGPIOで制御できます。年月日、曜日、時分秒の設定や読み出しはクロック(CLK)を与えながらシリアルに行います。
一般的にインターフェースにI2CやSPIが採用されているRTCの場合は、レジスタを指定してデーターを書き込む、または読み出す形になっていますが、このRTC4543SAの場合は簡易なシリアル方式になっています。というのは、秒、分、時、曜日、日、月、年をLSBから計52個のクロックで連続的にアクセスする方法を採用しています。各項目のビット数が8ビットで、曜日だけ4ビットですので、8 x 6 + 4で52個のクロックが必要となります。ただし、読み出しの場合、たとえば秒、分、時、曜日までの読み出しでよければ、8 x 3 + 4で28個のクロックで読み込めます。各項目はBCDで上位4ビットが10の位、下位4ビットが1の位となり、曜日だけは1から7までの数値を好みで曜日と対応付けます。
その他、うるう年をサポートしていますが、24/12切替が無く24時間式固定、30秒リセットも無しという割り切った仕様です。動作電圧範囲は2.5Vから5.5Vです。
書き込み/読み込みのタイミング
初期設定や時刻調整/変更などで書き込みを行う場合は、52個のクロックで秒、分、時、曜日、日、月、年を秒のLSBからの順番でシリアルにデータを書き込みます。WRをHIGHにしておき、CEをHIGHにして、それぞれ8ビット(8個のクロック)での書き込みを3回、4ビット(4個のクロック)で曜日を1回、さらに続けて8ビットで3回行えばよいことになります。DATAピンに設定した出力ポートに1ビット、1クロックで書き込んでゆきます。クロックの立ち上がりでラッチされます。1個目のクロックは秒の1の位のLSB、つまりbit0で、52個目のクロックは年の10の位のMSB、つまりbit7です。なお、書き込みは52回のクロックですべてを書き込まなければなりません。また、書き込みは一旦ホールドしてからというようなことも必要ありません。
読み出しも同様で、秒、分、時、曜日、日、月、年の順番でシリアルにデータを読み込みます。今度はWRをLOWにしておき、CEをHIGHにして、それぞれ8ビット(8個のクロック)での読み込みを3回、4ビット(4個のクロック)で曜日を1回、さらに続けて8ビットで3回行えばよいことになります。ただし、前述のように52クロックすべてを出す必要はなく、曜日まででよければ28個のクロックの後にCEをLOWにすると、そこで終了することができます。クロックの立ち上がりで内部のデータがDATAに乗るので、DATAラインを入力にしておいて、状態を読み込みます。これをシフトしながら繰り返し、用意した変数に取り込みます。
という具合で、一風変わったやり方ですが、シンプルで必要十分な方式とも言え、簡単にプログラミングできます。

RTC4543SAの書き込み(WR=HIGH)時の制御信号
上からch1:CE、ch2:WR、ch3:CLK、ch4:DATA
DATAは秒のLSBから8bitと分の4bitが表示されている
0/1が交互に出るように秒と分に0xAAを与えている
CLKの立ち上がりの時、DATAがLOWなら0、HIGHなら1

簡易ロジックアナライザのPulsViewでRTCからの読み取り周期を見る
PICのタイマー1(TMR1)で200ms間隔(カーソル間)で読み取っている

PulsViewでRTC4543SAの制御信号を見る(上の信号の拡大)
上からCE(立ち上がりエッジでトリガー)、WR、CLK、DATA
合計52個のクロックで秒、分、時、曜日、日、月、年のLSBから順に読んでいる
PIC 24FJ64GA002と20x4 4ビットLCDを使用
マイコンはPICの24FJ64GA002を選びました。汎用的なPIC24です。これにした大した理由はありません。電源電圧は3Vです。このPICはRAポートが4本、RBポートが16本の計20本あります。必要な本数はRTC4543SAに4本(CE、WR、CLK、DATA)。表示のためのLCDには20 x 4 4ビットパラレルですので制御線を含めて6本(RS、E、DB4、DB5、DB6、DB7)が必要です。ほかに設定ボタン4個(ADJ、SET、UP、DOWN)、アラーム出力に2本(ALARM1、ALARM2)、カウントダウンタイマの出力に1本の計17本です。このほか、書き込み器をつなぐための制御線2本(PGED、PGEC)に重なっているGPIO(RB0、RB1)は使えません。(デバッグ時にも必要) ということで、残り1本とぎりぎりです。
24FJ64GA002は、プログラム・メモリが64KW、データ用SRAMが8Kbあるので十分です。当局所有の書き込み器はpickit3なので、開発環境のMPLAB X IDEは、pickit3をサポートしている最終バージョンのV6.20を使用しました。言語はC言語、コンパイラはXC16を使用しました。

ブレッドボードに組んだRTC4543SA使用デジタル・クロック
カウントダウンタイマ 4個、アラーム2個を装備
左にRTC4543SA、中央にPIC 24FJ64GA002、右端はADJ、SET、UP、DOWNボタン
左のLEDは1秒毎に点滅(RTC4543SAのFOUT)
FRISKは簡易ロジックアナライザ
デジタルクロック、アラーム2個、カウントダウン・タイマを装備
表示器として20x4のLCD(3.3V)を使用しました。このLCDの1行目に年月日、曜日、時刻を表示。2行目にカウントダウン・タイマ、3行目にアラーム1、4行目にアラーム2を表示しました。
クロック画面

クロック画面 現在 2026年7月3日 金曜日(FR)、10時8分0秒
カウントダウンタイマはT1、有効(E)、のこり1時間59分59秒
カウントダウン中(CD)、終了時出力ポートをLOWからHIGHへ 不発効(- 発効時は*)
アラーム1(A1)、有効(E)、毎曜日(AL)、10時0分0秒に発効
発効時出力ポートをLOWからHIGH(H)へ 発効中(*)
アラーム2(A2)、非有効(D)、日曜(SU)のみ、6時30分0秒に発効
発効時出力ポートをHIGHからLOW(L)へ 不発行(-)
このデジタルクロックは、一般的なデジタルクロックのほかに、カウントダウンタイマー4個、アラーム2個を備えています。クロックは年2桁、月、日、曜日、時、分、秒を表示します。設定を変更するための4個のボタン(AJD、SET、UP、DOWN)を備えています。
年月日、曜日、時刻の表示は秒単位でリアルタイムに表示します。クロックを表示している状態で、ADJボタンを押すと、順に各項目へカーソルが移動し、その項目が点滅します。その状態でUP/DOWNを押すとその項目の値を変更することができます。SETボタンを押すと、変更された値がクロックに反映されます。秒は0で始まります。
クロックを表示している状態でSETボタンを押すと、選択されている(クロック画面に表示されている)カウントダウンタイマ(Tn)がイネーブル(E)であれば始動(CD)します。再度SETを押すとその時点でポーズ(PU)し、さらにSETを押すと続きをカウントダウンします。カウントダウンタイマは設定値(最長99時間59分59秒)をカウントダウンして終了すれば(0になれば)、GPIOポートをHIGH(H)またはLOW(L)にします。これによりリレー等の駆動ができます。カウントダウンタイマは4個あり、カウントダウンタイマ設定画面で有効(E)/無効(D)、設定値、終了時のGPIOをHIGH(H)にするかLOW(L)にするかを指定できます。有効(E)にしたカウントダウンタイマはクロック画面に(T1, T2, T3, T4のいずれかが)表示されます。カウントダウン終了時は(*)を表示し、カウントダウン値を元に戻します。
アラーム設定画面
アラームはアラーム1とアラーム2の2個を装備しています

アラーム設定画面
現在アラーム1(A1)は有効(E)で発効時刻は10時0分0秒 毎曜日(ALL)、出力ポートはHIGH(H)、発効中(*)
終了時刻は11時0分0秒
アラーム2(A2)は、無効(D)で発効時刻は18時30分00秒 月曜(MON)のみ、出力ポートはHIGH(L)、不発効中(-)
終了時刻は19時30分30秒
それぞれに有効(E)/無効(D)、アラーム発効時刻/終了時刻を設定でき、発効中のGPIO出力がHIGH(H)で終了時LOWか、発効中のGPIO出力がLOW(L)で終了時HIGHかを選べます。アラーム発効時、出力のGPIOピンのレベル(HIGH/LOW)が切り替わります。アラーム1と2の有効/無効、発効時刻、曜日、出力ポート、発行中(*)/不発効中(-)がクロック画面に表示されます。
カウントダウンタイマ設定画面
カウントダウンタイマは4個(CT1, CT2, CT3, CT4)備えています。

カウントダウンタイマ設定画面
CT1が有効(E)で、設定時間は2時間30分0秒、カウントダウン中(CD)で
終了時(*)出力ポートをLOWからHIGH(H)にします。
有効にできるのは1つで、CT2,3,4は非有効(D)です。
それぞれ99時間59分59秒まで設定でき、SETボタンでいつでも開始(CD)/ポーズ(PU)ができます。0時間0分0秒になった時点でカウントダウン・タイマの出力が切り替わり、終了(*)します。終了時にはカウント前の設定に自動的に戻ります。有効(E)なタイマーはクロック画面に表示されます。
ボタンの推移
ボタンはADJ、SET、UP、DOWNがあります。画面はクロック画面、アラーム設定画面、カウントダウンタイマ設定画面があります。各画面の状態は表示状態と、項目設定状態があります。
各ボタンの役割:
ADJ: その画面を項目設定状態にする 次の項目に移る
SET: クロック画面でカウントダウンタイマを起動/ポーズする。項目値変更を確定し表示状態にする
UP: 表示状態の場合、次の画面に切り替える。項目変更状態の場合、値を+1する
DOWN: 表示状態の場合、前の画面に切り替える。項目変更状態の場合、値を-1する
各画面の表示状態でUPまたはDOWNボタンを押すと画面が切り替わりその画面の表示状態になります。
クロック画面の表示状態で、SETボタンを押すとクロック画面に表示されている有効(E)なカウントダウンタイマがカウントダウン(CD)を始めます。カウントダウン中に再度SETボタンを押すとポーズ状態(PU)となります。無効(D)の場合は無視します。
各画面の表示状態でADJボタンを押すとその画面の項目設定状態になり、最初の項目にカーソルが移り点滅します。このときUPまたはDOWNボタンを押すとその項目の値を+1または-1できます。SETボタンで変更を確定し表示状態に戻ります。
用途
このような多機能タイマーの用途はいろいろ考えられます。一般的なデジタル・クロックのほか、アラームやカウントダウンタイマーの出力ポートにリレーなどでAC100VをON/OFFできるようにしておけば、用途が広がります。
たとえば、カウントダウンタイマーの出力に半田ごてをつなぎ、02.00.00を設定しておけば、2時間後にOFFにでき、切り忘れを防止できます。カウントダウンタイマはSETボタンでいつでも開始できます。
アラームを使えば、たとえば熱帯魚などのエアレーションをある時刻から時刻まで行うとか、寝室の香取を一定時間ONにするなど、使い方は様々です。
(JF1VRR)

