74HC595 hello world! 아두이노/출력2016. 2. 8. 22:56
우노는 I/O핀이 총 20개인데 74HC595를 사용하면 핀 3개를 이용해서 사용할 포트를 거의 무한대로 늘릴 수 있다!!!
74HC595는 시프트 레지스터 중 하나인 직렬 입력/병렬 출력 시프트 레지스터에여.
칩 하나당 데이터 핀1에 8개의 출력을 병렬로 낼 수 있다는 것이죠!
그 원리는 테블렛을 산 기념으로 동영상으로 설명 ㅋㅋ
회로:
ST_CP에 1uF 커패시터가 GND와 연결되어 있는데, 이게 없으면 업로드 할 때, LED가 다 꺼진다.
즉, 업로드 전 LED상태 -> LED다 꺼짐-> 업로드한 LED상태로 ...
별 문제는 아니지만 왜 이런 현상이 일어나는지는 잘 모르겠다.
1uF을 붙여주면 업로드 전 LED상태 -> 업로드한 LED상태로 정상적으로 넘어간다.
이미지 뽑기:
그리고 파일->뉴폰트->임폴트를 누르고 mikro C를 누르면 아래와 같이 16진수가 나옴
코드:
위에서 설명한 595의 원리를 이용해서 다음 이미지를 순차적으로 한줄로 나오게 해봤다.
그러므로 만든 것을 좌우로 빠르게 흔들면 다음과 같은 이미지를 볼 수 있을 것이다.
이것은 POV 즉, 잔상효과의 기본 원리가 되죵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | const int DS = 2; const int SH_CP = 3; const int ST_CP = 4; int image[]={0x08, 0x18, 0x3C, 0x7E, 0xFF, 0x7E, 0x3C, 0x18}; void setup() { pinMode(DS, OUTPUT); pinMode(SH_CP, OUTPUT); pinMode(ST_CP, OUTPUT); } void loop() { for(int i=0; i<8; i++){ update74595(image[i]); delay(500); } } void update74595(int data) { digitalWrite(ST_CP, LOW); shiftData(DS, SH_CP, data); digitalWrite(ST_CP, HIGH);//rising edge on storage register } void shiftData(int DS, int SH_CP, int data) { for(int i=7; i>=0; i--) { digitalWrite(SH_CP, LOW); boolean oneBit = bitRead(data, i); digitalWrite(DS, oneBit); digitalWrite(SH_CP, HIGH);//rising edge on shift register } } |
'아두이노 > 출력' 카테고리의 다른 글
charlieplexing에서 애니메이션을 나타내기 (0) | 2016.02.08 |
---|---|
핀 4개로 LED를 최대한으로 제어 (0) | 2016.02.08 |
4디지트의 7-세그먼트 쓸 때 핀을 적게 쓰기 (0) | 2016.02.08 |
세븐 세그먼트를 이용해서 0~9999까지의 숫자를 차례로 나타내기 (0) | 2016.02.08 |
세븐세그먼트를 이용하여 0~9까지의 숫자를 차례로 나타내기 (0) | 2016.02.08 |