GPIO핀은 한번에 한 비트의 데이터만 전송할 수 있으므로 병렬통신으로 8개의 LED를 제어하기 위해서는 8개의 GPIO핀을 사용해야 한다. 병렬통신을 사용하게 되는 경우 연결해야하는 핀의 개수가 많아져서 복잡해지므로 고속의 데이터 전달이 필요한 경우를 제외하고는 많이 사용되지 않는다.
병렬통신에서 8개 비트를 8개의 입출력 핀을 통해 한번에 전송한다면, 직렬(시리얼 통신)에서는 1개의 입출력 핀을 통해 8개 비트를 여덟번에 나누어 전송한다. 시리얼 통신에는 SPI와 I2C와 같은 다양한 방법이 있지만, 이번 장에서는 가장 흔히 사용되는 방법인 UART에 대해서 알아볼 것이다.
9.1 UART
위의 그림과 같이 데이터를 여덟 번에 나누어서 보내는 경우, 받는 쪽에서 얼마나 자주 데이터를 확인할 것인지 알고 있어야 한다. 예를 들어 1초에 한번 0이나 1을 보낸다고 할 때, '01'을 보냈다면 받는 쪽에서 1초에 한번 검사할 경우는 '01'이라는 데이터를 받게 되지만 0.5초에 한번 검사하게 된다면 '0011'이라는 전혀 다른 값을 받게 되기 때문이다.
UART에서 데이터를 주고 받는 속도를 보율(Baud rate)라고 한다. 초기 데이터 통신에서는 회선을 통해 1초동안 전달되는 데이터의 비트 개수를 나타내는 단위로 bps(bits per seconds)를 사용하였다. 하지만 최근 기술 발달로 인해 신호가 한번 변할 때 1비트 이상의 정보를 표현하는게 가능해 짐에 따라 bps는 보율보다 크거나 같은 값을 가지게 되었다.
예를 들어 위의 그림에서 1초에 신호가 네번 변하고 있으므로 보율은 4이지만, 신호가 한번 변할때 2비트의 데이터가 전송되므로 bps는 8이 된다.
또한 송신의 시작과 끝을 알아낼 수 있는 방법도 필요하다. 이를 위해서 UART에서는 0을 시작비트로, 1을 정지비트로 사용한다. UART는 바이트 단위(8비트)의 통신을 하므로 여기에 시작비트와 정지비트를 덧붙혀 총 10비트 데이터를 전송하는 것이 일반적이다.
UART는 전이중 방식(full duplex) 통신으로 송신과 수신을 동시에 진행할 수 있으며, 이를 위하여 2개의 범용 입출력 핀을 필요로 한다. RX 또는 RXD는 데이터 수신을 위해, TX 또는 TXD는 데이터 송신을 위해서 사용되며, 시리얼 통신을 위해서는 RX와 TX를 교차하여 연결해야 한다.
위처럼 컴퓨터의 시리얼 포트는 RS-233C 또는 USB를 사용하는데 이를 UART로의 변환장치가 별도로 필요하다. 즉, 컴퓨터로부터 마이크로컨트롤러에 프로그램을 다운로드 받기 위해서는 ISP 연결이 필요하고, 컴퓨터와 통신을 하기 위해서는 UART 통신을 위한 연결이 별도로 필요하다.
책에서는 UART와 통신을 테스트 하기위해서 PuTTY 프로그램을 사용하였지만, 나는 이 것을 사용하지 않을 것이기 때문에 따로 정리하지는 않을 것이다.
'배움의 즐거움 > 하드웨어' 카테고리의 다른 글
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(8) 아날로그-디지털 변환 (0) | 2020.03.18 |
---|---|
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(6) 디지털 데이터 출력과 입력 (0) | 2020.03.03 |
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(5) - ATmega128 보드 (0) | 2020.03.02 |
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(4) - 마이크로컨트롤러를 위한 전자공학 (0) | 2020.03.01 |
ATmega128로 배우는 마이크로컨트롤러 프로그래밍(3) 아두이노와 마이크로컨트롤러 (0) | 2020.02.29 |