Fri,Nov4,2011
Ledマトリックスは楽しいおもちゃです。 誰がblinkenlightsを愛していないだろうか? 電子工作は難しいですよね。 電子工学はプログラミングより大いに堅い。 私はled行列がどのように機能するのかを理解するのに苦労しました。 何かを学ぶための最良の方法は何ですか? 自分で構築します。
ledマトリックスの構造
マトリックス形式では、Ledは行と列に配置されています。 また、それらをy座標とx座標として考えることもできます。 我々は4×4行列を持っていると仮定しましょう。行はAからDまで、列は1から4までマークされます。 これで、行と列のそれぞれのLEDを表示できます。 左上のledは(A、1)になります。 Bottomdown ledは(D、4)になります。
共通列の陽極(左)および共通rowcathode(右)。
上の図は、異なる構成を示しています。 これらの2つの構成の違いは、ledをどのように点灯させるかです。 共通列によってanodecurrent源(肯定的な電圧)は列A.に付します。.Dと電流は1列にシンク(負の電圧、グランド)します。.4. 一般的な列の陰極電流シンクは、列Aに接続されています。.Dとcurrentssourcesを列1に配置します。.4.たとえば、
。 一般的なカソードマトリクスのled(D、4)を下に点灯させるには、正の電圧を列4に供給し、行Dをグランドに接続します。 明確さを捨てて、この記事のrestofの例でcommon-row cathodeを使用します。
LEDマトリックスの構築
4×4の共通行カソードマトリクスを構築するには、16個のLed、fourresistors、いくつかのヘッダーとプロトタイピングボードが必要です。 私はエポキシ接着剤で基板に接着することから始めました。 この方法では、美しく整列したベッドを持っている方が簡単です。 Ledを接着するときは、長いものと短いものを確認してください脚は同じように整列されています。
接着剤が乾燥しているときは、曲げてはんだ付けする時間です。 まず、できるだけ基板の近くに残したすべてのカソデストを曲げます。 すべてのcathodesinを各列一緒にはんだ付けして下さい。 陰極が準備ができたら、すべての陽極を曲げます。 陽極は陰極に触れないようにしてください。 私は陰極の上の橋を形作るためにbendingtheの陽極を助けるのにプラスチック管の部分を使用しました。
ここで、各行のすべての陽極を一緒にはんだ付けします。 ヘッダーをはんだ付けし、ヘッダーに直接カソード行を接続します。
アノード列は電流制限抵抗でヘッダーに接続されています。抵抗の値は、使用されるLEDによって異なります。 Ledのデータシートを確認してください順方向電圧と電流のために。 LEDcalculatorはoutcorrectの抵抗器を見つけるのを助けます。 マトリックスは今テストの準備ができています。
アドレッシングシングルLED
列Aにグラウンドを接続し、列1に正の電圧を接続すると、右上のLED(A、1)が点灯します。
グランドを列Dに接続し、正の電圧を列4に接続すると、下方向のLED(D、4)が点灯します。
直感は、(A、1)と(D、4)の両方を同時に点灯させると言うでしょう。 これはそうではありません。 点灯している4つのLedがあります。 これは、(A,4)と(D,1)にも電流が流れているためです。
多重化とビジョンの持続
多重化は、ledmatricesで任意のパターンを表示するために使用することができます。 多重化はスキャンと呼ばれることもあります。 これは、行(通常はアップからダウンまで)をスキャンし、attime一列にのみledを必要としています。 次のようなもの:
- すべてを切断することから始めます。
- 正の電圧を必要なすべての列に接続します。
- 列をグラウンドに接続します。 これは、行の必要なledを点灯します。
- 行とすべての列を切断します。
- すべての行に対して同じ手順を1つずつ実行し、開始から開始します。
これをゆっくりと行うと、LEDの行が点滅します。 それは本当に速く行います人間の目は全体のパターンを見ることができます。 現象は、ビジョンの存在。
パターンを描画
行列にパターンを描画するための簡単なコードを書きましょう。 注意!私はArduinoボードを使用していますが、Arduino libraries norIDEを開発に使用していません。 しかし、私はArduinoのピン番号付けスキームが好きです。関数pin_mode()
とdigital_write()
は、Arduinoと同等のものとまったく同じように動作します。
私たちは、ピンとそれらのためのデフォルトの状態を設定することから始めます。
uint8_t column_pins = { 2, 3, 4, 5 };uint8_t row_pins = { 11, 10, 9, 8 };static void init(void) { /* Turn all columns off by setting then low. */ for (uint8_t x=0; x<4; x++) { pin_mode(column_pins, OUTPUT); digital_write(column_pins, LOW); } /* Turn all rows off by setting then high. */ for (uint8_t y=0; y<4; y++) { pin_mode(row_pins, OUTPUT); digital_write(row_pins, HIGH); }}
行列にパターンを表示するには、draw()
関数を使用します。Bitmapは二次元配列として渡されます。 遅延は、視力の永続性を実証する。
uint8_t pattern = {{1,0,0,1}, {0,1,0,0}, {0,0,1,0}, {1,0,0,1}};void draw(uint8_t buffer, uint8_t delay) { for (uint8_t row=0; row<4; ++row) { /* Connect or disconnect columns as needed. */ for (uint8_t column=0; column<4; ++column) { digital_write(column_pins, buffer); } /* Turn on whole row. */ digital_write(row_pins, LOW); _delay_ms(delay); /* Turn off whole row. */ digital_write(row_pins, HIGH); }}
視覚効果の持続性を調べるために、異なる遅延。
uint8_t main(void) { init(); /* With 100ms delay eye can see updating row by row. */ for (uint8_t i=0; i<10; i++) { draw(pattern, 100); } /* With 10ms delay pattern appears but flickers. */ for (uint16_t i=0; i<100; i++) { draw(pattern, 10); } /* Withoud delay solid pattern appears. */ while (1) { draw(pattern, 1); } return 0;}
完全なコードはgithubから見つけることができます。下のビデオからの出力を確認してください。
続きを読む
回路のスキル:メイクマガジンによってLEDマトリックス。 Alexander Weberによる抵抗の有無にかかわらずLEDを駆動する。 Avago TechnologiesによるLEDマトリックスの駆動(PDF)technoteの紹介。 電子クラブによる発光ダイオード(LEDs)。
に掲載されているAVR Electronics