My Works
- LEDチェッカ
- 太陽電池式回路テスタ
- TTL Pong
- DSP プリセットラジオ
- 電動式 CVCC 電源装置
- OLED MP3 プレーヤ
- etc.
Report
- MIDI のハードウェア
- aitendo DSPラジオ一覧表
- etc.
Parts Collection
- Logic IC
- Calculator LSI
- CMOS Melody IC
- etc.
主な更新のみ
24/09/11
- MCU-based Melody ICs
24/08/12
- MCU-based Melody ICs
24/03/10
- Logic IC Collection
初版公開:2012/09/22
大型の 16 セグメントLEDを使った時計です。コントローラは PIC マイコンを使用しています。製作にいたるまでのいきさつはこちらのレポートをご覧ください。
RTC 専用 IC ではなく、マイコン内蔵の RTC モジュールを使用しています。ボタン電池によるバックアップ機能により、停電しても時刻を刻み続けます。バックアップ時消費電流は 1uA 以下に抑えています。
上図にブロックダイアグラムを示します。青ブロックは電源、赤ブロックはMCU です。
左図は実際に実装した基板です。写真を見てわかるように、制御基板と LED モジュール基板とは 3mm のねじで固定した上で裏面から配線しています。
PIC マイコンで 16セグLED6個をダイナミック駆動しています。LED には aitendo で入手した KA2311-42B-UR91 を使用しています。実際は配線を簡単にするために、ダイナミック駆動のために配線されたモジュール基板を使用しています。この LED は内部で2素子が直列に配線された形になっているので、Vf は 約 4V になっています。したがって、マイコン用 3V 電源からは LED を直接駆動できないので、 別に LED用 5V 電源を用意する必要があります。この製作では 9V〜12V 程度の ACアダプタを使い、レギュレータ 78M05 により別に LED用電源を生成しています。
マイコンには手持ちの都合で PIC18F45K20 の DIP版を使用しました。このマイコンは 5V 動作ができないので、TL431 によって マイコン用電源 (約3V) を作り出しています。この電圧設定は重要で、バックアップ動作でないときにバックアップ用ボタン電池から電流が流れないようにしなければいけません。マイコンの電源端子で最低 3V を出せるように、TL431 のバッファトランジスタ(2SD468) 出力を約 3.7V (> 3V + 0.65V = ダイオード順電圧) に設定します。
LED の駆動には トランジスタ2段によるドライバ回路を介しています。ドライバ段トランジスタには IC > 300mA 程度の PNP トランジスタが使えます。PIC18F4520 や PIC16F877 を使えばもっとシンプルなハードウェア構成になります。
32.768 kHz 水晶発振子によって、PIC マイコンのタイマ 1 を駆動することで、RTC(リアルタイムクロック) を構成しています。ボタン電池 CR2032 のバッテリーバックアップによって、AC アダプタからの電源が切れても計時を継続することができます。
ソフトウェアで電源切断を検出してスリープモードに移ります。この判定にはピン割り込みを使えば良いのですが、使えるピンは LED ドライブに使用してしまいました。仕方がないのでタイマ 割り込み内で判定を行いますが、このときタイムラグが生じます。この間、CPU 電源を正常な範囲内に保たなければいけません。このために CPU 電源に並列に容量の大きめのコンデンサを挿入します。このコンデンサの容量計算については以下の通りです。まず電源切断からスリープモード判定までの間のソフトウェアによるタイムラグが最悪で 1 ms と仮定します。CPU の電流が最悪で 40mA 、許容電圧降下を 0.8V とすると、コンデンサ容量 C > ΔV x I x ΔT= 0.8 x 0.04 x 0.001 = 32 uF が必要条件となります。できればリーク電流の少ないコンデンサを使用します。
PIC18 シリーズには XC8 コンパイラが使えるので、C 言語で記述しました。スイッチ処理と LED ドライブには タイマ0 を、RTC 処理には タイマ1 のオーバーフロー割り込みを使用します。主電源の電圧を監視してスリープモードに入ります。
温度は 0.1 ℃ の分解能で表示しますが、センサの精度がそれなりなので、温度精度はあまり期待できません(約 +-3 ℃程度)。このマイコンは ADC の基準電圧に 内部基準電圧源を使用できないので、温度センサ出力の ADC の値と内部基準電圧の ADC の値との演算によって電圧を計測しています。0.1 ℃ (センサ出力換算 10mV) の分解能は ADC の分解能を超えているので、充分長い時間の移動平均をとることによって擬似的に ADC の分解能を拡張しています。
16セグメントLED なので、数字のほかにアルファベットも表示できます。とりあえず大文字についてフォントを内蔵しています。任意の長さの文字列についてスクロールして表示する関数も用意しています。簡単なソースコードの変更で、シリアル通信でメッセージを表示する汎用表示デバイスとしても応用可能でしょう。
(1) まず、バッテリーバックアップ用の電池とマイコン以外の回路を実装します。
(2) AC
アダプタを付けて、マイコン用電源電圧(2SD468 のエミッタ部分で 約 3.7 V)が正常なこと確認します
(3)
マイコンを実装します。プログラム書き込み後、動作を確認します。
(4)
回路が正常に動作することを確認した後、バックアップ用ボタン電池を実装して、バックアップ時の電流を測定します。AC アダプタを外し1分以上経過した後、電池に直列な
1kΩ 抵抗の両端電圧を測定して、1mV 以内なら OK です。
(5)最後に ICSP ピンの 1-2
間をショートさせて、不意のリセットがかからないようにすると良いでしょう。
時計としての精度は使用する水晶発振子によります。計時動作をより高精度にしたい場合、水晶発振子のコンデンサのどちらかを
30pF 程度のトリマに変えて(理想的には、使用する環境の年間平均の温度下において)発振周波数を調節します。
回路図に示すように、A、B、C の3つのスイッチがあります。ファームウェアでの各スイッチの動作は下表の通りです。
(下)状態 (右)スイッチ | A |
A長押し |
B | C |
通常状態 (時刻・温度表示) |
表示変更 | 時間設定 | 日付表示 (スクロール) |
明るさ変更 |
時間設定 | 次の設定項目へ | - | 値を増やす | 値を減らす |
表示状態は6桁時刻表示・温度表示・4桁時刻表示の 3種類を実装しています。A ボタンによって表示状態を変更します。
以下はおまけです
aitendo 16seg x 6 モジュール基板の各コネクタのピン配置表
CON1 | CON2 | |
14 | LED2-A | NC |
13 | LED1-A | NC |
12 | LED5,6-K | LED3-A |
11 | LED-A | LED4-A |
10 | LED9,10-K | LED7-A |
9 | DP | LED8-A |
8 | C | G2 |
7 | K | B |
6 | D1 | A2 |
5 | L | J |
4 | M | I |
3 | D2 | A1 |
2 | E | H |
1 | G1 | F |
数字フォント
文字テーブル (黒字:実装済み 青字:可読性低い)
_____| 0x2_ | 0x3_ | 0x4_ | 0x5_ | 0x6_
| |