Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC24FJ64GA002 RTCCを試す -コードを眺めて少し改造-

前回「PIC24FJ64GA002 RTCCを試す -とりあえず動かす-」で、まあ、とりあえずそれっぽく時を刻むようにはなったPIC24FJ64GA002のRTCCだが、参考にさせていただいたコードまんまなので、改良して使いやすくするためにも、とっつきやすいところから少しづつコードを眺めてみることにした。


Configuration Bits
これは、そのままMPLAB X IDE に吐かせたものに書き換えた。

それはいいんだが、元にあった BKBUG_OFF、COE_OFF がデータ・シートのどこを探しても無い。
分らないので、とりあえず無いまま無視したが、特に問題なく動いてはいる。
追記
それぞれ以下のようなC30の機能の設定らしい。
Background Debugger : MPLAB ICD2でのインサーキットデバッグをおこなう時のデバッグモードのイネーブルビット
Clip-on Emulation mode : エミュレーションモードのイネーブルビット


RtccInitClock();
C:¥Program Files (x86)¥Microchip¥xc16¥v1.24¥support¥peripheral_30F_24H_33F¥rtcc.h
で定義されている、RTCCを初期化する関数。
決まり文句だと思って書いておけばいいんだろう。


RtccWrOn();
RCFGCALレジスタのRTCWREN(RTCC Value Registers Write Enable bit)を設定する関数。
同上。


以下、全てライブラリ上の関数。
名前から目的や動作は明らか。
RtccWriteDate(&RtccDate, TRUE);
RtccWriteTime(&RtccTime, TRUE);
RtccSetCalibration(0);
RtccReadTime(&RtccTimeNew);
RtccReadDate(&RtccDateNew);
具体的にどんな風にやってんだろと思ってちょっと探してみたら、
C:¥Program Files (x86)¥Microchip¥xc8¥v1.33¥sources¥pic18¥plib¥rtcc
の中にいろいろ入っているのを見つけたが、xc16では、
C:¥Program Files (x86)¥Microchip¥xc16¥v1.24¥src¥peripheral_24F.zip
の中に圧縮されて入っていた。
どういう仕組みで呼び出しているんだかは不明。


mRtccOn();
mが付いているのはマクロ。


rtccTime, rtccDate
ともにrtcc.hで定義されているunion。
参考までにrtccTimeの定義

いつも思うことだが、こういうライブラリって便利なのかなあ、2度手間のような気がする。
ま、構造体とやらが良く分ってないのが原因かもしれないけど。


_RCDIV = 0;//PostScaler ( 0 : 32MHz 1 : 16MHz )
なんだこれ。
馴染みのある、
CLKDIVbits.RCDIV = 0b000;//FRC Postscaler Select bits 8MHz
にしておく。


オリジナルはせっかくの漢字表示だが、個人的にあまり好かないので英語表記に変更する。
前にも使ったこんな関数だが、今回はLCDへの表示用の関数はそのまま流用したので
lcd_gotopos(,);
lcd_putstr();
に書き換えて使う。

20150407203427

追記(2015/04/09)
結局、スイッチとプル・アップ抵抗を取り付けて、日時、曜日を設定できるようにした。
コードは「Real Time Clock Module ( DS1307 + AT24C32 ) + PIC18F2550 + SC1602B」で使ったコードからのコピペでほとんど間に合った。
RTCモジュールとの差は、電源を落とした際のバックアップ電源の有無のみだが、どうせ液晶は別電源なので、PIC側を3Vくらいのボタン電池で駆動することにすればほとんど同じことに出来ると思う。
あるいは5VのACアダプタで駆動することにして、PIC用の降圧回路だけを追加する方がコンパクトに出来るという気もする。
いずれにしても、ブレッドボード上にこれ以上部品を載せるスペースが無いのでまだ試していない。
20150409001518

このエントリーをはてなブックマークに追加

Posted under: PIC24FJ64GA002


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.