컴퓨터공부

UART 통신

achivenKakao 2007. 3. 23. 18:39

[AVR Essay 14] UART 통신 1


요놈은 제목 짓기가 조금 애매 했다.


UART라고 부르기도 하고 USART라고 부르기도 한다.


RS-232C라고 부르는 사람도 있다.


부르는 이름은 약간씩 다르고 그 의미도 다르지만


의도하는 것은 동일하다고 생각한다.


바로 PC와 직접 연결 가능한 시리얼 통신 방법이라는 것 이다.


사실 시리얼 통신에 대해서는 나중에 TWI(I2C)와 SPI 방식과 묶어서 할려고 했다.


그러나 사실 UART는 최종 결과물이 될 수도 있지만


사실 개발 단계에서는 JTAG와 같은 고가의 디버깅 툴을 사용하지 않는 방법 중에서는


가장 효율적인 디버깅 도구라 할 수 있다.


앞서서 다루었던 LED, 7-Segment, LCD는 정보량에 제한이 있고 많은 포트를 요구한다.


개발 당시에 얼마나 포트를 사용 할 지는 알 수 없지만


한 세트의 포트를 모두 디버깅에 할당하는 것은 분명 비 효율적인 일이다.


그러나 UART 통신을 이용하면 딸랑 선 두가닥, (심지어는 TX 한가닥)만 있으면


거의 무한한 정보를 디스플레이 할 수 있다.



일단 UART의 의미를 살펴 보자. 아래는 USART의 의미이다.


Universal Synchronous and Asynchronous Receiver and Transmitter


여기서 Synchronous and를 제거하면 UART의 의미이다.


즉, 동기/비동기의 차이인데 이는 디바이스간에 클럭을 공유하느냐 하지 않느냐의 의미이다.


USART와 관련한 AVR의 포트는 TXD, RXD, XCK이다.


여기서 XCK를 사용하지 않으면 사실상 UART이고, 나는 여태껏 XCK를 사용해 본적은 없다.


(UART의 일반적인 주 목적이 PC와 연결이기 때문에 XCK는 필요가 없다.)



그리고 RS-232C는 무엇일까? 나도 궁금했다.


여기 저기 주워 모아본 정보에 의하면 UART는 통신 스펙을 정의 한 것이고


RS-232C는 데이터 전송 방법이다.


AVR간에서 UART 통신을 할 경우에는 그냥 UART 포트끼리 붙여 주면 된다.


이는 두 신호가 동일한 TTL 레벨을 사용하기 때문이다.


(즉 High는 5V, Low는 0V)


그러나 AVR과 PC간 통신을 할 경우 문제가 된다.


이는 PC는 EIA에서 규정한 RS-232C 규격을 사용하기 때문이다.


EIA에서는 레벨은 MARK와 SPACE로 구분한다.


의미상으로는 MARK는 High, SPACE는 Low와 대응한다.


그러나 MARK의 전압은 -2 ~ -12V, SPACE의 전압은 +2 ~ +12V이다.


따라서 서로 신호 레벨이 다르기 때문에 이를 매개해 주는 것이 필요하다.


바로 MAX232라는 칩이다.

사용자 삽입 이미지

위는 MAX232의 내부와 간단한 회로 연결 방법을 보여 주고 있다.


사실 칩에다가 커패시터 네개만 부착하면 만사 OK이다.


이 칩은 두개의 UART 장치를 지원하기 때문에 ATmega 128과 같이


UART가 두개 있는 경우에도 칩 하나만 있으면 된다.


그리고 위 그림에서는 10uF 커패시터를 사용하는데 이는 모델마다 다르다.


MAX232xxx와 같이 세부 모델이 있는데 이는 데이터 시트를 참고하도록 하라.


 

사용자 삽입 이미지

위와 같이 회로를 꾸밀 수도 있다. (여기는 커패시터를 1uF을 쓰고 있다.)


사실 처음 것과 별반 차이는 없는데 LED가 추가되어 있다.


나도 이 회로를 사용하는데 LED가 있어서 데이터 전송 상태를 눈으로 확인 할 수 있어서 좋다.


그리고 이 회로를 만들기 싫으면 오천원 정도에 키트나 완제품을 구입 가능하다.



우리의 목적은 AVR과 PC를 연결 하는 것이므로 PC의 인터페이스에 대해서 잠시 알아 보자.


PC의 시리얼 포트는 9핀과 25핀이 있는데, 내가 초등학교 다닐 10년 전만 해도 25핀이 대세였는데,


최근 보이는 것은 죄다 9핀 이다. (사실 USB에 밀려서 시리얼 포트를 보기가 어려운게 현실이다.)


