- 公開日:2018年11月22日
- | 更新日:2022年10月14日
[7SEGルーレット貯金箱製作] 第3話 7セグLEDとシフトレジスタ
- ライター:すーさん
- その他
前回までの奮闘記
こんにちは、すーさんです。
前回で7セグルーレット貯金箱製作の仕様書を作成しました。
今回はシフトレジスタを使い7セグメントLEDを動かしてみたいと思います!
製作開始!
仕様書が出来上がったので、秋葉原に必要な電子部品を買いに行きます。
部品を買い終えた後はいきなりユニバーサル基板に半田付けするのではなく、
各部品とマイコンを1つずつブレッドボード上に配線し動かしてみることにしました。
マイコンにプログラムを書き込み、1つの部品を動作させ、思ったとおりに動かすことができたら他の部品を徐々に追加していき、
半田する前にブレッドボード上で仕様書通りの基板を作ってしまおうといった作戦です。
そうすることで、確実に配線することができると私は考えました。
描いた回路図が正しいのかもわからず、いきなり半田付けをして思ったとおりの動作をしなかったら、大変なことになると思ったので・・・。
まずは7セグメントLEDを動かしていきます。
7セグメントLEDが点灯しない
最初に回路図通りに7セグメントLEDのみを1つブレッドボード上に配線し、パワーサプライの電源をON!
・・・あれ、光らない、いきなりつまずきました。
配線も抵抗も問題ない・・・何が原因かわからず2日間悩み続けました。
先輩に点灯しない原因を聞くとアノードとカソードが逆、ただそれだけでした。
私はカソードコモンを買ってきたと思っていたのですが型番をよく見ると7セグはアノードコモン。
こんな単純なことにも気づくこともできないなんて、この先どうなることやら・・・。
シフトレジスタって?
気持ちを切り替えて、次にシフトレジスタをブレッドボード上に1つ追加して、数字を表示してみることに。
下の回路図のようにブレッドボード上に配線を行いました(図1)。
シフトレジスタはマイコンからの出力をシリアル→パラレル変換することによりSN74HC595NのIC 1つで
8ピン分、出力を増やすことができます。
シフトレジスタの使い方を調べると以下の通りになります。
・SER:シリアルデータを入力するピン
・SRCLK:シフトレジスタクロックを入力するピン
・RCLK:ラッチクロックを入力するピン
・QA~QH:出力ピン(8ピン)
・QH‘:別のSN74HC595NのSERピンにつなぐと出力数を8ピンずつ増やすことができる
・OE:HiにするとQA~QHが切断される
(今回は7が揃ったときに7セグを点滅させる為、接続)
・SRCLR:Lowにするとシフトレジスタをリセット
(今回は未使用のためVcc接続)
・Vcc:電源(今回は3.3V)
・GND:グラウンド接続[動作]
1. SERピンに1ビットのデータを入力する。
2. SRCLKをHiにするとQAにデータがセットされる。
3.再びSERピンに1ビットのデータを入力後SRCLKを
HiにするとQAにセットされていたデータがQBに移動し、
次に入れたデータがQAにセットされる。
1~3を8ピン分行い、RCKピンをHiにする。
4.QA~QHにセットされたデータが一気に出力される。
以上が私の調べたシフトレジスタ(SN74HC595N)の使い方です。
最低でもマイコンのポートにSER、SRCLK、RCLKの3ピン接続すれば7セグメントLEDは動かせます。
シフトレジスタの使い方はわかったのですが、マイコンからSER、SRCLR、RCLKの信号をどのようにシフトレジスタに入力すればいいのかわからないので先輩方に質問したところ、全てプログラムでできるとのこと。
そこでMSP430ランチパッドとシフトレジスタ(SN74HC595N)を使用して8つのLEDを動作させているC言語の書き方(下記をコピーし検索するといくつか参考資料が出てくると思います)を参考に先輩方に質問しながらプログラムを作っていきました。
http://processors.wiki.ti.com/index.php/MSP430_Launchpad_Shift_Register
C言語は研修で学びましたが、中々思い通りにいかないものです。
1週間ほどC言語と格闘してなんとか0~9までを順番に7セグメントLEDに表示することができました。
以下が、ここまでの実験成果とソースコードになります。
なんとか、7セグメントLEDとシフトレジスタを連動させて動かすことに成功しましたが、
予定していたスケジュールよりも大幅に遅れてしまいました。
期間内に形にできるよう、めげずに動作試験を引き続きやっていきます。