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는 통신 속도와 관련된 레지스터입니다.
공식은 위와 같습니다.
아래의 테이블은 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의 값을 읽으면 됩니다.
'atmega328(아두이노 미니 이용)' 카테고리의 다른 글
스터디 상생플러스 4 - 1 (ADC 이론) (0) | 2020.04.22 |
---|---|
스터디 상생플러스 3 - 1 (PWM 이론) (0) | 2020.04.20 |
스터디 상생플러스 2 - 3 (Atmega328 I/O제어 실습) (1) | 2020.04.13 |
스터디 상생플러스 2 - 2 (Atmega328 I/O제어 이론) (0) | 2020.04.13 |
스터디 상생플러스 2 - 1 (Atmega328 I/O 방향 설정 이론) (0) | 2020.04.13 |