8つのI/Oポートで市販の8×8マトリクスLEDを駆動
SCRを使って市販の8x8マトリクスLEDを9つのI/Oポートで駆動する方法を「9つのI/Oポートで市販8x8マトリクスLEDを駆動」に書いた。
よく考えたら8つのI/Oポートで駆動できそうである。
- SCRのカソード ←'L'
- SCRのゲート ←'H', 他SCRのゲート←'Z'
- SCRのカソード ←データ(Active'L')
で駆動することを考えていた。
- P1←'H' → SCR1 ON
- LED(1,2) → SCR2ゲート → SCR2 ON
となり、SCR2がONしてしまう。
SCR2がONしないようにするには、SCR2のゲート(P1)を'L'にしておく必要があるのだが、SCR2のゲートとSCR1のカソードは繋がっているので、P1を'L'にするとLED(1,2)が点灯してしまう。
つまり、SCR1だけONしようとするとLED(1,2)~LED(1,7)までのLEDが全て点灯することになる。
このとき、SCR1はゲートを'L'にしても、SCR1→LED(1,2)→P1 で電流が流れているので、SCR1のカソードに接続されたR9やポートP9は必要ない。
任意の列(x)にデータD(0-7)を出力する方法は
- P(0-7) ← 'ZZZZZZZZ' (ALL_OFF)
- P(x) ← 'H',
P(x以外) ← 'L' (SCR(x) ON) - if D(n)='1' then P(n) ← 'L'
else P(n) ← 'Z' (データ出力負論理)
でよいのではないか。
SCRをONにする期間(2)に関係のないLEDが点灯するが、SCRをONにする期間(2)がデータを出力している期間(3)と比較して短時間であれば人間には見えないだろう。
ソースは↓こんな感じ
void disp_col(uint8_t col, uint8_t data) {
|
※SCRのゲートをONした後の時間待ちは電源電圧によって異なるので用調整。
「9つのI/Oポートで市販8x8マトリクスLEDを駆動」と同じH/Wを使って、常時P9を'Z'とする方法で試してみた。
« 1000時間の法則 | トップページ | 自分のアタマで考えよう »
「日記・コラム・つぶやき」カテゴリの記事
- 修理(4) <とうとう修理不能>(2022.11.08)
- LANケーブルテスター(2022.05.18)
- 今時のWebサイトを構築してみた(2022.05.16)
- Type-C 充電器(2022.04.29)
- 全館停電 <ネットワークトラブル訓練>(2022.03.12)
「AVR」カテゴリの記事
- Google日本語モールス入力(2020.05.01)
- Digispark(3) <RAMが一番大事>(2016.09.19)
- Digispark(2) <ATtiny85+V-USB+Arduino>(2016.09.05)
- Digispark (1)(2016.09.03)
- Atmel買収 <AVRは無くなるのか>(2016.03.01)
コメント