8*8 LED マトリクス

  1. LEDマトリクス


    1. BU5004

       BU5004は8*8の小型LEDアレイ(配列)で、パッチボードに搭載して配線が可能です。表示器の横のラベル(1657xx等の数字)を読める向きにして左手前が1ピンです。



      内部は下のような構成です。実際は8*8ですが、簡単のため4*4の図になっています。


    2. ドライバー:TD62083

       TD62083は電流増幅用のトランジスタが8個収容されたICです。1個当たり100mA程度の出力が可能になります。
      8*8LEDの場合、列のすべてのLEDが点灯すると、平均的に100mA 程度の電流になります。PICの最大許容出力電流は15mA程度ですから、外付けのドライバが必要になります。そこで、TD62083を利用します。
       これは、トランジスタを8個組み込み、1〜8ピンが入力、18〜11ピンが出力です。入力ピンをHにすると、出力端子は400mAの電流を引き抜く(流す)ことができます。9ピンを電源グランドに接続します、(10ピンは接続不要です)。

  2. 回路設計


    1. 回路図

      LEDアレイのコラム(列方向)の端子(C8..C1)を抵抗110オームを通してポートB7〜B1に接続します。R1〜R8 はコラムのデータを行(横)方向)にスキャンします。R1〜R4 をPICのA3〜A0に、R5〜R8 をPICのC3〜C0 にTD62083(以後TD)を介して接続します(青色の太い信号線は4本の信号をまとめて表示しています)。たとえば、PICのA3端子は、TDの8ピンに接続し、TDの11ピンをBUのR1(16ピン)に接続します。 図では、R5とR6が共に6ピンになっていますが、R5は5ピンの間違いです。
       パッチボードのサイズがせまいので、抵抗の配置は工夫してください。TD62083の9ピンをグランド(0V)バーに接続します。





  3. プログラム


    1. 動的点灯

      点灯は動的点灯方式を利用します。まず、B0,..B7に0列の点灯パターンを出力しA3を1にします。A3を1にすると、ドライバのTD62083を通して、LEDマトリクスのR1がLになり、マトリクスの第1列が点灯します。次に、B0,..B7に1列の点灯パターンを出力し、A3を0にしA2を1にします。これで第2列が点灯します。A3〜A0で1〜4列を点灯し、C3〜C0で5〜8列を点灯します。C0で第列を点灯したら、元のA3に戻ります。

    2. ソース

       点灯パターンを配列 matrix[] に設定します。matrixの16進を2進に直し、上から下に並べます。第一要素が第一列の点灯パターンになります。プログラムで、matrix[]の値をポートBに出力しながら、A3からC0を順に1にして各列を点灯します。5回表示したら、matrix[] 配列の値を左にシフトします。これで、左から右にスクロールしながら点灯をすることができます。
      #include <16f876.h>
      
      #fuses HS, NOWDT, NOPROTECT, PUT, NOBROWNOUT, NOLVP, NODEBUG, NOWRT
      #device ADC=10
      #use delay( CLOCK = 20000000 )
      #use fast_io(A)
      #use fast_io(B)
      //#use fast_io(C)
      
      int matrix[8]={0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81};//点灯パターンを定義
      int col;        
      int count;
      int i,w;
      
      void main()
      {
        
        set_tris_b(0x00);
        set_tris_a(0x30);
        set_tris_c(0xf0);
        output_b(0);
        output_c(0);
        count=0;
      
        
        while(1){
              count++;
              for(col=0;col<8;col++){
                output_b(matrix[col]);        
                switch(col){
                      case 0: 
                       output_low(pin_c0);output_high(pin_a3);break;
                      case 1:
                        output_low(pin_a3);output_high(pin_a2);break;
                      case 2:
                        output_low(pin_a2);output_high(pin_a1);break;
                   case 3:
                        output_low(pin_a1);output_high(pin_a0);break;
                       case 4:
                        output_low(pin_a0);output_high(pin_c3);break;
                       case 5:
                        output_low(pin_c3);output_high(pin_c2);break;
                       case 6:
                        output_low(pin_c2);output_high(pin_c1);break;
                       case 7:
                        output_low(pin_c1);output_high(pin_c0);break;                 
                      }
                      
                      delay_ms(3);
              }
              if(count==5){
                      w=matrix[0];
                      for(i=0;i<7;i++){
                              matrix[i]=matrix[i+1];
                      }
                      matrix[7]=w;
                      count=0;
              }
        }
                                      
      }

  4. 拡張


    1. パターン

       点灯パターンを変化させてください。

    2. 応用

      この表示器は多くの応用が考えられます。複数並べて、ゲームやグラフ(温度変化など)などに利用できます。

    3. ドット数の拡張

       8*8 の素子を横に並べて、8*16 とします。コラム数を増やすために、3入力8出力のデコーダ(74238)を利用します。