아트메가/이론

아트메가128 usart통신하기(1)

원원 2017. 7. 3. 14:55



안녕하세요. 직렬통신인 usart통신을 해보겠습니다.


통신을 하는 이유는 장치간에 서로 통신을 하려고 하는건데요. usart는 유선,무선으로 사용할수 있습니다.

유선을 사용하면 CP2102모듈을 사용하여 컴퓨터 터미널프로그램으로 아두이노의 시리얼모니터처럼 값을 확인할수있고

무선을 사용하면 블루투스모듈로 앱으로  AVR를 제어할수 있습니다.




-USART(Universal Synchoronous and Asynchronous serial Receiver and Transmitter)의 특징

* 전이중 통신 가능. (송신,수신 동시에가능)

* 비동기 전송 모드 or 동기 전송모드 가능

* 마스터 모드 or 슬레이브 모드 가능

* 보레이트 발생기 내장(높은 정밀도)

* 패리티 체크 기능

-> USART는 전이중통신이 가능합니다.(제일 중요함) 비동기 모드를 사용하는 경우가 많고 그 외의 기능들은 딱히 안써도 됩니다.(이 글에서는 기본으로 사용합니다)



-USART 블럭다이아그램

세 파트, Clock Generator , Transmitter,Receiver로 나눠져 있는것을 볼 수 있습니다.

Clock Generator부분에는 일반 비동기 모드, 2배속 비동기 모드, 마스터 동기모드, 슬레이브 동기 모드가 있습니다.

Transmitter부분에는 데이터를 보낼 UDR레지스터,쉬프트 레지스터, 패리티 발생기로 되있습니다.

Receiver부분에서는 데이터를 받을 UDR레지스터, 쉬프트 레지스터, 패리티 검사기, 데이터 복구기등이 있습니다.



- USART 레지스터



1.UDRn

송신을 위해 송신 레지스터 TXB와 수신을 위해 수신 레지스터TXB는 하드웨어적으로는 서로 다른 레지스터지만 동일한 I/O주소를 가지게 됩니다.

만약 송신을 위해 UDR에 저장하면 TXB에 저장되고, 수신을 위해 UDR에 저장하면 RXB에 저장됩니다.





2.UCSRnA


7번 비트 -  수신 버퍼에 읽지 않은 데이터가 있으면 1로 됩니다. 수신 데이터를 읽으면 0으로 되는 상태플래그이다. 이 비트가 1이면 수신 완료 인터럽트를                발생합니다.

6번 비트 - 송신 버퍼가 비면 1이 이됩니다. 이 비트가 1이면 송신완료 인터럽트를 발생하고 인터럽트를 처리후 0이 됩니다.

5번 비트 - UDRn이 비어있어서 새로운 데이터를 받을수 있게되면 1이 되는 상태플래그입니다. 이 비트가 1이 되면 송신가능상태로 송신데이터 레지스터               준비완료 인터럽트를 발생합니다.

4번 비트 - 프레임 에러 비트

3번 비트 - 오버런 에러 비트

2번 비트 - 페리티 에러 비트

1번 비트 - 클럭 관련 비트

0번 비트 - 통신모드 설정 비트


->UCSRnA는 플래그비트와 기타기능 설정비트로 이루어져 있습니다. 그래서 기본기능만 사용할거면 0x00으로 설정하면 됩니다.





3.UCSRnB

7번 비트 -  수신완료 인터럽트 허용비트

6번 비트 -  송신완료 인터럽트 허용비트

5번 비트 -  송신데이터 레지스터 준비완료 인터럽트 허용비트

4번 비트 -  수신 허용 비트(수신기능 사용하려면 꼭 1)

3번 비트 -  송신 허용 비트(송신기능 사용하려면 꼭 1)

2번 비트 -  UCSRnC의 1,2번 비트와 함께 전송문자길이 설정비트. (일반적으로 8비트로사용)

1번 비트 -  멀티프로세서 통신 관련비트

0번 비트 -  멀티프로세서 통신 관련비트 


->UCSRnB는 일반적으로 7,6,4,3비트만 1로 설정해주면 됩니다.





4.UCSRnC


7번 비트 -   X

6번 비트 -  비동기 or 동기모드설정비트

5번 비트 -  패리티 모드 설정비트

4번 비트 -  패리티 모드 설정비트

3번 비트 -  스톱비트 수 결정 비트

2번 비트 -  통신 데이터 길이 설정 비트

1번 비트 -  통신 데이터 길이 설정 비트

0번 비트 -  동기식 모드일때 설정하는 비트


->UCSRnC는 1,2번비트만 1로 해줍니다. 그러면 통신 데이터 길이가 8비트설정이 됩니다.





5. UBRRnL,UBRRnH 보레이트 레지스터

보레이트를 설정하는 레지스터인데요. 16비트중 12비트만 사용합니다.



16Mhz에 9600bps를 주로사용하므로


UBRR0H=0;

UBRR0L=103;

이렇게 설정해주면 됩니다.



다음 글에서는 실제로 usart를 사용하여

(앱 <-> AVR ), (AVR  <-> 컴퓨터)를 해보겠습니다.


아트메가128 usart통신하기(2) 블루투스

아트메가128 usart통신하기(3) 컴퓨터