가끔 질문이 올라 온 내용 중 하나인, rs-232c 포트를 atmega128에서 지원하는 2개 이상 사용하기에 대한 답을 한번 정리 해 봤습니다.

 

RS-232 통신 포트의 수를 늘리고 싶다면?
1. MCU 를 바꾼다.
2. Software 적인 Serial 통신을 구현한다.
3. TL16C554 같은 Full duplex, buffer 를 지원하는 전용의 IC를 사용한다.
4. I2C/SPI  RS-232c 를 구현하던가, 아니면 IC를 구해 본다.
5. MAX399 같은 MUX를 사용한다.

 

1. atmega 128의 상위 모델 중 atmega640, atmega1280, atmeg2560등은 4개의 serial uart(rs-232c)를 가지고 있다.

    단 MCU가 100핀 짜리라는 단점이 있다.  현재 실컷 128 등으로 작업을 한 상태라면 처음부터 다시 시작해야 한다는 슬픔이 있다.

 

2. GPIO를 이용하여 소프트웨어 적으로 rs-232 통신을 구현할 수 있다.

관련된 자료로는 Procyon Library에 포함되어 있는 uartsw.c 또는 uartsw2.c  를 참고 하기 바란다.  또한 이 방식은 comfile社에서 판매하고 있는 PIC basic 제품군에서도 사용하고 있는 방법이다. 하지만 이것 또한 인터럽트 방식으로 사용할 수 없으며, 한 개의 byte를 받는 과정에서도 데이터를 정확히 받을 수 있다는 보장이 없다. 예전에 Serial Pic’n 이라는 PIC mcu의 책에서도 이 방법에 대한 설명과 어셈블리 소스가 있었다. 책을 팔고나니 볼 일이 생기는 것 같다.


 

3. TL16C554는 4개까지 시리얼 포트를 확장할 수 있으며, 내장 FIFO(16byte)와 함께 Flow Control 까지 가능하다.

이 IC를 사용하는 것이 가장 정석적인 방법이지만, 사용방법이 쉽지는 않다. 예전에 도스 시절에 직접 RS-232c 포트 프로그램을 작성 하던 때가 생각이 날 정도다. 또한 address mapping방식으로 이 IC를 연결해야 한다. 그래서 외부 주변장치들과 mcu와의 연결을 GPIO를 이용하여 연결했다면, 설계를 다 바꿔야 할 지도 모른다.  이런 용도의 IC들은 uart의 개수, FIFO의 크기 등에 따라서 다양한 모델이 있으므로, www.ti.com  에서 “TI Home > Interface > UARTs “ 에서 찾아 보기 바란다.

또한, EXAR(www.exar.com)에서도 이런 기능의 IC를 판매하고 있다. 전자기술 2004년 8월호에 이 EXAR 의 ST16C2550을 사용하여 설계하고 프로그래밍을 하는 기법에 대한 기사가 있다.

 

4. I2C/SPI <=> RS-232 ic 를 사용한다.
이 방식은 예전에 본인도 한번 구상을 했었다. AVR, PIC을 이용해서 프로그램을 잘 짜면 되지 않을까? 라고 생각을 했는데,

하지만 AVR을 사용할 경우 한가지의 문제가 있는데 하드웨어에 구현한 FIFO 가 없어서 full duplex가 가능할 것 같지 않다는 것이다. EXAR社의  XR20M1170 라는 제품은 하드웨어에 rs-232용의  64byte 양방향 FIFO가 있는데,

1) 부품을 구할 수 있을 지 ? 2) 동작 전압이 1.62~3.3V 라서 5V용의 MCU와의 연결을 위해서는 각 신호 선들의 level을 바꿔주어야 하는 단점이 있다.

 

5. Mux 를 사용
예) MAX399 :: http://www.fh-augsburg.de/~hhoegl/proj/rs232-mux/300.html 
 


이 방법은 현재 선택되어 있지 않은 포트에서 데이터가 들어 올 경우, 데이터를 잃어 버릴 수 있다.  하지만, rs-232로 데이터를 내보내기만 할 경우에는 유용하게 사용할 수 있다.

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,