前回の記事では、マルチプレキシングの世界の小さなサブセットであるCharlieplexingについて説明しました。 非常に一般的な言葉で言えば、多重化は、リソースを節約するために複数の信号が結合されるときに発生します。この文脈では、多重化により、マイクロコントローラのIOピンの数を節約できるが、いくつかのピンを点灯させるなど、やや複雑なハードウェアおよびソフトウェアプロトコルを実装することになる。 LEDについて。
複雑さに加えて、このタイプのLED多重化に伴うもう1つのトレードオフは、各LEDが公称「オン」の時間のほんの一部しか電源が入らないことです。人間の目はこれを単色として認識しますが、これは特定のビデオ アプリケーションに悪影響を及ぼし、ちらつきなどの異常を引き起こす可能性があります。
潜在的なちらつきが目的に適っていると仮定して、3つの異なるLED多重化技術について説明します。まずは基本的なグリッド設定から始め、汎用的な 74HC4051 マルチプレクサ/デマルチプレクサ、そして最後に MAX7219 シリアルに処理するLEDドライバー。
LEDグリッドライト: IO LEDセットアップ
「LED」は、もちろん発光ダイオードの略です。通常、これらは光を生成するために使用されますが、電流を一方向にのみ流すことができる非常に機能的なダイオードでもあります。この動作を利用して、以下のグリッド レイアウトを作成できます。各行はIO1からIO4をハイに設定することでアクティブになり、列はIO5からIO8をローに設定することでアクティブになります。
たとえば、IO1がハイに設定され (2-4がロー)、IO5がローに設定されている (6-8がハイ) 状況を考えてみます。電流が流れる唯一の経路はIO1からIO5であり、LED D1が点灯します。IO6もローに変更すると、D1とD2に並列で電力を供給でき、IO7とIO8でも同様、D3とD4に電力を供給できます。
図に示すように、8つのIOが16個のLEDを制御します。グリッドは必要に応じて拡張でき、一方の軸のIOの数にもう一方の軸のIOの数を掛けた数のLEDを制御できます。以下に、6つのIOを使用して9個のLEDの3x3マトリックスを制御する簡単なブレッドボードの例を示します。
この技術の問題点は、1行のLEDは簡単に制御できるものの、列のIOがハイ状態になると、 毎 その列のLEDはオフになっています。この問題を解決するには、各行のIOを1つずつハイに設定して、LEDセットをアクティブにします。列IOピンは、どの特定のLEDがオンになるかを制御します。このようにして、マトリックス全体が必要に応じて順番にアクティブ化され、このプロセスが何度も繰り返されます。これは人間の目が感知できるよりも速く起こり、一定の輝きとして見えるものを作り出します。
この種のテクニックは、入力に対して逆方向にも使用できます。ただし、ボタンやその他の感知デバイスには通常、ダイオードが「おまけ」として付いていないため、より多くの部品が必要になります。
74HC4051マルチプレクサ チップ
上記で説明した内容は、74HC4051のような多重化チップを使用してプロジェクトを効率化するために役立ち、LED多重化の仕組みを理解するのに役立ちます。このチップでは、3つのセレクター入力 (A (ピン11)、B (ピン10)、C (ピン9)) によって3ビットの2進数が生成され、8つの出力ピンのうちのどれにピン3からの信号を渡すかが選択されます。
上記で構築された回路は、これらのチップの1つを使用してLEDを制御するための手動レイアウトを示しています。左側の最初のボタンは、青いワイヤを介して入力ピン3に電力を供給します。他のボタンがどれも押されていない場合、すべての選択ピンは10K抵抗器のバンクによって低くプルダウンされ、ピン13のLEDが点灯します。他のボタンを押すと、 ここにあるデータシートに記載されているように、さまざまなLED選択が有効になります。
たとえば、右端のセレクター ボタンが押されてピン9がハイに設定されている場合、ピン3のボタンがアクティブになると、ピン1のLEDが点灯します。代わりに、他の2つのボタンを押して10と11をハイに設定すると、ピン12のLEDがピン3とともに点灯します。LEDグリッドと同様に、マイクロコントローラは、人間の目では見えないほど速くLEDを循環させることができます。
MAX7219: Arduino LED多重化
グリッドおよびマルチプレクサ ソリューションはさまざまな用途に使用できますが、 Arduino または類似のデバイスから多数のLEDを駆動したいだけの場合は、MAX7219チップが最適です。このICはプロセッサからシリアル信号を受信し、低レベルの監視なしでLEDの実際の表示と多重化を処理します。
上記のマトリックスは64個のLEDの8x8グリッドです。つまり、LEDグリッド方式に基づいて、Arduinoでこれを制御するには理論的には16個のピンが必要になります。ここで必要なのは、3つの制御ピンと、正極ラインおよび接地ラインだけです。MAX7219は、それ以上の監視なしで多重化を処理します。このチップは、この目的のための機能を内蔵しており、 7セグメント ディスプレイの制御にも適しています。ディスプレイをテストするために使用したコードと、前述のシンプルなLEDグリッドは、 GitHubで見つかります。
多重化技術の利点
ここで紹介する3つの手法は、LEDを出力ピンに直接接続するだけよりもハードウェア的には複雑ですが、最終的にはさらに多くの出力を制御できるようになります。このタイプのセットアップは通常「多重化」と呼ばれますが、ここで行っていることは実際にはマイクロコントローラの信号の多重化解除であると主張する人もいます。これは、LED出力の数を減らすのではなく、信号を増幅しているからです。何と呼ぶにせよ、必要なときに「ツールボックス」に入れておくと便利なコンセプトです。