7セグのセグメントが薄っすら光ってしまう件
2013年2月 7セグのダイナミックドライブで、消えているはずのセグメントがうっすら光ってしまう、と悩んでいませんか。それは回路が悪いのではありません。プログラムが間違っています。 |
何が起きているのか | |||||||||||||||||||||||||||||||||||||||||||
7セグのダイナミックドライブの解説は↓こちらのページを参考にしてください。 今から始めるAVR #2 ATtiny2313 7セグ4桁ボード〜そこ(7セグ)んとこ、詳しく ダイナミックドライブの仕組みが分かって、いざ自分でプログラムを組んで点灯させたら、隣の桁の数字がうっすら重なって見えている…? ダイナミックドライブが残像を利用した技術だと言っても、隣の桁に数字が残るという意味ではありません。もちろん部品や回路のせいでもありません。プログラムが間違っているのです。 参考回路図
この回路の下で、7セグに「12」という値を表示します。今、プログラムは1桁目に字形「1」を出力し、2桁目に移動して字形「2」を出力するタイミングだったとします。7セグに文字が出力される様子を一瞬ごとに考えてみましょう。 間違ったプログラムの例1
間違ったプログラムの例2
どちらの例も、プログラムが3行目から4行目を実行する一瞬の間、意図しない字形が7セグに出力されることになります。プログラムを1MHzないし8MHzという結構な速さで実行していても、この一瞬の点灯は見えてしまいます。 正しいプログラムの例
間違ったプログラムの原因は、字形と桁の内容が一致しない瞬間ができてしまうことにありました。マイコンはPORTBとPORTDを同時に変化させることはできません。従って、どちらを先に変更するにしろ、その瞬間(字形と桁を切り替える瞬間)に文字が表示されないようにすれば問題は解決します。 上記プログラムは3-4行目,7-8行目でPORTB,PORTD両方の出力を停止していますが、PORTB,PORTDのどちらか一方だけでも構いません。※例では前後の行との対比からPORTB,PORTD両方を操作しています。 ちなみに3桁以上の7セグの場合、9行目以降に1-4行目と同様の処理が続きます。 |
◆ ◆ ◆ |
最初にダイナミックドライブのプログラムを組んだ頃、実は自分がこの件で悩みました。 消えているはずのセグメントが薄く点灯している。まず回路を疑いました。でもミスなし。 ちゃんと消えているセグメントもあります。よく見ると薄い点灯が数字の形をしていること、 隣の桁に表示している数字であることに気付きました。 ここまで分かれば次はプログラムのダイナミックドライブ制御の部分を追いかけます。 そして解決。…という経験でした。 |
(C) 『昼夜逆転』工作室 | [トップページへ戻る] |