Menu

My Works
- TTL Pong
- Simple AVR DDS
- DSP プリセットラジオ
- 電動式 CVCC 電源装置
- OLED MP3 プレーヤ
- 電子メトロノーム
- 簡易 SD ロガー
- etc.

Report
- MIDI のハードウェア
- aitendo DSPラジオ一覧表
- etc.

Parts Collection
- Logic ICs
- Calculator LSIs
- etc.

Blog

Recent Updates

17/08/03
- Logic IC Collection

17/06/17
- Logic IC Collection

17/04/05
- Logic IC Collection
- MSM100
- MSL1200

17/03/23
- Logic IC Collection
- 英国郵便局規格TTL

16/09/23
- Logic IC Collection
- 沖電気 MSM500 シリーズ

16/08/21
- Logic IC Collection

16/08/03
- Calculator LSIs

16/04/03
- Logic IC Collection
- Calculator LSIs

16/03/16
- Logic IC Collection
- USSR IC Logo

16/03/13
- MAX232のチャージポンプ

16/01/22
- Simple AVR DDS

16/01/19
- 中国規格ロジック IC


16セグメント LED時計の製作

初版公開:2012/09/22



6桁時刻表示

温度表示      

4桁時刻表示

大型の 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_ |
0x_0 | [SP] | 0    | @    | P    | `
0x_1 | !    | 1    | A    | Q    |
0x_2 | "    | 2    | B    | R    |
0x_3 | #    | 3    | C    | S    |
0x_4 | $    | 4    | D    | T    |
0x_5 | %    | 5    | E    | U    |
0x_6 |    | 6    | F    | V    |
0x_7 | '    | 7    | G    | W    |
0x_8 | (    | 8    | H    | X    |
0x_9 | )    | 9    | I    | Y    |
0x_A | *    | :    | J    | Z    |
0x_B | +    | ;    | K    | [    |
0x_C | ,    | <    | L    | \   |

0x_D | -    | =    | M    | ]    |
0x_E |    | >    | N    | ^    |
0x_F | /    | ?    | O    | _    |