지금까지 AVR의 PORT 레지스터를 제어하여 LED에 불이 들어오게 하거나, 푸쉬버튼 스위치의 ON/OFF 상태를 모니터링 하는 기능을 만들어 보았다. LED를 제어하기 위한 PORT I/O핀은 출력으로만 동작될 수 있도록 설정을 하였고, 푸쉬버튼을 감지하기 위하여 버튼과 연결된 I/O 핀을 입력으로만 동작되도록 설정해 두었다. 이번 프로젝트는 DS18B20이라는 디지털 온도 센서를 이용하여 현재 온도를 측정한 후 LED를 제어하여 측정된 온도값을 출력하는 프로젝트를 진행해 볼 것이다. DS18B20은 하나의 신호선(1-Wire)을 이용하여 온도값을 읽어와야 하는 구조를 가지고 있으므로 AVR의 PORT I/O 핀을 입력과 출력을 번갈아 가며 사용하여야 한다. 따라서 이번 프로젝트는 I/O핀을 입,출력..
앞의 글 푸쉬 버튼과 LED제어 연동 1에서는 PB0에 연결되어 있는 푸쉬버튼을 누르면 다음 LED 패턴을 출력하는 방법에 대해서 설명하였다. 그러나 조금 아쉬운 느낌이 든다. 하나의 패턴을 출력한 후 푸쉬버튼을 누를때까지 아무런 동작을 하지 않고 프로그램이 멈추어 있는것처럼 보이기 때문이다. 그래서 이번글에서는 하나의 LED패턴을 무한히 반복 수행하다가 푸쉬버튼이 눌러지는 시점에 그 다음 LED패턴으로 넘어가는 기능을 구현해 보겠다. 하드웨어 구성은 앞의 글과 동일하므로 회로 수정없이 프로그램만 수정하면 된다. 이번 프로젝트의 핵심은 어느 한 LED 패턴안에서 한동작을 수행한 후 푸쉬버튼이 눌리워 졌는지 항상 모니터링을 하여야 한다. 그래야 버튼이 눌러졌을 때 즉시 다음 LED 패턴으로 넘어갈 수 있기..
푸쉬 버튼을 한 번 누를때마다 앞의 글 LED 제어 - 부록에서 만들었던 LED 패턴을 변경 시키는 프로젝트를 구현하여 보도록 하겠다. 필요한 회로는 앞의 글과 같고 단지 PB0에 푸쉬버튼을 연결하면 된다. 아래 회로도를 참고하여 보드에 회로를 구성한다. 역시 회로가 잘 구성되어 있는지 확인하기 위하여 다음과 같은 코드를 작성한다. 스위치 S1을 누를때 모든 LED에 불이 켜지고, 스위치를 누르지 않을 때는 모든 LED의 불이 꺼지는 코드이다. #include #define F_CPU 1000000 #include #define PORTB_REG 0x23 #define PORTD_REG 0x29 struct port { uint8_t pin; uint8_t ddr; uint8_t port; }; vola..