ロジックIC時計

記事作成日時:2023-03-03 03:03:06
最終更新日時:2023-09-01 19:08:51

今回はロジックICとUV-EPROMのみを用いて電源同期式のディジタル時計を製作しました.
せっかく作るのでカウンタ部分では 一般的な2進数による数値表現を用いずに 特殊なコードを直接カウントアップする構成にしました.(詳細は後述)
時計 VFD 表示器も蛍光表示管と呼ばれるなかなかにきれいなミクさん色のものを使用しています.
基準のクロックは商用電源の50/60Hzを分周して作るため無調整でかなりの高精度を期待できます.(校正が面倒くさいときの味方である)
電力を管理するすべての方々に感謝.


スペック



仕組み


全体の構成


この時計は上の図のような構成をとっています.

EXE Tとは74HC161で言うところのENTの動作をするものです.
161にはENTとENPがありそれぞれRCO(繰り上げ)の動作が異なり,ここではTの方の動作をしたいということを明示するためEXT Tとしています.Tが何の略かは知らん(ENはENABLEだろうな)

基準クロックの取得

まず,商用電源をトランスで降圧したAC5V 50/60Hz をフォトカプラに通して電源部との分離,半波整流,レベル変換を一括で行っています.こうしてできた50/60Hzは一度入力がシュミットトリガになっているインバータ(74HC14)を用いて安定したCMOSレベルに整え,1/25もしくは1/30分周を行える分周器で2Hzを生成し後段の回路に供給します,この2Hzが時計のシステムクロックで,基本的にこの2Hzに合わせてすべて動作します.

秒の生成

1/25,1/30分周器は74HC161を使用しているため出力のDuty比が50%になっていません.そのためコロンの表示に直接用いることができないので1/2分周を通しDuty比が50%になるように波形整形を行います.この時生成される1Hzは秒カウンタのEXE入力(イネーブル)にも使用します.
また,この1/2分周器の値が変化するのと同時にEXTが変化するのは好ましくないため2Hzを反転し位相を180度ずらしたものを1/2分周器に入力します.

秒カウンタは電源投入時,分設定SW/時設定SWが押された場合にカウント値をRSします.
カウンタからは秒の10のケタに繰り上がりを伝える信号を引き出し表示をhh:mm と :ss の表示を切り替える信号として使用しています.
これにより10秒ごとにhh:mm と :ssが切り替わるようにしています.
どうせ秒の部分も分周してあげないといけないのに表示させないのはもったいないし,時間の10の位の焼き付き防止的なこともできたらなという目論見があります.
なおhh:mmの表記で固定もできます.(当たり前すぎか)

分の生成

分は秒カウンタから1分ごとに送られてくる繰り上がり信号をもとにシステムクロックに同期してカウントアップします.
カウンタの各桁には強制的にカウントアップする(もちろんシステムクロックに同期して)入力があり,その入力をSWで操作することにより分の設定をします.また,設定すると秒がクリアされるようにしておきます.

時の生成

基本は分の生成と同じ動作をしますが,時間制を24時間制,12時間制,30時間制に切り替えるための入力があります.


カウンタの構成

以上の説明ではただただ普通の時計ですが,この回路の神髄はカウンタにあります.前述の通り,通常の2進数による数値表現を用いずに実現するところがキモです.

一般的な同期式カウンタの構成

カウンタには非同期カウンタや同期式カウンタなど種類がありますが,ここでは同期式カウンタについて説明します.
同期式カウンタには一般的に以下の機構があります.
・数値を記憶するReg(レジスタ)
・数値を+1するインクリメンタ

まず,インクリメンタには現在のカウント値が常に入力されていて,出力にはその入力値を+1したものが出力されています.
2進数であれば
入力:0001→出力:0010
入力:0110→出力:0111,
10進数であれば
入力:1→出力2
入力:6→出力:7
という具合です.
これをRegに値を保存するクロックを入れると前回保持していた値を+1したものが保存されます.
この動作を繰り返すことでカウンタは数値をカウントすることができます.

また,EXTは外部からカウントするか,しないかを選択するための入力です.
カウントしない場合はインクリメンタを迂回したり,インクリメンタの出力を+0(つまり何もしない)としたりして前回と同じ値を再びRegに保存させます.
すると外部の回路に合わせ,同一のクロックでカウントさせたり,させなかったりを実現することができます.

