時計用7セグメントLED
秋月で衝動買いして死蔵していた時計用7セグメントLEDを、ようやく使ってみる気になったので、時計っぽくまとめてみた。
RP2040にはRTCが内蔵されているので、これを利用して時計化してみる予定だったのだが、全然ダメだったw。後継のrp2350で内蔵されなくなった理由がわかったよ…
RP2040-Zero+MicroPython
時計用7セグメントLEDは12本の端子を接続してダイナミック点灯すればいいだけだ。ほぼそのままrp2040のGPIOに直結または抵抗を介して平行に接続してある。
このrp2040-zeroの端子構成は良くできていて、上側は9本、下側は6本、サイドに5本のGPIOが出ているので余裕で色々接続できる。しかもアリエクならほぼ500円以下(今は送料が高くなってる)だったので2個づつチマチマと買い足しておいた。
GPIOのピン定義部分は以下のようになっていて、アノードコモンなのでアノード直結、カソード毎に抵抗を付けてある。こうすると点灯するLEDの数によって明るさが変化しちゃうってことがない。また、アノードをPWMで変調すると明るさを変えられなくもない。
from machine import Pin, Timer
ANODES = [29, 26, 15, 8]
CATHODES = [28, 14, 6, 4, 3, 27, 7, 5]
anodes = [Pin(p, Pin.OUT) for p in ANODES]
cathodes = [Pin(p, Pin.OUT) for p in CATHODES]
def all_off():
for p in anodes:
p.value(0)
for p in cathodes:
p.value(1)
ダイナミック点灯なので各々のLEDデューティは自然と25%以下になるので、5mAくらい流れるようにしているが、ピーク電流は各ピンの電流定格を超えてしまうかも。GNDと3.3vレギュレータ出力の間に10μFの電解コンデンサを追加しておいた。
ダイナミック点灯なのでアノードを次々と切り替える必要があるが、MicroPythonではタイマー割り込みが使えるので、それで切り替えてみた。
10msでは表示がチラチラする。5msなら目で見ても気にならないが、ビデオには間欠的に見えてしまう。そして1msならビデオでもほぼ全点灯するので、割り込み周期は1msから5msの間で良さそうだ。
内蔵RTCとは
RP2040の内蔵RTCにはバッテリーバックアップ機能がなく、停電で時刻を忘れ、1sec割り込み機能もない。これって時計じゃないのでは?とGeminiに聞いてみたら「良いところに気が付きましたね」と褒められた。うるさいんだよw
時計にするなら外付けRTC(バッテリーバックアップ付き)を追加したらどう?などとアドバイスを受けたが、そういうことじゃないだろうよ。
ここまでやってお蔵入り
どうやってもただの外付けディスプレイにしかならないので、このプロジェクトは諦めて終了とした。まぁこれはこれで楽しいからいいか。
投稿者の人気記事

-
akira.kei
さんが
前の日曜日の18:32
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する