학부때 "전자공학개론" 이라는 과목을 들었다. 기계공학을 전공했던 터라 머가 먼지 통.. 학점도 바닥이었던걸로 기억한다. 지금 생각해 보면 제일 중요한 개념을 터득하지 못하고 강의에 임했던 탓이다.
"파워" vs "시그널"
고등학교때 까지는 전기 하면 주로 "파워"만 다루었던걸로 기억된다. 불을 킨다거나 열을 낸다거나.. 전원과 저항이 전부인 회로... 그런데 갑자기 트랜지스터가 나온다. 아니 저걸 증폭해서 뭘 하자는거지?? 고백하면 그 땐 그랬다.. 지금와 생각하면 정말 한심 스럽지만.. 다행히 나이를 먹어서인지 좋은 인연때문인지 그 무엇이건 간에 파워와 시그널을 지금은 구별하게 되었다.
다시 아누이노로 돌아오자.. 우선 몸풀기로 버튼을 달아 피아노를 친다. 급하신 분들을위해 우선 최종 완성품 그림부터..
윈도우에서는 가로인데 업로드 하니 세로그림 |
버튼 8개와 스피커 1개.. 저걸로 도레미파솔라시도를 칠려고하다. 소스는 머 볼것도 없이 간단하다.
tone (2, 440) ;
이리하면 2번핀으로 연결된 출력단자에 440Hz 소리를 내준다. 참고로 각음에 대한 주파수는
도 * C: 262Hz
레 * D: 294Hz
미 * E: 330Hz
파 * F: 349Hz
솔 * G: 392Hz
라 * A: 440Hz
시 * B: 495Hz
도 * C: 524Hz
레 * D: 294Hz
미 * E: 330Hz
파 * F: 349Hz
솔 * G: 392Hz
라 * A: 440Hz
시 * B: 495Hz
도 * C: 524Hz
이리된다. 그래서 대충 버튼 눌러지면 소리내는 로직은..
if (digitalRead(버튼 핀번호1)) tone(2,주파수1) ;
elseif (digitalRead(버튼 핀번호2)) tone(2,주파수2) ;
.....
else noTone(2) ;
elseif (digitalRead(버튼 핀번호2)) tone(2,주파수2) ;
.....
else noTone(2) ;
....
....
이렇게 8개를 매칭하고 돌리면 될줄 알았는데.......
웬걸.. 이상하게 작동 한다. 도를 눌렀는데 미가 나오고.. 머 이런식이다..
스케치 (아두이노 프로그램을 이리 부른다. 사실은 C 코드다) 는 생략. 위에 충분히 설명이 되었다고 본다. 너무 간단하기 때문에..
풀업, 풀다운 저항
저항이면 저항이지 풀업은 머고 풀다운은 먼가?
(저 자신도 이걸 만들면서 터득한 내용입니다. 사실 대부분의 내용이 그렇습니다.)
누르면 불이 들어오고 끄면 불도 꺼져야 하는게 스위치가 아니더냐?
맞는 말이다. 그러나 여기서 간과한게 있다. 지금 파워를 다루는게 아니고 "시그널"을 다루는 것이다.
스위치를 누르면 불이 들어오는게 분명히 맞다.
근데 디지털 회로에서는 스위치를 껐을때 불이 꺼지는것이 아니라
"끌지 말지 나도 몰라" 라고 보는게 정답이다.
즉 0인지 1인지 구별할 수 없는 상태가 되는 것이다. 그런 상황을 피하기 위해 저항을 사용한다. 풀업저항 소자가 따로 있는게 아니고 그런 용도에 사용되는 방법의 이름을 풀업, 풀다운이라고 부른다. 이해를 돕기 위해 그림을 보자..
왼쪽 그림에서 스위치가 닫히면 당연히 A에 5V 가 걸리지만 열렸을 때는 둥둥 떠다니는 상태가 된다. 한마디로 판독 불가.. 반면 오른쪽 회로에서는 닫히면 A에 5 열리면 0V 가 확실히 걸리게 된다. (위 그림은 그라운드쪽에 저항이 연결되었으므로 풀다운 저항이라 부름..)
이렇게 회로를 고치고 나서 피아노를 두드려 본다.
원하는 결과가 나온다.
------------------------ 펌! -------------------------------------------------------------------------------------------------------
--------------------------반가산기 회로------------------ 책보자 ------------- 회로구성은 ---------------------------------------------------