본문 바로가기

스터디 상생플러스 5 - 1 (USRAT 통신)

반응형

USRAT 통신은 블루투스 모듈을 사용하기 위한 필수 통신 기법입니다.

또한 아두이노는 Serial이라는 클레스가 있고, 이는 USART통신을 가능하게 해줍니다.

 

저희는 블루투스 모듈을 사용할 것이기 때문에

USART 통신을 꼭 다뤄야만합니다.

 

 

통신에 필요한 것은 통신 속도가 있습니다.

통신 속도의 단위는 baud rate 즉, 초당 몇 비트를 송수신하는 가에 관한 단위입니다.(bit/s와 동일)

 

 

아두이노에는 UASRT통신과 관련하여 3개의 레지스터가 있습니다.

UCSR0A, UCSR0B, UBRR0, UDR0

UCSR0A

번호 7 6 5 4 3 2 1 0
이름 RXC0 TXC0 UDRE0 FE0 DOR0 UPE0 U2X MPCM0
초기값 0 0 1 0 0 0 0 0

여기서 우리가 봐야할 것은 UDR0만 있습니다.

UDRE0는 데이터 송수신 완료와 관련된 비트로,

UDRE0가 1이면 데이터를 송수신할 수 있는 상태이고,

0이면 데이터를 송수신하지 못합니다.

 

즉 우리는 UDRE0가 1이 될 때까지 기다린 후, 어떤 동작을 수행해야한다는 것이죠

while( ! (UCSR0A & 0b00100000));

더보기

RXC0, TXC0는 수신/송신이 완료되면 0으로 변합니다. UDRE0의 기능을 나누 것이라고 할 수 있겠네요.

FE0는 Frame오류가 발생했을 때 1로 변한다고합니다.(잘 모름)

DOR0는 입력받은 데이터가 설정한 데이터 크기보다 클 때 1로 바뀝니다. 즉 통신 오류를 말하는 거네요.

UPE0는 페리티 비트에 이상이 있을 때 1로 변합니다. 페리티 비트는 오류 검출용이니, UPE0가 1이면 오류가 발생했다는 뜻네요.

U2X0는 통신 속도를 2배로 올려주는 비트입니다. 1이면 2배, 0이면 기존 속도입니다.

MPCM0는 잘 모르겠네요...

UCSR0B

번호 7 6 5 4 3 2 1 0
이름 RXCIE0 TXCIE0 UDRIE0 RXEN0 TXEN0 UCSZ01 RXB80 TXB80
초기값 0 0 0 0 0 0 0 0

여기서 봐야할 것은 RXEN0, TXEN0입니다.

RXEN0는 수신 기능을 활성화해주는 비트입니다.(1이면 활성화, 0이면 비활성화)

TXEN0는 송신 기능을 활성화해주는 비트입니다.(1이면 활성화, 0이면 비활성화)

더보기

RXCIE0는 수신 완료 인터럽트입니다. 수신이 완료되면 인터럽트를 발생시키도록합니다.

TXCIE0는 송신 완료 인터럽트입니다. 송신이 완료되면 인터럽트를 발생시키도록합니다.

UDRIE0는 송수신 완료 인터럽트입니다. 송수신이 완되면 인터럽트를 발생시키도로합니다.

UCSZ02는 송수신 데이터 크기와 관련된 비트입니다.

RXB80는 모르겠습니다.

TXB80도 모르겠습니다.

 

 

UBRR0

UBRR0는 통신 속도와 관련된 레지스터입니다.

fosc = 16,000,000

공식은 위와 같습니다.

아래의 테이블은 baud rate별 UDR0를 미리 계산한 값들입니다.

baud rate UDR0
2400 416
4800 207
9600 103
14.4k 68
19.2k 51
28.8 34
38.4k 25
57.6k 16
76.8k 12
115.2k 8
230.4k 3
250k 3
0.5M 1
1M 0

UDR0

UDR0는 송수신할 데이터가 저장될 레지스터입니다.

즉, 송신하고싶다면 UDR0에 값을 대입하고

수신하고싶다면 UDR0의 값을 읽으면 됩니다.

반응형