반응형
이전 게시물에서 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 동작 테스트 영상입니다.
반응형
'Hardware > Arduino ( AVR )' 카테고리의 다른 글
[아두이노] USB HOST SHIELD - 입/출력 테스트(feat. 안드로이드폰) (0) | 2021.01.06 |
---|---|
[아두이노] USB HOST SHIELD 구매 (0) | 2021.01.04 |
[아두이노] FND (7 segment) 테스트 (0) | 2021.01.03 |
[아두이노] AD9833 사용하기 (0) | 2020.12.05 |
[아두이노] OV7670 사용하기 (3) | 2020.11.26 |
댓글