ATmega128A_UART통신

공이지·2024년 9월 11일

UART통신이란?

  • 먼저 통신에는 직렬병렬 통신으로 크게 나뉜다.

  • 직렬통신은 보통 시리얼 통신이라하며, 선이 하나라 구조적으로 간다하며, 양단간 송수신 거리가 멀어도 큰 제한이 없다.

  • 병렬통신은 보통 버스라고 부르며, 데이터 버스, 주소버스 등 다양하게 활용됩니다. 라인이 여러개이며, 데이터를 동시에 송수신 할 수 있는 장점이 있습니다. 하지만 거리가 멀어지면 간섭이 많이 생겨 통신 거리가 짧아질 수 도 있습니다. 또한 선이 많이 필요하기에 비용 많이 든다는 단점이 있습니다.

이 시리얼 통신에 가장 기본이 USARTUART입니다.

USART? UART?

이 둘의 차이는 동기비동기의 차이입니다. 이 동기의 차이는 클럭신호이며, 이는 외부 신호로서 처리 될 수도 있으며 내부적으로 펄스를 발생시킬 수도 있습니다.

  • USART : 데이터 동기화를 위해 별도의 클록 신호를 전송합니다. 데이터 구분할 필요가 없이 클락의 유무만 체크하면 되므로 데이터 송수신 효율이 높습니다.
    즉! 동기식으로 작동할 때 더 높은 전송 속도를 허용합니다.
  • UART : 클락이 필요하기에 데이터와 Timer가 모두 필요합니다. 또한 데이터를 보내주는 속도 또한 고정합니다.따라서 데이터를 일반적으로 블록 형태로 전송하며, 115KB보다 빠르다는 장점이 있습니다.
  • UART의 데이터 프레임 포맷입니다. 시작비트는 항상 0, 종료 비트는 항상 1 임을 알 수 있습니다. 이는 8비트 데이터의 생김새와 상관 없이 맨 앞,뒤의 펄스만을 보고서 데이터의 송수신을 관리하는 방식임을 알 수 있습니다.
  • 또한 아래 그림과 같이 TX(송신), RX(수신)의 라인이 서로 그림처럼 맞물려야 올바른 통신이 가능합니다.(TX에는 RX가 연결, RX에는 TX가 연결!!)

실습내용

위 내용처럼 UART통신을 프로토콜을 위해서 각 레지스터들을 초기화, 송신, 수신 함수를 선언하였습니다.

  • 초기화 함수에서는 Baud Rate~~~, 우리가 사용할 BPS를 설정해줍니다 이때 아래 사진을 참고합니다. ATmega128A는 16Mhz 클록을 사용하므로 다음처럼 UBRR0L에 207을 설정해줍니다.

  • UCSRmA – USART Control and Status Register A : 우리는 다음 UCSR0A에서는 2배속 모드를 사용한다고 하였기에 "Bit 1 – U2Xm: Double the USART Transmission Speed" Bit 1만을 1의 값을 줍니다.

  • UCSRmC – USART Control and Status Register C : 또한 스탑 비트를 1 bit으로 설정하기 위해서 아래와 같이 설정해줍니다.

  • 또한 8비트 데이터를 받기위해서 다음과 같이 설정해주면 최종적으로 UCSR0C 에는 0000_0110 의 비트가 쓰여지게됩니다.

  • UCSRmB – USART Control and Status Register B : 마지막으로 데이터 송수신을 위해서 다음 레지스터에서 3,4번 레지스터의 비트를 1로 값을 써주면 모든 레지스터 설정이 종료됩니다.

  • 지금까지 UART통신 프로토콜을 데이터 시트를 확인하면서 UART통신이 가능하도록 하였습니다. 이를 활용해 컴퓨터의 포트에 연결된 ATmega를 comportMaster로 연결하는 실습을 진행했습니다.
    UART통신_git저장소

  • 최종적으로 I2C통신과 UART통신을 동시에 진행한 실습 실행 결과입니다. UART통신으로는 초음파센서를 활용해 거리 값을 받아오면 그 값을 LCD에 출력합니다.(초음파센서는 이전에 정리 해주었으므로 정리는 생략하겠습니다.)

profile
화이팅..!

0개의 댓글