| ホーム | 私の電子工作作品集 |
|
097. ドットマトリクス 8 x 8 LED 表示時計
8 x 8 ドットマトリクス LED 6個と PIC16F876 を使用した、ディジタル時計です。 クロックには京セラの KTXO-18S(12.8MHz)を使用して
いますので、安定した動作が望めます。
時計表示は24時間表示で12/24時間の両表示に対応し、他に年月日の表示と気温の表示の機能を持っています。 また、モード選択によって、
毎時の時報を鳴らすことも可能となっています。
実はこのディジタル時計、2007 年 9 月以降 いろいろな不具合を含んだまま、ずっと放置をしてありました。
- 各入力スイッチ(MODE/BACK, SET, UP, ZERO/DOWN)の、押下動作に対する反応がいまいちで、どうしても納得がいかない。
- MODE スイッチによって切り替えた現在のモードの不明確さと、SET スイッチによって選択した現在の選択項目の不明確さ。
- 時報音出力の機能追加によって設けた圧電ブザーから、常時出力されるジーーーという雑音の処置対策が未解決。
- 気温表示機能とディマー機能が未実施、等々……。
今回、ホームページで公開するにあたって、6年ぶりにハード、ソフトともに見直しをしてみました。 ハード的にはほとんど問題はない
(アナログ入力の一部の定数を変更しました)のですが、ソフトの面では思いのほか手間取ってしまいました。 未だ万全とは言えない部分も
残ってはいますが、大きな支障は無くなったものとして、とりあえず公開に踏み切りました。
本来は、きっちりとしたケースに収納して実用的な形にして発表をしたかったのですが、なかなか適当なケースが見つからず、写真のように
裸のままで公開してしまいました。 今後もこの点についても百均やホームセンタ等で探してみるつもりです。
そのようなわけで、開設して間もない当ホームページですが、悪戦苦闘のためにしばらくの間更新が滞っておりました。(2013/10/28)
|
- ケースに収納 ( 2013/12/30 更新 )
"085. 沖電気 MSM5509 デジタル時計" で使用した、サナダ精工株式会社の "クリアケース ミニ (L-8033)" という
ポリスチレンケースと姉妹品の、"クリアケース スリム (L-8031)" をこの作品のケースとして選択しました。 ただ、前者は蓋付きのケースでしたが、後者には蓋が
付いていません。
そこで、このままではプリント基板の保持ができませんので、裏蓋を新たにアクリル板で作製しました。 具体的には ケース加工図 および
写真等を参照願います。
また、プリント基板をケース内に収納したことによって、従来のスイッチの操作が簡単には出来なくなってしまったため、右下の写真に示すように、もう1組のスイッチをケースの右側面にも追加して、
操作が可能なように改良変更をしました。
- 12/24時間の両表示に対応 ( 2014/08/26 更新 )
時計機能の時間表示が今まで24時間表示専用でしたが、今回 12H / 24H SELECT スイッチを設けて、いつでも12/24時間の両表示に対応できるように、
プログラムのバージョンアップをしました。 詳細は 機能と使用法 、プログラムファイル
および 12H / 24H SELECT スイッチの取り付け を参照してください。
なお、これを機に、このページのタイトルを、"ドットマトリクス LED 表示時計 (24時間表示型)" から "ドットマトリクス 8 x 8 LED 表示時計" に変更をしました。
- カレンダーデータのバックアップ機能を追加 ( 2014/09/05 更新 )
"104. ドットマトリクス 5 x 7 2色 LED 表示時計" の "カレンダーデータのバックアップ機能の追加" で述べた
まったく同じ理由から、この時計でもプログラム機能のバージョンアップを行ないました。
- うるう年計算のプログラムバグを修正 ( 2014/10/15 更新 )
前バージョン( Ver. 2.20 )までにはバグがありました。 このデジタル時計には年月日表示の機能があるのですが、その時のうるう年の計算に誤りがありました。
そのため、平年とうるう年での2月の最終日の表示がでたらめで、平年なのに 29日表示をしたり、逆にうるう年なのに 28日で終わってしまったりで、まともな動作を
していなかったのを修正しました。 詳細は、ソースファイル中の month_days サブルーチンを参照してください。
- 12時間表示時の am / pm 表示の不具合とその他を修正 ( 2019/4/15 更新 )
12時間表示時の am / pm LED表示に一部誤りがありました。 私の認識違いからその LED表示が妥当ではありませんでした。
詳細は、別ページ "014. 7セグメントLED表示時計" の "12時間表示の扱いについて" の項を参照願います。
またバグではありませんが、従来までは、12/24時間の両表示とも先頭の1桁目(左端)を、ゼロサプレス表示を行っていましたが、今回からは、ゼロサプレス表示は12時間表示時のみで
24時間表示時には行わないように修正をしました。 私作の他のデジタル時計との統一性と、12/24時間表示の区別の視認性を高めることを目的とします。
- 潜在的に潜んでいた不具合を修正 ( 2024/5/29 更新 )
上述の カレンダーデータのバックアップ機能を追加 ( 2014/09/05 更新 ) で行った機能追加のプログラムに手抜かりがあって、それ以来、潜在的な不具合要因になっていたバグを
修正しました。 詳細は、別ページ "174. グラフィック液晶表示 万年カレンダー" の "潜在的に潜んでいた不具合を修正"
の項を参照してください。 なお、修正プログラムについては、本ページの プログラム Ver. 2.42 に収録をしてあります。
|
■ 回路図 ■
|
|
|
|
(注). PIC16F876 の I/O ポートの RA4 ピンは、オープンドレイン出力のため プルアップ抵抗が必要。 |
| 回路図 (MatrixLED_Clock2.CE3) |
回路の見直し ( 2018/10/27 追記 )
本機 "ドットマトリクス 8 x 8 LED 表示時計" を私が作製したのは今から 10 年以上も前のことで、その頃は、4-16 デコーダーの 74HC154 の入手については まだまだ容易な頃で、私は何のためらいもなく
本機では3個も使用をして設計製作をしました。 ところが現在( 2018/10 )においては、その入手はかなり難しい状況となっています。
そのため、本ページをご覧になってもご自身での製作をためらわれた方もいらっしゃるかもしれませんが、本機の再現が可能なように、使用 ICの変更によるその対応策を次に示します。
4-16 デコーダーの 74HC154 に比べて 3-8 デコーダーの 74HC138 は、現在においても、まだ容易に入手することが可能です。 そこで、この 74HC138 を2個使用してそれぞれの入力を
上図のように結線することによって、1個の 74HC154 に置き換えることができます。
ただし、74HC154 は 24 ピン ICであり 74HC138 は 16 ピン ICですが2個必要とするため、その占める面積は1個の 74HC154 よりも多くなるために、その分大きなプリント基板が必要です。
したがって、本機で使用したプリント基板に載せることは難しく、パターン設計を初めからやり直す必要があります。
|
| ページトップ |
■ ケース外観と内部の様子 ■
|
ケース左側面の斜め上から見たところ |
|
|
ケース正面の斜め上から見たところ |
|
ケース背面の斜め上から見たところ |
|
|
ケース右側面の斜め上から見たところ |
|
|
|
|
ケース正面を真上から見たところ |
|
12H / 24H SELECT スイッチ追加後 |
|
|
|
ケース裏面を真上から見たところ |
|
12H / 24H SELECT スイッチ追加後 |
|
ケース裏面を斜め上から見たところ(裏蓋の様子) |
|
| ページトップ |
■ 機能概要と使用法 ■
- 本機の電源を投入すると、"ピポッ" と開始ブザー音を出力後、ドットマトリクス LED のデモ表示が数秒間行われ、続いて
プログラムのバージョン番号が LED に約3秒間表示される。
バージョン番号 Ver. x.xx
- 次に、0.5秒間ずつ0から9までの数字を順次更新しながら、ドットマトリクス LED の0〜9表示テストを計5秒間行う。
その後、1秒間の空白を置いた後 時計機能が開始され、時間表示が行われる。
- 時計表示は12/24時間の両表示機能を持ち、12H / 24H SELECT スイッチによりいつでも切り替えることができる。
また、他に年月日の表示と気温の表示の機能を持っている。
時間表示 xx:xx:xx
年月日表示 xx.xx.xx
気温表示 xx.x℃
表示例
|
|
|
時間表示 (21:35:17) |
年月日表示 (2013.12.30) |
気温表示 (15.7℃) |
- 12時間表示の場合、左列の :(コロン)の上側 LEDで AM を、また下側 LEDで PM を、1秒間隔で点滅を繰り返すことで、それぞれを表現している。
┌─ AM
↓
12時間表示 xx:xx:xx
↑
└─ PM
- 次に、12時間表示と24時間表示の対応を示す。 なお、
どちらの場合でも 12時間表示の場合だけ 先頭の1桁目(左端)は、ゼロサプレスを行なって表示をする。
(24H) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ┐
(12H) 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 │(←修正前)
pm am am am am am am am am am am am am pm pm pm pm pm pm pm pm pm pm pm ┘
(24H) 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ┐
(12H) 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 │(←修正後)
am am am am am am am am am am am am pm pm pm pm pm pm pm pm pm pm pm pm ┘
↑ ↑
( 2019/4/15 修正 )
上記において、修正前では2つの↑位置の am / pm の表示が誤っていました。 作者の認識違いで、両位置のそれぞれが逆表示であったのを修正しました。
詳細は、別ページ "014. 7セグメントLED表示時計" の "12時間表示の扱いについて" の項を参照してください。
またバグではありませんが、従来、12/24時間の両表示ともに先頭の1桁目(左端)は、ゼロサプレス表示を行っていたのを、12時間表示時だけに改め
24時間表示時には行わないように修正をしました。 作者の他デジタル時計との統一性と、12/24時間表示の区別の視認性を高めることを目的とします。
- また、上記の時間、年月日、気温の3つの表示は MODE スイッチを押下することで自由に切り替わり、そのスイッチの押下ごとに、
時間表示、年月日表示、気温表示、オートモードに加えて、時報付の時間表示の順に5つのモードを繰り返す。
┌→ 時間表示 → 年月日表示 → 気温表示 → オートモード → 時間表示(時報付) ─┐
│ │
└──────────────────────────────────────┘
- この時、MODE スイッチを何度も続けて押していると、現在のモードが何なのか分かり辛くなる時があるため、
ドットマトリクス LED の1桁目(最左端桁)でその時のモードを表示する。 (特に時間表示、オートモード、
時間表示(時報付) の3つのモードでは、ともに時間が表示されるので 区別が付けにくい)
- すなわち、MODE スイッチを押した直後に、1桁目の横1列の8個の LED が次のように数秒間だけ表示される。 その後
1桁目の LED は通常の表示に戻る。
(例ではオートモードを表す。 ●は点灯、○は消灯)
(例) ○○○○○○○○
○○○○○○○○
○○○○○○○○
○○○○○○○○ ← 時間表示(時報付)
●●●●●●●● ← オートモード
○○○○○○○○ ← 気温表示
○○○○○○○○ ← 年月日表示
○○○○○○○○ ← 時間表示
- オートモードでは、時間表示中に以下の振る舞いを行う。
毎05〜09秒と35〜39秒の間: 年月日表示
毎20〜24秒と50〜54秒の間: 気温表示
(___: 時間表示、NNN: 年月日表示、KKK: 気温表示)
00 10 20 30 40 50 00
. . . . . . . . . . . . .
_____NNNNN__________KKKKK__________NNNNN__________KKKKK_____
- 年月日、時分の設定変更は、上記5つのどのモード時でも可能で、PICにプログラムを書き込んだ直後の電源の投入時には、
14年09月01日、0時00分00秒(12時間表示の場合は PM 12時00分00秒) 14年09月01日、00時00分00秒(12時間表示の場合は AM 12時00分00秒)からスタートするので、
SET または BACK スイッチと、UP または DOWN スイッチによって適宜変更を行う。
- このように、SET スイッチ等で年月日の設定変更を行うと、その値のバックアップがとられて次回(同一日であれば)に電源の投入をし直した時には、
その設定値で年月日、時分、および 00秒からスタートする。 また、年月日の設定変更を行なった場合ばかりでなく、
毎日日付が自動更新された時点でも、やはり同様に年月日、時分のバックアップがとられるため、次回に電源の投入をし直した時には、
そのバックアップ値で年月日、時分、および 00秒からスタートする。
- SET スイッチは、押下するごとに年、月、日、時、分と次項目に移動するので、該当の項目を選択後 UP
または DOWN スイッチによって値を設定する。 最後の分設定後にもう一度 SET スイッチを押下すると、
00秒から時計動作がスタートし、必ず時報なしの時間表示モードに戻る。
- この SET スイッチによって項目を選択中に、誤って希望する項目を通り過ぎてしまったような場合に、BACK スイッチを
押下することによって、ひとつ前の項目に戻ることができる。 MODE / BACK スイッチは、年月日、時分の設定中には
このような機能を有する。
BACK BACK BACK BACK
←─ ←─ ←─ ←─
SET SET SET SET SET SET
5つのどれかのモード ─→ 年 ─→ 月 ─→ 日 ─→ 時 ─→ 分 ─→ 時報なしの時間表示モード
│ ↑
BACK└───────────────┘
- また、この時も選択された項目が分かり易いように、次のように表示される。
(xx 選択項目、 __ 消灯桁)
xx.__.__ 年が選択
__.xx.__ 月が選択
__.__.xx 日が選択
xx:__:__ 時が選択
__:xx:__ 分が選択
表示例
- SET スイッチによって項目の時/分を選択中で12時間表示の場合、左列の :(コロン)の上側 LED点灯 + 下側 LED消灯で AM を、
上側 LED消灯 + 下側 LED点灯で PM を、それぞれ表現している。 なお、この場合の先頭の1桁目(左端)のゼロサプレスは、
12/24時間表示のどちらの場合にも行なわない。
- ZERO/DOWN スイッチは、年月日、時分の設定中は上記のように DOWN スイッチとして機能するが、それ以外では毎正時
プラス・マイナス5分以内に押されると 00分00秒に設定するための ZERO スイッチとして機能する。
- 年月日カレンダー機能について、うるう年の計算は 2001年〜2399年までの範囲で対応している。 ただし、年の表示は
下2桁のみになる。
- その他の機能として、周囲の明るさに応じてドットマトリクス LED の表示を減光するディマー機能を持ち、周囲が明るい
ときはドットマトリクス LED の表示も明るく、周囲が暗くなると暗く表示される。
|
| ページトップ |
■ プログラム ■
時報音の出力について
本来、NHKの時報は正弦波の 440Hz (予報音) と 880Hz (正報音) で構成されているが、この正確な正弦波を作り出すのは容易ではない。 したがって
ここでは擬似的に、矩形波で間に合わせることにする。
以前のバージョンでは、時報音の出力にタイマー1割り込みを使用して作成したサウンドで実現していたが、その音がかなり濁ったような音で、
到底澄んだ音にはならず、聞くに忍びない。 理由はある程度分かっている(基本の秒を作り出すために、タイマー0割り込みを使用して実現しているが、
それが邪魔をしているのだ)のだが、当然ながらこれを止めるわけにはいかない。 そこで、割り込みを使用したサウンドを止め、
ElectronicMetronomeII.asm で好結果を得た、サウンド・サブルーチン(Sound.sub)を本プログラムでも使用してみることにした。
しかし、当初、期待した音はまったく出ず、何か間欠的なポツ、ポツ、というような音しか聞こえてこなかった。 どこかバグっているのかと思って
いろいろと調べてみると、どうやら高い音は大丈夫そうで、低い音になるとポツ、ポツ、というような音になってしまうようだ。
そこで、サウンド・テストルーチンを本プログラム内に組み込んで、サウンド・サブルーチン(Sound.sub)の下限の発振可能周波数を調べてみたところ、
Device: PIC16F876、Clock: 12.8MHz の条件で、626Hz までであることが分かった。(ちなみに、Device: PIC16F648A、Clock: 8MHz の条件では、391Hz
までで、ElectronicMetronomeII.asm 内に同様なサウンド・テストルーチンを組み込んで調べた。) 参考までにテストルーチンを次に抜粋しておく。
Device: PIC16F876、Clock: 12.8MHz 下限周波数: 626Hz
Device: PIC16F648A、Clock: 8MHz 下限周波数: 391Hz
下限が 626Hz というのは、音階でいうとミ(659.26Hz)までで、レ#(622.26Hz)以前の低い音程は発振できない。 したがってこのままでは
時報の正報音(880Hz)は問題ないが、予報音(440Hz)を出力することができない。
上記のように、タイマー1割り込みを使用したサウンドでは、酷く濁った音で聞くに忍びないため、サウンド・サブルーチンを使わざるを得ないが、
かと言って 440Hz を発振することができない。
440Hz の倍数にこだわることもないのかもしれないが、とりあえず、1オクターブずつ上げて、予報音に 880Hz 、正報音に 1760Hz を割り当ててみた。
なお、これらの一連のテストルーチンは、本来の時計機能等に支障をきたさないように、当分の間、ソースプログラム内に組み込んだままにしておくこととする。
現在の最新バージョン: Ver. 2.42 ( 2024/5/29 更新 )
|
|
|
| ページトップ |
■ プリント基板パターン図 (部品面) ■
このプリント基板を作製した時点では、秋月電子通商において、ガラスエポキシタイプの片面ユニバーサル基板で、
大型のものは発売されていませんでした。 そこでBタイプ(95 x 72 mm)のもの2枚を、以下図や写真のように横に繋いで(182 x 72 mm)使用しました。
(繋ぎ目部分は、左右の基板共に 4 mm 程カット加工してあります。)
|
| プリント基板パターン図 (部品面) (MatrixLED_ClockPC.CE3) | ページトップ |
■ プリント基板パターン図 (ハンダ面) ■
| プリント基板パターン図 (ハンダ面) (MatrixLED_ClockPC1.CE3) | ページトップ |
■ プリント基板(2)パターン図 (部品面) ■
| プリント基板(2)パターン図 (部品面) (MatrixLED_Clock2PC.CE3)
| ページトップ |
■ プリント基板(2)パターン図 (ハンダ面) ■
| プリント基板(2)パターン図 (ハンダ面) (MatrixLED_Clock2PC1.CE3)
| ページトップ |
■ 12H / 24H SELECT スイッチの取り付け ■
時間表示が今まで24時間表示専用でしたが、今回 (2014/08/26 機能追加)、いつでも12/24時間の両表示に対応できるように、プログラムのバージョンアップをしました。
そのために 12H / 24H SELECT スイッチで切り替えるのですが、どのようなスイッチを使用して、どこの位置に設けるか ―― 少々悩みました。
本来、プリント基板(2) をスイッチ基板として、そこに同居させるのがベターだとは思うのですが、そのためのスペースがありません。 また、たとえ基板を大きく作り直したとしても、
それをケースに取り付けるための穴まで開け直すことは、既に現サイズで加工済みのケースにはできません。
そこで、苦肉の策で 12H / 24H SELECT スイッチには、私の手持ちの中から左下写真のような小型のトグルスイッチを使用して、操作する頭部分を裏蓋側に出すように考えてみました。
|
|
(トグルスイッチ仕様)
フジソク ATE1D-6M3-10 48V 0.05A |
|
|
|
|
トグルスイッチ |
|
|
プリント基板 (部品面) |
プリント基板 (ハンダ面) |
まず、右上写真のようにプリント基板の端材を利用して、トグルスイッチを写真のように取り付けます。 2個の穴はプリント基板(2) に固定するための穴ですが、
位置を調整しているうちに写真のような見苦しい穴となってしまいました。
次に、プリント基板(2) に接続されているケーブルの先のコネクタを、現在の5Pから6Pに取り替え、左上写真のようにトグルスイッチ基板にも2Pのケーブルを
配線します。 (詳細は プリント基板(2)パターン図 を参照)
その後、中央上写真のようにプリント基板(2) とトグルスイッチ基板の両者の、ハンダ面が向かい合わせになるようにしてケースに取り付けます。
(ただし、両者の回路が干渉しないように、両者の間にはスペーサーを介して絶縁を確保して取り付けます。)
|
|
|
|
|
スイッチ基板をケースに取り付け |
ケースに裏蓋を取り付け |
スイッチ部分を拡大 |
その取り付けた様子を左上写真に示します。 また、最終的にケースに裏蓋を取り付けた様子を中央上写真に示しますが、トグルスイッチの操作する頭部分が
裏蓋から外(裏側)に出るように、事前に裏蓋には○穴を開けておきます。
|
| ページトップ |
■ ドットマトリクス LED について ■
今回の製作で使用した特殊なパーツとして、8 x 8 赤色 ドットマトリクス LED は 秋月電子通商 で購入したもので、スタンレーの "BU5004-R" という型番の
"点字翻訳機" で使用したものと同じものです。 外観的には左下の写真のようなもので、大きさが 24 x 24 mm の 2.54 ピッチ足となっています。
また、足ピンは 16本出ておりその接続は、右下の図のように配置されています。
|
| ページトップ |
■ ケース加工図 ■
使用したケースは、100均(セリア)で購入した "クリアケース スリム (L-8031) サナダ精工" という、ポリスチレンケースです。 プリント基板を保持するための
裏蓋が付属していないため、2 mm 厚のアクリル板とL型アルミアングルを加工して作製しました。
|
| ケース加工図 (MatrixLED_ClockCS.CE3) |
|
|
|
ケース正面を真上から見たところ |
|
12H / 24H SELECT スイッチ追加後 |
|
|
|
ケース裏面を真上から見たところ |
|
12H / 24H SELECT スイッチ追加後 |
|
|
ケース上側面から見たところ |
|
(100均で購入した半球型の "ポイントクッション" というものを足として下面に貼り付けました) |
|
|
ケース左側面から見たところ | ケース下側面から見たところ | ケース右側面から見たところ |
|
| ページトップ |
■ 使用部品表 ■
(主要部品: IC, トランジスタ等) |
|
(データシート) |
|
PICマイコン |
.................... |
PIC16F876 |
|
HC-MOS IC (3-8 デコーダー) |
.................... |
HD74HC138P |
|
HC-MOS IC (4-16 デコーダー) |
.................... |
TC74HC154AP |
|
オペアンプ |
.................... |
LMC662CN |
|
高精度IC温度センサ |
.................... |
LM35DZ |
|
トランジスタ |
.................... |
2SA1015 |
|
8 x 8 ドットマトリクス LED |
.................... |
BU5004-R |
| 部品表
| Excel ファイル (MatrixLED_Clock_parts.xls)
| ページトップ |
■ 参考サイト ■
| ページトップ | ホーム |
Copyright (C) 2007-2024 やまもとみのる
初版:2007年5月7日、初公開:2013年10月28日、最終更新:2024年5月29