이번에는 74HC595(논리 회로)를
다루는 방법을 알려드리겠습니다
(이번 포스트의 내용은 저의 개인적인 추측으로 이뤄졌습니다)
이녀석이 74HC595라는 녀석 인데요
이녀석을 이용하여
Led를 제어 할건데요
위와같은 논리 회로를 이용하는 이유는
아두이노를 사용할때
15개의 디지털 핀이 있지만(RX, TX포함)
이것만으로 부족 할때가 있어서
Vcc와 GND를포함해서 5개의 핀을
8개로 확장할수있기 때문에
74HC595 를 사용합니다
회로는 위의 사진을보고 연결해주시면 됩니다.
74HC595를 편하게 사용하기위해
아두이노에서 shiftOut이라는 함수를 사용하는데요
shiftout
첫번째 값 | 두번째 값 | 세번째 값 | 네번째 값 |
디지털 2번핀 | 디지털 4번핀 | LSBFRIST또는 MSBFRIST | 이진코드 |
shiftOut의 세번째 값이 LSBFRIST또는 MSBFRIST라고 했는데요
두녀석의 차이는 오름차순이냐 내림차순이냐
그차이에요
LSBFRIST면 15, 7, 8, ~ 1순으로
MSBFRIST면 1, 2, 3~15순으로 에요
그리고 마지막 값은 이진코드라고 했는데요
이진법표기는
앞에다가 0b를 붙여주면 됩니다
ex) 0b00000001(이진법) = 1(십진법)
0b00000010(이진법) = 2(십진법)
그래서 마지막 값에
0b00000001 라고 하면
첫번째 LED만 켜지고
0b00000011 라고 하면
첫번째 두번째 LED만 켜져요
(참고로 십진법을 넣을수도 있지만
어차피 이진법으로 계산해야되서
이진법으로 표기하는것이 편합니다)
shiftOut함수의 설명은 끝났지만
아직 디지털 3번핀을 사용을 안했죠?
디지털 3번핀은 데이터를 저장하는 기능이에요
그래서
digitalWrite(3, 0)으로하면 데이터를 저장하고
digitalWrite(3, 1)을 하면 데이터를
LED쪽으로 출력한다는 뜻 이에요
그래서 shiftOut이라는 함수를 사용하기전에
digitalWrite(3, 0);로 저장을 하게두고
사용후
digitalWrite(3, 1);로 LED로 신호를 보내는거죠
위처럼 회로를 구성하고
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void draw() {
digitalWrite(3, 0);
shiftOut(2, 4, MSBFRIST, 0b01001001);
digitalWrite(3, 1);
}
위르 코드를 업로드시키면
1번째, 4번째, 7번째LED가 켜질거에요
그리고 만약에
74HC595를 2개를 사용할려면
기본적으로 위와같은 회로를 구성한다음
shiftOut함수를 연속으로 2번 사용하면 됩니다
(첫번째로 사용한 shiftOut은 그림상으로 왼쪽
두번째로 사요한 shiftOut은 그림상 오른쪽을 제어)
2개를 사용하는 또다른 방법이 있는데
그방법은 독자분들이 원하시면
그때 올리도록 하겠습니다
2개말고 3개, 4개 등
2개 이상을 사용할때도 위와같은 방법을 사용하시면 됩니다.
참고로 pwm을 출력시에는 74HC595의 데이터 시트(위에 올린거) 상에서
10번핀 대신 wpm포트에 연결해주시면 됩니다.
'아두이노' 카테고리의 다른 글
아두이노 시리얼 통신 (0) | 2016.10.12 |
---|---|
아두이노 새로 시작 (0) | 2016.10.12 |
아두이노 레이저(with 눈차크) (0) | 2016.02.14 |
아두이노 피아노 (2) | 2016.01.07 |
3. 아두이노 버튼을 이용하여 Led를 제어해보자! (2) | 2015.12.08 |