アラームクロックの製作 dsPIC30F3012 2013.2.24


    1.はじめに

     月並みであるが、マイコンを使った電子工作の定番、「アラームクロック」を製作した。 いつも使用していた目覚まし時計が故障したので買い替える代わりに製作してみた。

     出来上がったのは、液晶表示のアラーム機能付きのカレンダー時計。電源は、単三乾電池2本の3Vで動作し、 ボタン操作により、日付や時刻の設定、アラーム時刻の設定、アラーム機能のオンオフが出来る。極めてシンプルなものだ。


    2.設計と製作

     マイコンは、手持ちの dsPIC30F3012 を使用した。 このマイコンは、DIPタイプで18ピンと小さいが、プログラムメモリは、24KBもあり、SRAMも2KBある。 目覚まし時計に使うには勿体ないが遊ばせておくよりはましだ。

     マイコンで時計の時刻カウントを行わせると常に電力を消費するので電池が長持ちしない。 電池を電源とする場合には、別途消費電力の小さいリアルタイムクロックモジュールを使うのが時計工作の定番。 秋月電子から手軽に入手出来るセイコーエプソンのリアルタイムクロックモジュール「RTC-8564」を採用した。

     時刻表示装置としては、IP電話機の製作でも使用した低電圧動作のI2C液晶モジュールを使った。 この他に、操作ボタンとしてタクトスイッチを3個、電池ケース、抵抗、ダイオード等、 全て手持ちの買い置き部品から選択した。

     クロックモジュールや低電圧I2C液晶モジュールは消費電力も小さく、電池を電源とする機器を製作するには適当である。 消費電力の大きなPICは、平常時は、スリープ状態にしておき、ボタン操作やアラーム音を鳴らす時だけ 動作させることにすれば、電池の消耗を少なく出来る。

     製作したアラームクロックの回路を図1に示す。

    回路説明

     マイコンは、通常はスリープ状態にしておき、時刻の設定やアラーム機能のオンオフ等の操作、液晶表示の時刻表示を 更新する時だけ動作させる。表示の更新は1分毎に行うものとした。

     スリープ状態にあるマイコンを起床させるのに、INT0INT1の2つの外部割り込みを使用した。 INT0には、3つある操作ボタンの内いずれかのボタンを押した時にローレベル割り込みが入るようにした。 INT1には、リアルタイムクロックモジュールの割り込み出力端子を接続し、毎分毎にローレベル割り込みが 入るようにプログラムした。 クロックモジュールからの割り込みは、アラーム時刻になった時の割り込みも兼ねている。

     クロックモジュールも液晶モジュールもマイコンとの接続は、I2Cである。うまいことに 両モジュールのデバイスアドレスは、0xa2と0x7cと 異なっており、1本のバスに2つを同時に接続できた。I2Cバスのプルアップは、 クロックモジュール内部に設けられたプルアップ回路を使った。

     アラーム出力は、OC2の出力コンペアモジュールを使用した。PWMモードにより5KHzの方形波パルスを出力し、トランジスタで 受けて圧電スピーカーを鳴らすようにした。


    4.使い方

    操作ボタン
      操作ボタンは、SET,UP,DOWNの3つがあり、いずれのボタンも押してから離した時に認識される。
      押し続けることによるリピート入力機能はない。
      SET+UPは、SETボタンとUPボタンを同時に押すことを意味するが、SET(あるいはUP)を押してから、 そのボタンを離すまでに、UP(あるいはSET)を押せばよい。

    日付・時刻の設定
      SETで日付・時刻の設定を開始する。
      年、月、日、曜、時、分、秒 の順に設定が進む。
      年から開始し、SETで次の項目へ進み、秒の設定の時に、SETで設定を終了する。
      UP,DOWNで各項目の値を+1,-1出来る。

    アラーム時刻(時分)の設定
      SET+UPでアラーム時刻の設定を開始する
      時の設定から開始し、SETで分設定に進み、分の設定の時に、SETで終了する。
      UP,DOWNで各項目の値を+1,-1出来る。

    アラーム動作のオンオフ
      UP でアラームオン
      DOWN でアラームオフ

    鳴動テスト
      SET+UP+DOWNで圧電スピーカーからアラーム音が出力される。いずれかのボタンを押すとアラーム音が停止する。


    5.プログラム

     アラームクロックのプログラムは、MPLABの上で、C30コンパイラーによるC言語で作成した。

     プロジェクトに含まれるソースファイルは次のとおり。

      ソースファイル
      main.cアラームクロックの処理(時刻設定、表示更新、アラーム鳴動など)
      key.c操作ボタンの入力処理
      lcd.c液晶表示装置の制御
      rtc8564.cRTC8564の制御
      pic_delay.c遅延処理
      pic_print.cprintf, sprintfの自作関数
      pic_232.cUARTの処理