', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 충전식 스마트 글루건 #4 - 디스플레이 표시 구현 :: MakerLee's Workspace
728x90

회로제작과 프로그래밍을 번갈아가면서 하다보니 혼란이 오네요.

정리할겸 조금 자세히 써봅니다



첫번째 74HC595가 글자 및 LED 표시를, 두번째 74HC595가 자리수 담당을 합니다.

Common Anode라서 표시해야 하는 위치의 세그먼트가 0이 됩니다. 




A3~A9까지의 LED와 B,C,D,E 4자리의 숫자 표시를 합니다.

F0,F14,A3 LED는 사용하지 않습니다. 

알파벳 핀이 공통 Anode 입니다. 







전체 연결은 다음과 같습니다. 






숫자가 한번에 표시되는게 아니고 각 자리의 신호가 순차적으로 들어가게 됩니다.

이를 위해서 숫자를 분리해서 표시하는 스케치를 간단하게 짜봤습니다. 






그랬더니 이상하게 나오는군요. 1000이 999로, 100이 99로 나옵니다.

for 문에서 증가하는 i를 이용해서 스케치 길이를 줄이려 했습니다.

pow() 함수에서 내부적으로 처리할 때 float로 처리되는건지 엉뚱한 결과값이 나오네요







수정했습니다. 정상적으로 나오는군요. 








이후 수정된 스케치를 아두이노에 업로드했더니 이상하게 나옵니다. 







원인을 찾는 중입니다. 





저는 74HC595를 연결할 때 첫번째 74HC595가 숫자를 담당하고 두번째가 자리수를 담당하도록 했습니다. 

shiftOut(dataPin, clockPin, LSBFIRST, A);  

shiftOut(dataPin, clockPin, LSBFIRST, A);  

그래서 위의 구문에서도 첫번째 ShiftOut이 숫자, 두번째가 자리수일줄 알았더니 아니더군요.

LSBFIRST / MSBFIRST 와 상관없이 첫번째 ShiftOut이 자리수를 표시하고 두번째가 숫자를 표시합니다.




수정이후 숫자가 제대로 표시됩니다. 

보기엔 동시에 전부 들어오는 것 같아 보이지만 실제로는 왼쪽부터 순서대로 빠르게 깜박이고 있는 상태입니다.








마지막으로 디스플레이될 LED의 데이터 처리를 합니다. 

왼쪽3개의 LED는 배터리 잔량표시용으로 오른쪽은 히터의 상태를 나타낼 예정입니다.

배터리 관련 변수나 히터 상태의 변수가 따로 쓰일 테니 스케치에선 따로 취급됩니다.

하지만 디스플레이될때는 하나의 Anode로 묶인 LED들이라 출력신호를 묶어야 합니다. 


별거 없고 그냥 논리합(and)을 하면 됩니다. 

SignalLED = BatLevel[i]&HeatLevel[j]; 

같은 식으로 사용하게 되겠죠







스케치를 올려보니 이제 LED까지 잘 나옵니다. 

왼쪽 끝의 LED들은 사용하지 않을 예정입니다. 

글루건인데 정보가 그리 많을 필요가 없죠






눈으로는 잘 구별가지 않지만 흔들어보면 이렇게 깜박임이 발생하는게 보입니다. 



728x90

+ Recent posts