趣味のマイコンいじり

安価なマイコンを利用して作成したアプリの紹介です。

RTC DS3231/DS1302を調べて見ました

以前、2種類のクロックモジュールを購入していたので、2.4インチのLCDとの
組み合わせて検討して見ました。ライブラリとしては、ArduinoIDEから
ダウンロードできるものを利用したのですが、メンテナンスがされていない様で
使う時に若干の修正が必要でした。また、今回使ったLCDシールドでは、UNOの
I2C用のポートの一部が利用されていて、そのまま共有するとLCDのリセットが
起きる様なので、合わせてソフトウェアのI2Cでポートを変更する事も行いました。
その時の状況は以下の様になります。

<RTC DS3231 / DS1302の概要>
   購入したリアルタイムクロックは2種類の Arduino 対応のもので、それぞれ
   DS3231とDS1302を使った次の様なものでした。
   イメージ 1

  [DS3231モジュール (ZS-042)]
   1.I2Cシリアルバス対応
   2.温度センサーをチップ内に内臓
   3.4KバイトのEEPROM (24C32) を基板上に搭載
   4.I2Cアドレス
        DS3231 : 0x68, EEPROM : 0x50~0x57 (all open 0x57)
   5.時計駆動用電池の充電回路付き
         VCC -> 抵抗:200Ω -> ダイオード -> 時計駆動用の電池
         (充電可能な電池でない時、長時間使用すると電池が膨張するので、その時は
           抵抗およびダイオードを取った方が良いとの報告がネット上に有ります。)

   [DS1302モジュール ]
    1.3線式のシリアルバスでコントロール
    2.チップ内に31バイトのRAMを内蔵
    3.時計駆動用の電池が無いと時計動作をしない
    4.クロック信号からのノイズにより誤動作するため、次の対応でクロック
          信号からのノイズ低減対策が必要(クロック端子とIC端子間に1KΩを挿入

         イメージ 2

<関連資料>
   1.データシート
          DS3231    URL : https://datasheets.maximintegrated.com/en/ds/DS3231.pdf
          DS1302    URL : http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
          EEPROM   URL :  http://e-structshop.com/structwp/wp-content/uploads/2015/01/AT24C32_64_DataSheet.pdf

    2.参考記事
         SZ-042     URL : http://blogs.yahoo.co.jp/dascomp21/68145713.html

    3.使用ライブラリ
         Adafruit_GFX       URL : https://github.com/adafruit/Adafruit-GFX-Library
         MCUFRIEND_kbv  URL : https://github.com/prenticedavid/MCUFRIEND_kbv
         Fat16                   URL : https://github.com/greiman/Fat16
                                  (MEGAを利用の場合は標準のSDライブラリが利用可能)
         SoftwareI2C         URL : https://github.com/felias-fogg/SoftI2CMaster

    4.参照ライブラリ(SoftwereI2C用のものを編集)
         extEEPROM  URL : https://github.com/JChristensen/extEEPROM
         RTClib          URL : https://github.com/adafruit/RTClib (Installed by Arduino IDE)
        
    5.ビットマップファイル作成ツール (カレンダーデータ作成用)
         画像データの補正と変換 : Windows OS の ペイント
         画像データのサイズ変更    Caesium Image Compressor
                         URL   https://saerasoft.com/caesium/  

<事前対策>
    今回利用したライブラリと、DS1302のモジュールの動作を確認する過程で、
    次の問題点が有る事が判明しました。

   1.DS3231のモジュールは温度センサーを内蔵しているが、上記の「RTClib」
        では取得した温度の値が正しく表示されない
   2.DS1302のモジュールはオリジナルの「RTClib」ではチップセレクト端子が
         アクティブにならない為データのアクセスができない
   3.チップセレクトが正しくでる他のライブラリで動作を確認しても、時刻の値が
         正常値と異常値が交互に出る様な不安定な動作をする

   その為、下記の「RTClib」の修正と、DS1302のモジュールのハード対策を
     行いました。
 
   [RTCLibの修正]
    1.DS3231の温度の値の修正
          イメージ 3
 
   2.DS1302のクロックホルト処理の修正
          イメージ 4

    3.DS1302のチップセレクト端子動作の修正   
          イメージ 5

     修正したライブラリはこちらからダウンロード可能です。

   [DS1302モジュール基板の改造]
    いろんな方向から検討した結果、3線式ののクロック信号に抵抗を入れる方法が
    誤動作に有効で有る事が判明し、モジュール基板上でその対策が可能で有あった
    ので上記の対策を行いました。(上記内容)

   [UNOの改造]
    Arduino UNOの場合、LCDシールドを取り付けるとUNOの基板のピンソケットが
    利用できなくなるので配線用のピンソケットを付ける必要が有ります。

    イメージ 6


<テスト内容と結果>
    今回は、2.4インチのアプリケーションで、他のモジュールを組み合わせて
    動作させる可能性も検討する事とし、次の様な項目を目標としました。

    1.2つのRTCのモジュールの動作方法の確認 
    2.2.4インチのLCDがハードのI2Cのポートの一部を利用していて、この
          ポートを他のモジュールと共有するとLCDのリセットが起きるので、別の
          ポートでのソストウェアによるI2Cの利用を確認
    3.2.4インチのLCDとのポートを別モジュールと共有する可能性を検討
    
    2つのリアルタイムモジュールを、それぞれソストのI2Cポートと3線式の
     シリアルデータ転送ポートで動作させた結果としては、次の様なものでした。

    1.2つのRTCのモジュールの動作の確認を通して、参考にしたライブラリと
          モジュールの問題点を確認し、その対策方法を検討(事前対策項目の内容)
    2.ソフトI2Cでのポート共用
         ハード的な共用としては特に問題なく共用できる事を確認、ただし、コードの
         書き方によりリンク時にエラーが発生し、今回はなんとか書き方の工夫で
         対応可能だったが、次回は要検討
    3.3線式シリアル転送でのポート共有
         ハードおよびソフトの両面で問題なく共用できる事を確認

  [機器の接続]
   イメージ 7

    
     イメージ 8

  [操作方法]
    1.2GBのSD(FAT16)を用意して、それのルートにカレンダー用のビット
          マップファイルを置く
    2.時刻の設定はUSBのシリアル通信ポートによって行う
        (ArduinoIDEのシリアルモニターかターミナルソフトを利用)
    3.カレンダーの表示はタッチスクリーンで先月、次月、今月の表示の切り
          替えが可能    

 [コードとビットマップファイルサンプル]
  コードとビットマップファイル関連の資料一式は次のURLからダウンロード
    可能です。

      関連資料一式     
 
 [動作状況]
  MCUFRIENDの2.4インチのLCDにSDからのカレンダー画像を表示し、
    その下側にDS3231からの時計情報と温度情報を表示させたものの動作状況は
    次のURLから確認できます。