본문 바로가기

[아두이노] 74HC595 테스트

by rudals.kim 2021. 1. 3. 댓글 개
반응형

이전 게시물에서 FND를 동작시켜 보았습니다.

 

그런데 FND 한개를 동작시키기 위해서 8개의 포트를 사용해야 합니다. FND 2개만 사용하면 아두이노의 거의 모든 포트를 사용해야 동작 시킬 수 있습니다. 다른 센서나 디바이스를 붙이려면 포트가 부족하게 됩니다.

 

이러한 문제를 해결하기 위해 대표적으로 Serial to Parallel Shifting-Out 할 수 있는 74HC595를 사용합니다.

3개의 컨트롤 라인을 통해 8개의 Output 포트를 제어 할 수 있습니다.

 

아래는 각 핀에 대한 설명입니다.

컨트롤로 사용되는 핀은 DS/SH_CP/ST_CP 3라인이 사용되며 전원관련 VCC/GND 2라인과 데이터 출력으로 Q0 ~Q7 총 8개의 라인이 사용됩니다.

아래와 같이 회로를 구성할 예정입니다.

이전 게시물에서 사용한 FND의 8개 데이터 라인을 74HC595의 출력라인쪽으로 연결하고, 단지 컨트롤 3라인만을 아두이노 D8/D9/10으로 연결합니다. 

 

위 그림을 참고하여 실제 회로를 구성합니다. 

 

회로를 다 구성했으니 소스를 작성해 봅니다.

모든 세그먼트가 잘 동작되는 확인하기 위해 500ms마다 각 각의 세그먼트 ON -> 전체 세그먼트 ON -> 숫자 0~9, 헥사 A ~ F 출력 -> 전체 세그먼트 ON을 반복하도록 작성하였습니다.

const int clockPin = 8; //SH
const int latchPin = 9; //ST
const int dataPin = 10; //DS

const byte seg[10] = {
  0b00000000,
  0b00000001,
  0b00000010,
  0b00001000,
  0b00000100,
  0b00010000,
  0b00100000,
  0b01000000,
  0b10000000,
  0b11111111,
};

const byte digits[27] = {
  0b01111011,  // 0
  0b00001010,  // 1
  0b10110011,  // 2
  0b10011011,  // 3
  0b11001010,  // 4
  0b11011001,  // 5
  0b11111001,  // 6
  0b01001011,  // 7
  0b11111011,  // 8
  0b11011011,  // 9
  0b11101011,  // A
  0b11111000,  // B
  0b01110001,  // C
  0b10111010,  // D
  0b11110001,  // E
  0b11100001,  // F
  0b11111111   // ALL
};

void setup() {
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void LEDs(byte a) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, a);
  digitalWrite(latchPin, HIGH);
}

void loop() {
  for(int i = 0; i<10; i++){
    LEDs(seg[i]);
    delay(500);
  } 

  for(int i = 0; i<18; i++){
    LEDs(digits[i]);
    delay(500);
  } 
}

 

이제 위 소스를 업로드 하여 정상적으로 동작되는지 확인 해 봅니다.

아래는 아두이노에 74HC595를 사용한 FND 동작 테스트 영상입니다.

반응형

댓글