Fogeaters, Light The World.

07

2016-Feb

[AVR] UART 통신

작성자: title: MoonBlonix IP ADRESS: *.148.87.98 조회 수: 1607

라이브러리는 첨부파일로 첨부함.


UART 통신이란 - 비동기직렬통신

주로 컴터 혹은 다른 임베디드 디바이스와 통신을 하는데 사용된다.

RXD, TXD 핀이 사용되는데, 각각 수신과 송신을 의미한다.

AVR의 RXD 핀과 타 디바이스의 TXD핀, AVR의 TXD핀과 타 디바이스의 RXD 핀을 연결해야 한다.

세부적인 이론은 알아서들 찾아보고..


아래 라이브러리를 컴파일하면 정의안됨 에러가 뜨는 사람들도 있을거다.

최근에 ATmega128L과 ATmega128이 통합되며 새로운 ATmega128A가 나왔는데, 이걸 반영하지 못한 까닭에 ATmega128A 칩을 사용하면 에러가 뜬다. 반영되지 않은 일부 칩들이 동일한 에러를 띄울 수 있다.


이럴때는 자신의 칩 기종을 uart.c 파일에서 적절한 위치에 추가해주면 된다.

예를 들어 ATmega128A 를 추가하고 싶으면 ATmega128A와 기존 ATmega128 은 동일한 레지스터 구조이므로


#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__)

 /* ATmega with two USART */

 #define ATMEGA_USART0

 #define ATMEGA_USART1

 #define UART0_RECEIVE_INTERRUPT   USART0_RX_vect

 #define UART1_RECEIVE_INTERRUPT   USART1_RX_vect

 #define UART0_TRANSMIT_INTERRUPT  USART0_UDRE_vect

 #define UART1_TRANSMIT_INTERRUPT  USART1_UDRE_vect

 #define UART0_STATUS   UCSR0A

 #define UART0_CONTROL  UCSR0B

 #define UART0_DATA     UDR0

 #define UART0_UDRIE    UDRIE0

 #define UART1_STATUS   UCSR1A

 #define UART1_CONTROL  UCSR1B

 #define UART1_DATA     UDR1

 #define UART1_UDRIE    UDRIE1


이 부분에 defined(__AVR_ATmega128A__) 를 추가해서


#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega128A__)

 /* ATmega with two USART */

 #define ATMEGA_USART0

 #define ATMEGA_USART1

 #define UART0_RECEIVE_INTERRUPT   USART0_RX_vect

 #define UART1_RECEIVE_INTERRUPT   USART1_RX_vect

 #define UART0_TRANSMIT_INTERRUPT  USART0_UDRE_vect

 #define UART1_TRANSMIT_INTERRUPT  USART1_UDRE_vect

 #define UART0_STATUS   UCSR0A

 #define UART0_CONTROL  UCSR0B

 #define UART0_DATA     UDR0

 #define UART0_UDRIE    UDRIE0

 #define UART1_STATUS   UCSR1A

 #define UART1_CONTROL  UCSR1B

 #define UART1_DATA     UDR1

 #define UART1_UDRIE    UDRIE1


이렇게 만들어주면 제대로 작동된다.



사용전에 이니셜라이즈 작업을 거쳐야 된다.

아래처럼 하면 된다.


#define UART_BAUD_RATE 9600     // 사용할 보더레이트

#define F_CPU 16000000UL           // 사용하는 CPU 클럭


#include "uart.h"


~~~어쩌구 저쩌구 코드를 짠 뒤에


uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU));

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 [Web] 클라우드 IDE + 2 title: MoonBlonix 2017-06-25 15124
32 [AVR] HC_SR04 초음파센서 사용 file title: MoonBlonix 2016-02-13 1667
31 [AVR] 피에조 부저 활용 file + 1 title: MoonBlonix 2016-02-12 1954
30 칼만필터(Kalman Filter) + 2 title: MoonBlonix 2016-02-11 4375
29 low pass filter, high pass filter (저역통과필터, 고역통과필터) file title: MoonBlonix 2016-02-11 1454
28 [AVR] 루프 실행시간 측정 (아두이노의 Millis(), Micros() 분석) title: MoonBlonix 2016-02-09 1454
27 상보필터(Complementary Filter) file title: MoonBlonix 2016-02-09 1737
26 가속도, 자이로 센서에 대해 title: MoonBlonix 2016-02-09 1570
» [AVR] UART 통신 file title: MoonBlonix 2016-02-07 1607
24 C++ 과 C 를 같은 프로젝트에서 사용하기 title: MoonBlonix 2016-02-07 1504
23 라즈베리파이 운영체제에 관하여 title: MoonBlonix 2016-02-05 1457
22 [리눅스] 기본 명령어 title: MoonBlonix 2016-02-05 1630
21 [리눅스] C 언어 개발환경 구축 title: MoonBlonix 2016-02-05 1862
20 라즈베리파이 GPIO 핀 배열 file title: MoonBlonix 2016-02-05 2057
19 C++ 멤버 함수 포인터 title: MoonBlonix 2016-01-23 1773
18 AVR 직접만든 DC모터 라이브러리 (C++ Class) file title: MoonBlonix 2016-01-16 1515
17 [AVR] I/O 포트 메뉴얼 (ATMega128) file title: MoonBlonix 2016-01-16 1590
16 AVR delay 함수 (_delay_ms, _delay_us) title: MoonBlonix 2016-01-15 1640
15 AVR 멀티채널 PWM (타이머 하나로 여러 PWM 구동) title: MoonBlonix 2016-01-15 1649
14 AVR 초패스트 PWM title: MoonBlonix 2016-01-14 1564
13 AVR 타이머 응용 여러 PWM 방식과 예제 file + 1 title: MoonBlonix 2016-01-14 1650