2024年07月29日
セグメント (2)
前回、その前に作成したルーレットゲーム機を拡張して7セグメントを追加して、表示するハードウェアを作成しました。
前回の記事の前半は7セグメントの部品の説明、後半はプログラムでの制御方法の表面的な話をしました。
今回は、ソフトウェアが無事に動くまでの裏話をしたいと思います。
結論から述べますと、ブレッドボード、ジャンパー線に手こずりました。
フレキシブル(やわらかい配線)のジャンパー線は、衝撃に弱く、接触不良を度々起こしました。ブレッドボードも安物なので、ピンがしっかり刺さっていなかったことも。
テスタを使って、信号(電圧)を調べながら、プログラムを実行して調整していきました。
デジタルに慣れているプログラマでは、0〜5Vの安定しない数値はむずがゆさを感じます。
そんなに気持ち悪いなら、ADコンバータパーツを通せばよいのですが、そこまでの必要もないので、痛し痒しです。
※ADコンバータ。入力の電圧を閾値(しきいち)で判断して、信号の有無を出力する部品です。0Vと5Vなどが良く利用されると思います。
前回の説明でもしましたが、7セグメントの光らせたいLEDに対応するピンに信号を入れ(電圧をかける)、部品を制御します。
よって、プログラムでは、0〜9数値に対し、どのLEDを光らせるかの対応表を作ります。
その対応表に従って、信号を出力することで、該当するLEDを光らせれば完成です。
C言語系のプログラミング言語では、switchを使うのがスマートかと。
7セグメント部品に直接入力することで、0〜9以外の模様を表示させられることは先に述べました。
この場合、7本のポートを利用す必要があります。
ここで、0〜9に固定することが確定している場合、BCD(2進化10進数)を利用できれば、4本のポートで制御できます。
BCDは、1桁単位で、0〜9を2進数4桁で管理するデータ形式です。
この場合、7セグメント用のデコーダ(コンバータ)ICを利用する事で簡単に実装することができます。
ICはTC4511BP。秋月電子(外部サイト)では80円で入手可能です。
7セグメントに直接信号を送る手法と、IC(デコーダ、ドライバ)を利用する方法。
それぞれ一長一短ですので、用途に合わせて使い分けられるとよいですね。
ポート数の節約を行うのであれば、アナログ出力端子から電圧を調整して出力し、信号をデコードして、7つの出力を7セグメントに接続する方法も考えられますが・・・。コストパフォーマンス的にはメリットがなさそうです。
ただ、無駄とわかっていても試したくなるのが技術屋の性かもしれませんね。
今回は、単純に7セグメントの各LEDを制御しました。
一応、さほど機能がない場合には、十分だと思います。
今後も同じ部品は多用すると思いまうので、モジュールの作成を行いたいと考えています!
IoT開発を行って、仕事の効率化や豊かな生活を送りませんか?
「Let's extend technology!!」
を合言葉に、
IoTの事例やヒント、開発記を投稿していきます!
ハードウェア業者と、話がうまくできない。
そんなときは、両方に対応している弊社にご相談ください。
お待ちしております!