이전 1자리 FND를 제어하기 위해서는 아두이노에 8개의 I/O핀을 연결해야 했습니다.
하지만 연결해야 할 핀이 많다면, FND 하나를 제어하기 위해
8의 I/O핀을 사용하는 것이 문제가 됩니다.
이럴 경우 시프트 레지스터(Shift Register)를 사용하면,
아두이노에 연결해야 할 I/O핀이 3개로 줄어들게 됩니다.
아두이노에서 시리얼 레지스터로 데이터가 전달됨을 알려주는 Clock 신호와,
시리얼 데이터를 함께 보내주면 시프트 레지스터는 8개의 신호를 받아
각각의 핀으로 신호를 출력합니다.
74HC595의 핀 맵 및 로직 다이어그램입니다.
- 15번,1~7번 핀(QA~QH,output pin)은 출력을 제어 하는 8개의 핀입니다.
- 14번 핀(A) 는 데이터 핀(Data pin, DS)으로 클럭에 맞춰 데이터를 전송해줍니다.
- 13번 핀(OUTPUT ENABLE, OE)은 출력핀 전체를 on/off 시킬때 사용합니다. 이 핀으로 PWM제어를 할 수 있습니다. active low이므로 GND에 연결합니다.
- 12번 핀(LATCH CLOCK, ST_CP)은 시프트 레지스터가 수신한 데이터를
래치 레지스터에 저장하는 선입니다.
- 11번 핀(SHIFT CLOCK, SH_CP)은 아두이노와 시프트 레지스터가 데이터를 전송할 수 있도록 클럭 신호를 전송하는 핀입니다.
- 10번 핀(RESET, MR)은 리셋 핀입니다. active low이므로 비활성화를 위해 5V에 연결합니다.
SHIFT CLOCK(SH_CP)핀에 클럭 신호가 들어오면, A(Data pin)에서는 8개의 데이터를 전송합니다.
이 후 LATCH 레지스터에 저장하고, LATCH CLOCK(ST_CP)핀을 LOW로 바꿔주면
외부로 데이터를 전송할 수 있습니다. 데이터 전송이 끝나면 다시 HIGH로 올려줘야 합니다.
아래 예제는 74HC595와 1자리 FND를 사용하여, 0~9까지 숫자를 출력하는 코드입니다.
준비물 : 아두이노 우노, 220Ω x 8EA, 점퍼선, 브레드 보드, FND(공통 애노드), 74HC595(IC칩)
기존 1자리 FND(애노드 타입) 핀 맵과 74HC595의 핀 맵입니다.
소스 코드 중에
-shiftOut()함수는 한 번에 한 Bit씩 한 Byte를 옮기는 함수입니다.
데이터의 최고(가장 왼쪽) 또는 최저(가장 오른쪽) 비트부터 시작할 수 있습니다.
각 비트는 차례대로 데이터 핀에 써집니다. 문법은 shiftOut(dataPin, clockPin, bitOrder, value)입니다.
bitOrder 인자값에서 MSBFIRST 또는 LSBFIRST로 1byte의 좌우 전송 방향을 정할 수 있습니다.
데이터의 최고(가장 왼쪽) 또는 최저(가장 오른쪽) 비트부터 시작할 수 있습니다.
각 비트는 차례대로 데이터 핀에 써집니다. 문법은 shiftOut(dataPin, clockPin, bitOrder, value)입니다.
bitOrder 인자값에서 MSBFIRST 또는 LSBFIRST로 1byte의 좌우 전송 방향을 정할 수 있습니다.
0 댓글