74HC154で8x32 LEDマトリックスに描画


8

8x32 LEDマトリックスにパターンを送信するにはどうすればよいですか?AT89S52マイクロコントローラーと74HC154 4-16ラインデコーダーを使用しており、Keil IDEを使用してCでプログラミングしています。垂直スキャンを実行しましたが、次のステップで困惑しています。必要に応じて回路図を含めます。回路は以下に示すものと同じですが、74HC138を使用せず、コモンアノードマトリックスを使用し、ドライバーとしてUN2803を使用しています。メモリは使用していません。

ポート1は列、ポート2は行です...コード:

 row = 0xFF;
     //for (j=0x01; j< 0x08; j<<=1)  {   /* scan left to right */
     for (j=0x00; j<=0x0F; j++)
     {
          E1=0;
          E2=0;
          P1 = j;
          P2 = row;
                                   /* Output to LED Port */
          for (i = 0; i < 100; i++) 
           {  /* Delay for 100 ms */
              delay ();                       /* call delay function */

           }

ここに画像の説明を入力してください

回答:


3

MxN多重LEDディスプレイを駆動するための通常のパターンは、システムが一度に1つずつ「行」のワイヤーに通電するように、画面上の物理的なレイアウトに関係なく、一方の方向を「行」として、もう一方を「列」として指定することです。各行が順序付けられている間、システムは、その行で点灯する必要のあるすべてのLEdの「列」ワイヤに電圧を供給します。

各列ワイヤには、アクティブ化されたときに電流を調整するデバイスが含まれている必要があり(抵抗はここで機能します)、各行ワイヤには、すべての列に同時に給電するのに十分な電流を供給できるドライバが必要です。ハードウェアは、一度に複数の行を駆動できるようにする必要はありませんが、列の任意の組み合わせを駆動できるようにする必要があります。

74HC154チップは行選択ロジックで問題なく動作する可能性がありますが、一度にアクティブにできる出力は1つだけであるため、列の制御には適していません。「横」をスキャンして、32行と8列として論理的にアクセスされるようにしたい場合、74HC154は行を選択するのに適しているかもしれませんが、各行が供給できるようにハードウェアを追加する必要があります。 8つのLEDを駆動するのに十分な電流、そして電流を制限するためにUN2803の各出力に何かを追加する必要があります。

74HC154を一連の74HC595チップ(シフトレジスタ)と抵抗器、または電流制限が組み込まれている1つ以上のLEDドライバーチップ(4つのTexas Instruments TLC5916など)に置き換えることが、おそらくあなたがしたいことでしょう。 、Digi-Keyから入手可能)。それらのチップをコントローラーからSPIポートに接続し、データの各行をシリアルにシフトアウトします。ローサイドドライバーチップ(前述のTLC5916など)を使用する場合、行ドライバーをシンクではなくソース電流に変更する必要があります。これを行う最も簡単な方法は、8つのNPNトランジスタを使用することです。それぞれは正のレールに接続されたコレクター(必要に応じて、調整されていない電源を使用できます)、コントローラーまたはデコーダーチップの出力に接続されたベース、エミッタはLED列に接続されています。


だから私は論理を逆にする必要がありますか?P2 =列; P1 =行? ".... 74HC154は行を選択するのに適している可能性があります..."私はすぐにソフトウェアでこのロジックを試します...
Rick Ant

32個の垂直「行」が必要な場合は、74HC154を使用してそれらを選択できますが、74HC154は多くの電流を供給できず(その点で多くのシンクもできません)、1/8デューティサイクルでの駆動はほぼ確かに1/16デューティサイクルで運転するよりも優れています。LEDが水平方向でアノードまたはカソードとして配線されているかどうかは示していませんが、行には強力なドライバー(おそらく個別のトランジスター)を使用し、列には電流制限ドライバーを使用することをお勧めします(行が最終的に水平または垂直になります)。
スーパーキャット2012年

ディスプレイを明るくしたい場合は、各列のワイヤーの駆動電流を、LEDが安全に維持できる最大電流よりも高くする必要があるでしょう。コードの実行が停止した場合にLEDが損傷するのを防ぐには、プロセッサが誤動作した場合でも、行ドライバを過度に長時間駆動しないように行ドライバを設計する必要があります。これを行うにはさまざまな方法があります。行ドライバにディスクリートトランジスタを使用している場合は、それぞれに抵抗とキャップを追加して、最大デューティサイクルを制限できます。
スーパーキャット2012年

あるいは、カウンターを使用して行を制御する場合、タイミング回路を使用して、カウント間で過度の時間が経過したかどうかを検出し、ディスプレイをブランクにするか、「自動」カウントパルスを生成します。
スーパーキャット2012年

そのためのコード例はありますか?たとえば、文字AAAAを表示したいですか?
リックアント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.