그래서 여기에서는 9핀만 다루기로 하자.

사용자 삽입 이미지


각 핀의 내역은 다음과 같다.

 

TXD

Transmit Data

RXD

Receive Data

GND

Ground

RTS

Ready To Send

CTS

Clear To Send

DTR

Data Terminal Ready

DSR

Data Set Ready

DCD

Data Carrier Detect

RI

Ring Indicator


여기서 위 표의 파란색 칠해 진 부분만 우리는 관심을 주면 된다.


(나머지는 요즘은 거의 보기 힘든 모뎀이라는 장치를 쓰기위해 존재할 뿐이다.)


TXD, RXD, GND인데 GND는 당연히 두 장비간의 전압 레벨을 맞추기 위해서 연결되어야 하는 것이다.


이거는 상당히 헤깔릴 수 있는 부분인데...


장비 A와 장비 B가 있을때 어찌 연결 해야 할까?


간단하게 생각하면 된다.


장비 A                      장비 B

TXD ---------------- RXD

RXD ---------------- TXD

GND ---------------- GND


길게 설명 하지는 않겠다.



PC에서 쉽게 구할 수 있는 시리얼 통신 프로그램 (흔히 터미널이라 한다.)으로는


윈도우즈에 기본적으로 있는 하이퍼 터미널이 있다.


개인적으로는 하이퍼 터미널을 잘 사용하지 않는다.


우선 설정이 불편하고, 개발 단계에서는 데이터를 헥사 코드로 보는 기능이 필요한데


하이퍼 터미널을 지원하지 않는다.


그래서 가장 쉽게 구할 수 있으므로 하이퍼 터미널 설정 방법에 대해서 간단히 알아 보자.


하이퍼 터미널은 시작 -> 보조 프로그램 -> 통신 -> 하이퍼터미널에 있다.


프로그램을 실행하면 다음과 같은 창이 뜬다.

사용자 삽입 이미지


대충 아무꺼나 이름 지어주면 된다.


나는 "시리얼 통신"이라 이름 짓겠다.

사용자 삽입 이미지


COMx라고 포트가 나오고 TCP/IP도 있을 것이다.


나는 노트북이라서 COM1 밖에 없지만 일반 데스크탑이면 COM1, COM2가 있을 것이고


USB-Serial 변환기를 사용한다면 COM7과 같은 것들이 있을 수도 있다.


이거는 자기 환경에 맞는 것을 선택하면 된다. (TCP/IP는 절대 아니다.)

사용자 삽입 이미지


통신 설정을 하는 부분이다. 있단 내 강의를 따라오고 있다면 위와 같이 설정해라.


간단히 설명을 하면 9600은 통신 속도이다.

(다른 속도도 많지만 나는 9600bps를 가장 좋아한다.)


데이터 비트값 8은 한번에 8비트 단위로 데이터를 전송하겠다는 의미이고


나머지도 값들도 나름 의미가 있지만 거의 표준적으로 위 설정과 같이 사용한다.


자세한 내용은 아래 그림을 참고하고 인터넷에서 검색을 해 봐라.



사용자 삽입 이미지




여기까지 했으면 하이퍼 터미널 창이 수행 될 것이다.


그러나 조금 더 손 봐 줘야 한다. (꼭 필요 한 것은 아니다. 다만 편리를 위해서...)


사용자 삽입 이미지


 

사용자 삽입 이미지
 
여기서 ASCII 설정 (A)... 를 누른다.


 

사용자 삽입 이미지
 
여기서 보통 입력된 문자를 터미널 창에 표시 기능이 꺼져 있는데 이를 켜 준다.
 
 
일단 여기까지 하면 하이퍼 터미널 설정은 완료 한 것이다.
 
그리고 오늘 이야기도 여기서 마무리 지을 생각이다.
 
 
다음에는 ATmega 8535의 UART 관련 레지스터와 간단한 테스트 프로그램을 짜 보도록 하겠다.
 
 
 
 
그리고 이 블로그에 옛날 옛적... 내가 옆의 사진과 비슷하게 생겼을때 수업 시간에 발표 했던 자료가 있는데
 
지금 참고 할려고 읽어보니 엉터리가 너무 많았다. 혹 그거 봤던 분들께는 죄송하게 생각한다.
 
(사실 지금 쓴 이것도 좀더 나중에 보면 엉터리 일수도 있다. 주의해서 보도록...
 
그래서 제목을 강좌가 아닌 에세이다... 일종의 책임 회피용...)

출처 : http://blog.naver.com/ds5pnz?Redirect=Log&logNo=140033410489