● 직렬 통신과 병렬 통신
직렬 통신이란 송신 측과 수신 측 장비들 간에 하나의 전송 선로만 존재하며 한 순간에 한 비트의 데이터만을 전송할 수 있는 방식이다.
병렬 통신이란 송신 측과 수신 측 장비들 간에 여러 개의 전송 선로가 존재하여 한 순간에 여러 비트의 데이터를 한꺼번에 전송할 수 있는 방식이다. 전송 속도는 직렬 통신에 비해 빠르지만 회선을 많이 사용하기 때문에 비용이 많이 든다.
직렬 통신 | 병렬 통신 |
가격이 저렴하다 | 가격이 비싸다 |
속도가 느리다 | 속도가 빠르다 |
거리에 대한 제한이 조금 여유로움 | 거리에 대한 제한이 있음 |
RS-232 | 대량 데이터 통신 (하드 디스크) |
▣ Synchronous and Asynchronous
● 동기식(Synchronous) 방식
기준 클록인 동기 클록 라인이있고, 데이터 송수신에 필요한 라인이 있다. 즉, 동기 클록에 동기해서 데이터를 순차적으로 송/수신 하는 방법이다. 이는 높은 전송 효율을 필요로 하고 선로에 잡음이 있거나 장거리 전송에 유리하며 대량의 데이터를 고속으로 전송하는 데 사용된다 .
● 비동기식(Asynchronous) 방식
동기가 아니므로 동기 클록 없이 데이터를 송수신하는 방법이다. 동기 클록이 없으면 무엇인가가 동기를 만들어 주어야하는데, 이것을 데이터의 전송 속도가 대신하는데 흔히 보레이트 (Buad rate)라고 부르며 1초당 데이터를 몇 개씩 보내느냐에 따라서 달라진다. 그러면 양쪽에 주고 받는 송수신기는 약속된 속도에 맞추어 데이터를 주고받을 수 있다. 이 모드는 데이터를 보내기 전에 제어 비트가 필요하다. 이 제어 비트는 시작과 끝을 알리는 Start bit와 Stop bit가 있다
동기식 방식[Synchronous] | 비동기식 방식[Asynchronous] |
동기 클럭에 데이터를 송수신 | 동기 클럭 없이 데이터를 송수신 |
높은 전송 효율을 필요 | 보울f레이트(Buad rate)에 의해 송수신 |
선로에 잡음, 장거리 전송에 유리 | 송 · 수신기는 보울레이트에 맞추어 통신 |
대량의 데이터를 고속 전송 | 시작과 끝을 알리는 Start bit와 Stop bit가 필요 |
▣ USART (범용 동기·비동기 송수신 장치)
● ATmega 128 USART 4가지 모드
1. Normal Asynchronous mode
2. Double Speed Asynchronous mode
3. Master Synchronous mode
4. Slave Synchronous mode
● ATmega 128 PORT
● USART Register
ㆍUDRn - USARTn I/O Data Register
ㆍUCSRnA – USART Control and Status Register A
ㆍUCSRnB – USART Control and Status Register B
ㆍUCSRnC – USART Control and Status Register C
ㆍUBRRnL 과 UBRRnH - USART baud rate register
※ n이란? USART0와 USART1에서 0과 1를 의미함 USART0를 사용하면 n=0, USART1이면 n=1
▶ UDRn - USARTn I/O Data Register
ㆍ 데이터 송/수신 시 데이터를 쓰거나 읽는 레지스터
ㆍ 간단하게 데이터를 가지고 있는 레지스터라 생각하면 됨
□ 비트7(RXCn) : 수신 버퍼에 읽혀 지지 않은 수신 문자가 들어 있으면 1로 셋, 버퍼가 비어 있다면 0.
□ 비트6(TCXn) : 송신 시프트 레지스터에 있는 송신 데이터가 모두 송신되고 아직 새로운 데이터가
입력되지 않으면 1.
□ 비트5(UDREn) : UDRn의 송신 버퍼가 비어 있어서 새로운 송신 데이터를 받을 준비가 되어 있으면 1.
□ 비트4(FEn) : 수신된 데이터의 stop 비트에 에러가 있을 경우에 1 에러가 없으면 0.
□ 비트3(DORn) : 수신된 데이터가 읽혀 지지 않은 상태에서 새로운 데이터가 수신될 때 1 아니면 0.
□ 비트2(UPEn) : 수신된 데이터의 패리티 에러가 발생하면 1 아니면 0.
□ 비트1(U2Xn) : 비동기 모드에서 클럭의 분주비를 반으로 낮추어 2배의 전송속도를 갖게 하는 것이다.
[Double Speed Asynchronous mode]
□ 비트0(MPCMn) : 멀티프로세서 통신 모드로 설정.
※ 멀티 프로세서 통신 모드는 1개의 마스터 프로세서가 여러개의 슬레이브 프로세서에게 특정한 어
드레스를 전송함으로써 1개의 슬레이브 만을 지정하여 데이터를 전송하는 동작 모드이다.
▶ UCSRnB – USART Control and Status Register B
□ 비트7(RXCIEn) : 수신완료 인터럽트를 허용하는 비트
□ 비트6(TXCIEn) : 송신완료 인터럽트를 허용하는 비트
□ 비트5(UDRIEn) : 송신 데이터 레지스터 준비 완료 인터럽트를 허용하는 비트
□ 비트4(RXENn) : RX가 동작하도록 허용하는 비트
□ 비트3(TXENn) : TX가 동작하도록 허용하는 비트
□ 비트2(UCSZn2) : UCSZn1~0 비트와 함께 전송 문자의 비트 수를 설정하는데 사용하는 비트
□ 비트1(RXB8n) : 9비트 전송 시 수신된 9번째 비트 저장하는 공간
□ 비트0(TXB8n) 9비트 전송 시 송신하는 9번째 비트 저장하는 공간
▶ UCSRnC – USART Control and Status Register C
□ 비트6(UMSELn) - USART Mode Select Bit
ㆍ1이면 동기전송모드 0이면 비동기 전송모드로 설정한다.
□ 비트5:4(UPMn1:0) - parity mode 비트
ㆍ시리얼 통신의 패리티 모드를 설정한다.
□ 비트3(USBSn) - USART Stop Bit Select 비트
ㆍStop Bit를 설정한다.
□ 비트2:1(UCSZn1:0) - character size
ㆍ전송문자의 데이터 비트수를 설정한다.
□ 비트0(UCPOLn) – Clock Polarity : 동기 전송 모드에서 사용하는 것으로 클럭의 에지를 설정한다
▶ UBRRnH, UBRRnL - USART baud rate register
ㆍ 전송 속도를 의미하는 보율(baud rate)을 설정한다.
□ 보율(baud rate) 계산
□ 에러(Error) 계산
□ UBRR 계산
ㆍ Baud Rate - 9600bps
ㆍ fosc - 16MHz
ㆍ 방식 - 비동기 [Asynchronous ]
ㆍ 정확히 나누어 떨어지지 않아 0.2%의 Error를 보임
▶ USART 통신 확인 프로그램
※ ComMaster 는 로보틱스 홈페이지에 있음.
● 간단하게 USART 코딩 하기
▶ 9600bps의 전송속도를 가지는 비동기[asynchronous] USART 통신을 하여 'USART'라는 문자를반복적으로 출력하여라.
□ 코딩 순서
1. 레지스터 설정하기
UCSR0A UBRR0H
UCSR0B UBRR0L
UCSR0C
2. 송신 함수 정의하기
void USART_TX(unsigned char data)
3. 메인 함수에서 호출하기
아트메가128 ( 직렬통신 / 실습문제 / 예제 ) [20120607] (0) | 2016.09.30 |
---|---|
아트메가128 (DK-128 / 직렬 통신 / 양방향 직렬 통신 ) [20120605] (2) | 2016.09.30 |
아트메가128 ( PC기반 직렬통신 기초 ) [20120531] (0) | 2016.09.30 |
아트메가128 (EEPROM제어) [20120530] (0) | 2016.09.30 |
아트메가128 ( 타이머카운터 / rand활용 / 별로 엑스그리기 ) [20120524] (0) | 2016.09.29 |