Arduino와 8 비트 시프트 레지스터로 7 세그를 제어합니다.

소개



표시계의 부품으로서 모든 곳에서 사용되고 있습니다. 그러나 LED와 달리 단순히 전압을 가해도 숫자는 표시되지 않습니다. 또한 아무래도 배선이 많아지기 때문에 시프트 레지스터도 활용하여 사용법을 마스터합시다.


7 세그먼트 LED 회로



아래 그림과 같이 a ~ g + DP (도트)까지 8 핀이 있습니다. 그 핀에 입력이 있으면 그 위치가 빛납니다.
또, 공통 핀(com)이 「+」또는 「-」의 2 종류의 회로가 있으므로 사용하는 경우는 잘 확인합시다.



배선도



이와 같이 배선을 실시합니다. 특히 프로그램은 필요하지 않습니다. 실행하면 모두 점등한다고 생각합니다. 지금은 3.3V와 GND 밖에 사용하고 있지 않기 때문에 제어다운 움직임은 할 수 없습니다.
실제로는 이것을 GPIO 핀에 삽입&입력을 주는 것으로 제어할 수 있습니다만, 그렇게 되면 8pin도 소비해 버려, 조금 아무것도 없다.


  시프트 레지스터를 사용하여 배선을 정돈



시프트 레지스터를 추가하여 3선으로 입력을 제공할 수 있습니다. 숫자는 시리얼로 입력할 수 있으므로 간단한 코드로 숫자를 순차적으로 표시하는 코드도 쉽게 걸립니다




#define SRCLK   (5)//シフトレジスタのクロック信号
#define RCLK    (6)//ストレージレジスタのクロック信号
#define SER     (7)//シリアル入力

void setup() {
  pinMode(SRCLK, OUTPUT);
  pinMode(RCLK,  OUTPUT);
  pinMode(SER,   OUTPUT);
}

// 点灯パターン
const uint8_t PATTERNS[] = {
    B01110111,
    B00010001,
    B01101011,
    B00111011,
    B00011101,
    B00111110,
    B01111110,
    B00010111,
    B01111111,
    B00111111
};

void loop() {

  // 点灯パターンの数
  int pattern_num = sizeof(PATTERNS)/sizeof(PATTERNS[0]);

  for (uint8_t i=0; i<pattern_num; i++) {
    // 8ビット分のデータをシフトレジスタへ送る
    shiftOut(SER, SRCLK, LSBFIRST, PATTERNS[i]); 

    // シフトレジスタの状態をストレージレジスタへ反映させる
    digitalWrite(RCLK,  LOW);
    digitalWrite(RCLK,  HIGH);

    delay(500);
  }
}


결론 & 참고 문헌



7세그나 시프트 레지스터 등이 등장하면 조금 착용해 버리는 분도 많다고 생각합니다. 하지만 원리는 어렵지 않고 시프트 레지스터는 함수가 하드화되었다고 생각하면 마음이 편하지 않을까요? 우선은 손을 움직여 트라이 해 봅시다!

7 세그먼트 LED란?
Arduino에서 시프트 레지스터 (SN74HC595)를 사용하여 8 개의 LED를 치카 치카

좋은 웹페이지 즐겨찾기