LED制御の下調べ
ゆくゆくは8セグメントLEDやマトリクスLEDをArduinoで制御したいと思い、色々調べた事をメモ。
LEDの多灯を制御するには、LED一つ一つにマイコンの制御ピンを割り当てたら全然数が足りません。
そこで、LEDの高速応答性と人間の目の錯覚を利用して、すべて同時に点灯させるのではなく、一つずつ短い時間で切り替えながら点灯させます。すると、人間の目には全て点灯しているように見えます。これを、ダイナミック点灯と呼びます。
こうすると、例えば8×8のマトリックスでは、縦1列8個の制御用に8ピンと、横向きの8列に対してどの列を点灯させるかの8ピンで、合計16ピンで制御可能となります。(8×8=64個のLEDを16ピンで制御)
これで、1/4にピンを削減できたのでバンザイ…とはいかず、実はまだまだ削減可能!(いや、削減しないと14本のデジタルピンしかないArduinoにはきつい。。。)
どの列を点灯させるかという信号は、実は8列のうち、どれか1列のみがONになっている状況です。つまり、1, 2, 3,…8と、順番に列をONにしていけば良く、1と3が同時ということはありません。そこで、ロジックICであるラインデコーダの登場!
このラインデコーダは、例えば3-to-8のものであれば、3本の入力信号で、8つの出力信号が得られます。ただし、前述の通り、出力側は8個のうち1つのみONという状態です。
3と8という数字でピンとくるかもしれませんが、2進数の3桁を10進に変換するのと同じ要領です。001なら、1番目の出力ピンをON、101なら、5番目のピンをON、といった形で動作します。
これを使うと、横の列を選択するには、3本のピンで行う事が可能なので、8→3で5本の削減になりました。この時点で11本です。これなら、Arduinoでも可能!
3-to-8 デコーダ 74HC138
、、、ですが、実はまだいけます。だって8×8のマトリックスを制御するのに11本じゃ、16×32とか16×64が制御できないじゃん!
ということで、次はシフトレジスタの登場です。レジスタというのは、アセンブラ等をやった方なら分かるかと思いますが、値を記憶する領域です。んで、シフトはスライドさせていくイメージ。つまり、ON/OFFの信号が来たら、それを記憶します。そして、次に信号がきたら、その横にスライドして格納します。8個の受け皿があるシフトレジスタなら、ON/OFFと信号が来たら、それを順番に8個貯めます。そして、それを同時に8個のピンから出力してもらいます。すると、1個のピンから来たON/OFFの信号群が、8ピンの出力となります。これで、8→1のピン削減が可能!!(^^)/ (実際は、1個ずつ格納してずらす際のタイミング用と、ポンと8個同時に出力させるためににもう1ピン入力が必要なので、8→3)
シフトレジスタ 74HC4094 東芝製
↑これは入手性悪いらしく、今は74HC595がよく使われるらしいです。
分かりやすい実験をやっているサイトさまがあったのでリンクさせていただきます。
シフトレジスタ(74HC595)の使い方
というわけで、8×8のマトリックスLEDなら、6本で操作できそうです。
また、シフトレジスタは、制御ピンを共有して直列接続が可能なので、16×8でも、6本で制御できます。
今後、これを実際に動作させる事を目標に、Arduinoの勉強をしていく予定です。
この投稿を楽しめましたか? もし良ければ、 コメントを残してお話をするか、 RSSフィードを購読 して、あなたのフィードリーダーに登録してみませんか?

Comments
コメントはまだありません。
コメントする