4連の7セグメントLEDをシフトレジスタで制御してピン数を節約する

0
    JUGEMテーマ:Arduino

    前回の記事は7セグLEDドライバーの記事だったのですが、
    直接Arduinoに7セグLEDを接続した場合の11本の信号線から8本に削減することが出来ました。
    http://miha.jugem.cc/?eid=99

    今回はシフトレジスタを使用してもっと節約してみたいと思います。

    ぐるぐる

    カウンタ

    上は、完成の映像ですが、
    Arduinoに直接接続した場合と区別がつきません。
    7セグメントLEDドライバーと違い数字以外の出力も可能です。

    シフトレジスタの動作
    シフトレジスタはシリアルの情報をマイコンのクロックに合わせてレジスターに取り込んでいきます。
    74LC595ひとつで8ビットのデータを取り扱う事が出来ます。
    動作
     1.LATCHPIN(RCK)をLOWにしてデータ書込み開始する。
     2.DATAPIN(SI)にデータをセットする。ここではデータは1ビットでHIGH(5V)またはLOW(0V)のどちらかをセットする。
     3.CLOCKPIN(SCK)にHIGHをセットする。
     →74HC595はSCKがHIGHになったときのSIの信号を取り込む。
     4.CLOCKPIN(SCK)にLOWをセットする。
     5.上記の2.〜4.を必要なビット数分繰り返す。
     6.LATCHPIN(RCK)をHIGHにしてデータ書込み終了する。
     →74HC595はRCKがHIGHなると、取り込んだデータを出力側(QA〜QH)に反映する。
     (下のプログラムを見ると判りやすいかもしれません。)
    9ビット以上のデータを取り扱う場合は74HC959の9番ピン(QH*)を次の74HC959のSIに接続すると16ビットのデータを扱う事が可能になります。
    他のピンは1段目の74HC595と同じでかまいません。
    データシートが英語で判りにくかったのでhttp://www.wdic.org/w/SCI/74595が参考になると思います。

    今回は1桁のセグメント出力で8ビット使用して、桁数の指定で4ビット必要になりますので2個の74HC595をカスケード接続しています。

    回路図

    回路図を見てください。Arduinoとの信号線の接続はなんと、3本だけになりました。
    当初が11本だったのに比べると3本ってすごいと思いませんか?

    ぐるぐるのプログラム
    //7セグLEDぐるぐるシフトレジスタ75HC595N

    #define DATAPIN  (2)  // 74LC595の(14)SIへ
    #define LATCHPIN (3)  // 74LC595の(12)RCKへ
    #define CLOCKPIN (4)  // 74LC595の(11)SCKへ

    struct PTN{
      int nOut;
    };
    struct PTN ptn[7]
    {
      B00000001,
      B00000010,
      B00000100,
      B00001000,
      B00010000,
      B00100000,
      B01000000
    };

    void setup() {
      // put your setup code here, to run once:
      pinMode(DATAPIN, OUTPUT);
      pinMode(LATCHPIN, OUTPUT);
      pinMode(CLOCKPIN, OUTPUT);
    }

    int nKai = 0;
    void loop() {
     
      for(int i=0;i<6;i++){
        Out(3-nKai, i);
        delay(100);
      }
     
      nKai++;
      if(nKai>=4){
        nKai = 0;
      }
    }

    void Out(int nKeta, int nValue)
    {

      digitalWrite(LATCHPIN, LOW);
      ShiftOut8( DATAPIN, CLOCKPIN, ~(B00000001 << nKeta));
      ShiftOut8( DATAPIN, CLOCKPIN, ptn[nValue].nOut);
      digitalWrite(LATCHPIN, HIGH);
      delay(1);
    }

    void ShiftOut8( int dataPin, int clockPin, unsigned long val )
    {
      for( int i = 7; i >= 0; i-- ){
        digitalWrite(dataPin, !!(val & (1L << i)));
        digitalWrite(clockPin, HIGH);
        digitalWrite(clockPin, LOW);
      }
    }

    カウンターのプログラム
    //7セグLEDカウンタ-シフトレジスタ75HC595N

    #define DATAPIN  (2)  // 74LC595の(14)SIへ
    #define LATCHPIN (3)  // 74LC595の(12)RCKへ
    #define CLOCKPIN (4)  // 74LC595の(11)SCKへ

    struct PTN{
      int nOut;
    };
    struct PTN ptn[10]
    {
      B00111111, //0
      B00000110, //1
      B01011011, //2
      B01001111, //3
      B01100110, //4
      B01101101, //5
      B01111101, //6
      B00000111, //7
      B01111111, //8
      B01100111  //9
    };

    void setup() {
      // put your setup code here, to run once:
      pinMode(DATAPIN, OUTPUT);
      pinMode(LATCHPIN, OUTPUT);
      pinMode(CLOCKPIN, OUTPUT);
    }

    int nCount = 0;
    int nKai = 0;
    void loop() {
      Out4Digit(nCount);
      nCount++;
      if(nCount>=10000){
        nCount=0;
      }
    }

    void Out4Digit(int nValue)
    {
      for(int i=0;i<4;i++){
        int amari = nValue %10;
        Out(i, amari);
        nValue = nValue / 10;
      }
    }

    void Out(int nKeta, int nValue)
    {

      digitalWrite(LATCHPIN, LOW);
      ShiftOut8( DATAPIN, CLOCKPIN, ~(B00000001 << nKeta));
      ShiftOut8( DATAPIN, CLOCKPIN, ptn[nValue].nOut);
      digitalWrite(LATCHPIN, HIGH);
      delay(1);
    }

    void ShiftOut8( int dataPin, int clockPin, unsigned long val )
    {
      for( int i = 7; i >= 0; i-- ){
        digitalWrite(dataPin, !!(val & (1L << i)));
        digitalWrite(clockPin, HIGH);
        digitalWrite(clockPin, LOW);
      }
    }

    写真

    奥の黒いのが74HC595です。


    スポンサーサイト

    0
      • 2018.07.29 Sunday
      • -
      • 14:47
      • -
      • -
      • by スポンサードリンク


      PR

      calendar

      S M T W T F S
      1234567
      891011121314
      15161718192021
      22232425262728
      293031    
      << July 2018 >>

      selected entries

      categories

      archives

      recent comment

      recent trackback

      profile

      search this site.

      others

      mobile

      qrcode

      powered

      無料ブログ作成サービス JUGEM