ドットマトリックスを使った流れる時計製作(LEDスクロール時計)     H22.1一部修正     ホームページへ戻る

既に、スクロール時計はキット化されており今更ですが、必要に迫られた(夜中でも見える時計)のとダイナミック表示のお勉強で、
作ることにしました。



1 基本仕様
  ・表示装置 8x16ドット(8x8を2組)
  ・月差±1秒以内(目標?)
  ・アラーム 1ch
  ・温度表示
  ・電源 ACアダプター(停電補償回路付加)

2 回路構成 
  ・部品を減らすためダイナミック制御をシフトレジスタICを使わないようにI/Oピンが多くて、A/Dコンバータ付き
   の8535(家に眠っていた)を使用。
  ・ドットマトリックスは8x8(秋月電子38x38mm)を2つ使用。  AVRとの接続(制御) 行:B・Cポート、列:Dポート
  ・温度センサーS8100B(秋月電子 -40〜100℃ -8mV/℃)
  ・電源はDC9VのACアダプタ出力を三端子レギュレータで5V
      9V側にバックアップ用のニッケル水素電池7.2V(006P型)を接続
  
  
回路図

3 ソフト
  ◇処理フロー
    メインルーチン  時刻・アラームの修正、アラームOn/Off
    割込み処理   時刻制御・表示・温度計測
        
  ◇時計制御とダイナミック表示
   ・正確な時計(時間)を刻み、ダイナミック制御でも周期的に表示列切替が必要なため、タイマ割込を利用する。
    割込み周期は、ダイナミック表示更新時間(1/30S以下)、処理量および時計処理の簡素化を考えて次のようにした。
    割込み時間(表示列切替時間)  1.25ms
    表示更新周期   1.25msx16=20ms (1/50S)
    文字スクロール周期 200ms (表示更新周期x10回) 試行錯誤で決定 
    時計の1S  表示更新x50回 20msx50=1S
   ・時計の微調整は、割り込み周期が800Hz(1/1.25ms)となるように、A-5ポートをチェック出力として使用し、周波数カウンタ
    で周波数を確認して、タイマカウンタ値を調整。
    精度:タイマカウンタはクリスタル周波数を直接使用しているので(125ns=1/8MHz)、調整は125n毎可能
        125nsx3600sx24hx30日=0.324s(月差) クリスタルの温度変化等の変動が無い場合
   ・表示処理
    LEDに表示させるビットデータ領域を76列分確保(76バイト)
    実際の表示エリアは16列分なので、表示開始位置をスクロール周期で左にづらし16列分表示
   ・アラーム
    時刻とアラーム設定時刻が一致している間(1分間)、200ms(文字スクロール周期を利用)のOn/Off繰り返しによる鳴動
  ◇温度
   ・1Sに1回サンプリングし表示を更新
      ・下記により1℃単位の計測とした。
     S8100Bの温度−電圧特性は、−20℃:1.908V、80℃:1.095Vの比例特性(電源5V時) 温度≒80-125℃/V x (V-1.095)

    A/Dコンバータの基準電圧を2.047Vにすると  2mV/digit
      ∴温度=80−0.25(Vdigi−548) → 温度=(875−Vdigi)/4 (℃)(875= 868+7 +7は切捨等誤差補正)
         
今回はじめて基準電圧AREFをAVCCから任意の電圧に変更したが、思うような結果得られず悩む。原因は、ADCの活かし
     (ADCSRのADENビット設定)を、使用時のみ活かしたため基準電圧が不安定となっていた。→常時設定にしたら解決。
  ◇時刻・アラーム合わせ(修正モード)
    時刻合わせ処理は、時・分値の設定・アラームのon/offを順番に行うなうので、メインルーチンで処理する。
    修正モード中も時計は正常に動くよう割り込み処理は、時刻処理およびKye入力の確認のみ行う。
  ◇Key操作
    Key入力は、割り込み処理で入力されたものを、メインルーチンで処理する。
     赤:設定モードへの移行および決定、(時刻の分決定時は、秒がは0秒に切り捨てでセット)
     青:プラス・時刻修正選択、 通常モードでメッセージ1回表示
     黄:マイナス・アラーム時刻修正選択、通常モードでアラームon/off

 
  
ソース

別バージョン
  部品が入手できないとタイの方?から問合わせを頂いたので、CPUをMEGA8535(基本的に変更無し)に温度センサをLM35に
  変更した回路・ソースを作りました。
   回路図 ソース