新たにRTC(DS3231)モジュールを購入したので、使ってみたいと思います。
最終的には、前回Cmod A7ボード(FPGA)で設計した実時間時計RTC400Sユニットと組み合わせて、SPI接続TFT表示器(SPI-TFT)へ時計を表示するアプリケーションに仕上げる事をゴールとします。
Cmod A7ボードで開発中のオリジナル16ビットCPUコアMoscovium用に設計したRTC400Sユニットですが、バッテリバックアップが使えないので、電源を遮断したり、新しい回路を書き込んだりした後で、現在の日時をRTC400Sユニットへ再設定する必要が生じます。
電源投入の度に、「今○○時だよ」って、教えてあげないとならない「時計アプリケーション」って、意味ありますか?大昔のゼンマイ式時計みたいで、使い勝手が悪そうですよね?
「時計アプリケーション」を作るのなら、Cmod A7ボードの外部にバッテリバックアップ付きRTCモジュールの接続が望ましいです。
今回購入したのは以下図に示す、DS3231と言うチップを搭載したRTCモジュールです。
ボードの裏面には、バッテリバックアップ用のボタン電池ホルダが搭載されています。電池自体は付属していませんでした。電池の型名はCR20??というボタン電池です。ボタン電池ホルダに「25」㉕という数字が刻印されていたので、恐らくCR2025だと思われます(装着前に必ず、こちらをお読みください)。
ボード上に32kHz発振子が見当たらないのですが、データシートによると、温度補正機能付きの水晶発振器がDS3231内に内蔵されているようです。
DS3231データシートを検索する(別ウインドウが開きます)
3.3V定格ですが5V給電可能で、通信インターフェイスはI2Cです。
実は手元には、DS1302と言うチップを搭載したRTCモジュールがあり、何度か使って来ました(下図)。
ピンヘッダの右に見えている8DIPのチップがDS1302なのだけど、白いインクマークですね。日本国内のICがレーザマークに変わったのは30年も昔の話です。今となってはインクマークのICなんて、超レアですよ。そのDS1302の上方に実装された円筒状の2端子素子は32kHz発振子です。
ちなみに、こちらのボタン電池はCR2032なので、CR2025に比べると少し厚みがあって長持ちするタイプです。
DS1302モジュールは、同期3線式シリアル通信です。信号線は、シリアルクロックCLK、入出力データDAT、チップセレクトRSTの3本で、DAT信号はプロトコルで入力と出力が切り替わる双方向通信線です。所謂SPI通信方式の亜種と言って良いでしょう。
しかし複数のモジュールを接続して使う場合、この通信方式は、いたって使い難いです。
SPI通信をはじめとする同期シリアル通信には亜種が多数存在します。
シリアルデータ信号が入力信号MISOと出力信号MOSIに分離されていたり、コマンド/データを切り替えるストローブ信号D/CXが追加になっていたりなど、様々です。信号線の本数や動作仕様が異なれば、同時に接続する事は困難です。
仮に、たまたま同じ規格のモジュールがあったとしても、各モジュール毎にチップセレクト信号を割り当てる必要があることも、使い難い一因です。もし、10個のモジュールを同時に接続しようとしたら、チップセレクト信号だけで10本の汎用I/Oポートが必要なのですから。
この課題を解決すべく、I2Cで通信可能なDS3231モジュールを入手した、と言うのが経緯です。
多様な亜種が存在するSPI通信と異なり、他のI2C通信モジュールと共に1系統のI2Cバス(SCL,SDA)へ接続可能なため非常に使い勝手が良いです。チップセレクト信号なんて言う物も必要ありません。スレーブアドレスが重複しない限り、たった2本の通信線(SCL,SDA)に複数のモジュールを接続できるのはI2C通信方式の強みです。
ちなみに、どのようなアプリケーションを想定したのか判りませんが、入手したDS3231モジュールにはI2C EEPROM(マークから24C32と推測)も搭載されていました。こちらのモジュール写真(表面)で、大きめな16ピンICがDS3231、小さめの8ピンICが24C32です。
容量は32Kビット=4Kバイトと小さいので、あまり大きなデータを記録する事はできませんが、データログストレージなどとして利用可能です。
DS3231モジュール基板を眺めていて、ふと思いました、「このダイオード何?」。こちらのDS3231モジュール写真で、16ピンDS3231の上方に面実装されたダイオード(橙色)です。DS3231データシートの典型回路例(下図)には、1つもダイオードが使われておらず、不要な回路ではないのか?
※DS3231データシートから引用
基板上の配線パタンを追跡して見たところ、以下の通り接続されていました。
ダイオードの向き(アノードA → カソードK)からして、CR2025からVCCへ電源を供給するパスではありません。
逆に、VCCからCR2025へ電流を流す方向です。まさか?充電回路??だとすると、充電できないCR2025を使ってはダメです。同等形状で充電可能な電池はLIR2025と言う型名ですが、こちらは定格出力電圧が3.6V(最大3.7V)と言う事で、3.0V出力のCR2025とは互換性がありません。
データシートによると、VCC(電源電圧)とVBAT(バックアップ電源電圧)の関係は以下表の通りです。
※DS3231データシートから引用
同じくデータシートより、下限電源電圧(Power fail voltage)VPF=2.7V(MAX)でした。3.3V定格のマイコンボードを使う場合、VCC=3.3Vですので、VCC>VPFは満たしています。この場合、上表より(下から2行目)、VCC<VBAT=3.6V(LIR2025)でも実動電源電圧(Active supply)=VCCですので、この点においては特に問題ないみたいです。
仮に充電可能な電池を使うにしても、抵抗とダイオードだけ通して直結するなんて言う乱暴な回路で充電してしまって良い物なのでしょうか??普通は電流値一定、指定電圧値、等の推奨条件下で充電する物ではないのだっけ?
回路図を起こしてみると、以下図のようになりました。
こうして見ると、やはり充電を意図した回路としか思えません。ですが、何一つとして、定電流や定電圧を意図した回路が無く、回路定数によっていい加減に決まった電流を流し込み、無理やり充電しようとする回路です。こんな回路で充電して良いのなら、世の中の充電器なんて言う代物は、一切必要ないのですよ。
※LIR2025は、最近頻繁にニュース(発火事故など)でも取り上げられるリチウムイオン二次電池です。小さい電池でも油断は禁物、こんなずさんな回路で充電するのは危険です。
この様な状態で充電可能な二次電池LIR2025を使うのは危険なので、却下です。やはりCR2025を使うのが順当なのですが、その為には何らかの対策が必要だと解りました。
この回路のままだとCR2025を使う訳には行きません。CR2025を使う上では、「不必要な回路」どころか、「不都合な回路」なのですから。不都合を取り除くため、問題の配線経路を切断して使う事にしました。具体策としては以下の選択肢があります。
一般的には、パタンカットの方が楽です。が、手元の基板には保護膜が厚めに塗布されており、返って苦労するかもしれないな、と思いました。他の配線を傷つけてしまわないよう、細心の注意も必要です。パタンカットしてしまうと元に戻すのは困難となる事にも注意です。
部品の取り除きなら、外した部品を取り付け直して元の状態に戻すこともできます。しかし、素子の両端(2か所)を同時に熱してはんだを溶かさないとならないのに、手は2本しかないし、はんだごても1本しかありません……。
※皆様お手元の基板とは異なる場合があります。各自基板パタンを追跡する等して対処してください。
案ずるより産むが易し、筆者は上図の通り、チップ抵抗を取り除いてみました。思っていたよりは簡単で、はんだごてを温めた後、2分くらいの作業でした。
皆様も、電子工作の腕前と自信度に応じて選択してみてください。
なお、この改造後であれば、LIR2025をバックアップ用電池として使う事も可能です。充電回路と思われる回路は無効化(切断)したので、充電は信頼のおける専用の充電器で行ってください。
※メーカの推奨回路例にも無い様な、こんな回路、能力も無いくせに何で付け足したのだろう?中華製なので、ある程度は仕方ないと言っても、まったく余計な事をしてくれます。
今回のお買い物は以下の通りです。
Amazonの中華ショップで配送料無料でした。その分、届くまでにたっぷり2週間以上待たされましたが、上の価格ですので文句なしです。
あ、DS3231モジュールの価格には満足ですが、余計な回路を切断するため、ひと手間掛かった事は減点でしたね。まあ、そこは中華製ですから、納得できる方だけが購入してみてください。