ここで使われるインクリメンタはディジタル回路では2進数が用いられ,8bitなどのエッジトリガのRegなどの数値をカウントアップします.

本時計でのカウンタ


この時計でも原理は同じですが,インクリメンタが特殊です.
何が特殊かというと 7セグのパターンを直接+1 出来ます.

これによって通常のバイナリカウンタを用いるとカウンタに加えてバイナリ値を7セグの点灯パターンに変換するデコーダが必要になるところをデコーダなしでそのまま表示が可能になります.

特殊なインクリメンタはどうするか

普通に組もうとするとかなり大変なことになると思われます.そこでFPGAやCLDなどが候補にあがると思われますが,ロジックICで作ると言ってそこをそれらにしてしまっては意味がありません.
そこで今回はTMM27256というUV-EPROMを用います.

簡単に説明するとアドレスに現在表示しているセグメントのパターンを入力すると+1した値のパターンを出力するようなバイナリデータを用意すれば良いのですが,手動でそのデータを作るのは骨が折れるのでちょちょいとプログラムを作成して作りました.こういう適当にサクッとやる用途ではPythonが楽ですね.(個人差あると思いますが)

アドレスは
A0~A6の7bit : 現在表示しているセグメントを入力
A7~A8の2bit : A7&A8==1の時はインクリメント,それ以外では入力値をそのまま出力.つまり74HC161で言うところのENT,ENPのような感じです(厳密にはRCOつまり繰り上げの信号の動作がENPと異なります)
A9 : Hの時はA7,A8の状態にかかわらず強制的にインクリメントする(時間設定時に用いています)
A10~A13 : メモリマップに示している通りです.
A10に限れば0x0000から0x17FFの範囲に限ってLの時は通常のカウント,Hの時は
12時間制であれば10時台のカウントの動作
24時間制,30時間制であれば20時台のカウントの動作
をします.(メモリマップの項目で説明)

と言った感じです.
以下にメモリマップを示します.
カウンタのメモリマップ 勘違いで無駄に8ケタも取ってしまったのは見なかったことにしてください汗

この表の見方は例えば0x0000から0x03FFまでは「カウントが0から始まり9で終了,終了ののち繰り上げの信号とともに0でカウンタを初期化する」という動作です.
なぜ初期化まで面倒を見るかというと12時間制と30時間制の動作が面倒なことになっているからです.

12時間制では午前/午後01:00から始まり12:59で終わります.(厳密には違いますが大半の時計ではこの動作です)
つまり12の後に00で初期化してはならないのです.
そこで以下のパターンを取り解決します.
01 → 09
繰り上がり
10 → 12
繰り上がり
01 → 09
1の位だけ見ると1から9までのカウントと0から2までのカウントの二種類用意する必要があります.
それがマップ上の0→9→0や0→2→1という表現になっています.
本来1から9までで良いわけですが0からのほうがプログラムを組みやすかったので0からにしています.

このようにしてインクリメンタを構築します.
回路図を見ながらのほうが理解しやすいかも?

具体的な回路は 回路図 を参照してください

またバイナリは以下から配布しています
準備中 ここ から配布しています.テキトーに使ってください.

回路図

基板はA,Bの二枚に分かれています.
少々雑ですが,想像で補ってください.

入力と書いてある部分は時間設定用のSWです.
1hは時の1の位,10hは10の位という感じになっています.

また,カウンタが同期式になっているためチャタリング防止回路は必要ありません.同期式の利点ですね.
VFDを駆動する電源は各自でお願いします.私は2360で昇圧する普通のDCDCを組んでグリッド電圧,5Vに270Ωを4並列したものをフィラメントに直列に入れています.これはVFD管によって異なるのでなんかいい感じにお願いします.

誤り,ご質問等あればコメントしてください.


具体的な動作

Youtubeに動画をうpしたのでそちらを参照してください.


関連するページ


コメント欄

投稿をすべて見る

最新の投稿を見る

投稿をすべて見る

投稿する場所
名前
メール
削除キー
添付画像(1投稿1枚10MBまで)
↓チェックを入れてからボタンを押してね!!認証エラーになるよ!!
なんかアドブロック使ってるとダメらしい...すみません
削除する場所
削除する投稿ID
削除キー
↓チェックを入れてからボタンを押してね!!認証エラーになるよ!!
なんかアドブロック使ってるとダメらしい...すみません
今日累計
キリ番踏み逃げ禁止!!

スポンサードリンク




RSSフィードはじめました.詳細RSS