'Small Devices/AVR and ETC'에 해당되는 글 19건

  1. 2012.07.23 뇌를자극하는하드웨어입문 8장 - Atmega162 시리얼 통신 실험 1
반응형

1. USB시리얼변환기 이용

책에서는 MAX232 를 이용하여 PC의 RS232 포트(시리얼 포트)의 전압 level을 12V에서 5V(TTL Level)로 변환 시켜주는 예제가 나온다. 본 포스팅(이후 포스팅)에서는 USB시리얼변환기를 이용하여 ATmega162의 Serial Pin(RXD0->10, TXD0->11)에 직접 연결하여 실험해 본다. USB 시리얼 변환기는 다음과 같은 FTDI-5V 를 이용한다. 이 USB시리얼 변환기는 USB 포트를 5V TTL 레벨의 Serial 포트로 변환 시켜 준다.




2. 브레드보드 연결

다음은 브레드보드에 연결한 모습이다. USB시리얼변환기의 RXI를 ATmega162의 11번 PIN인 TXD0로, TXO를 10번 Pin인 RXD0로 연결해야 한다.


3. 테스트 프로그램

테스트 프로그램은 다음과 같다.



4. Atmega162의 시리얼 통신 레지스터 개요

Atmega162에는 Serial 통신을 위한 레지스터들이 존재하는데 각 기능은 다음과 같다.

 1) UCSR 레지스터

 - UCSR 은 A,B,C로 구성되며 상태 설정과 제어의 기능을 한다.

  [USCR0A]

    . RXC0 :수신 완료 표시 비트 (Read Only)

    .TXC0 : 송신 완료 표시 비트 (Read Only)

    . UDRE0 : 송신 데이터 레지스터 준비 완료 표시 비트 (Read Only)

    . FE0 : 프레임 에러 표시 비트 (Read Only)

    . DOR0 : 데이터 오버런 에러 표시 비트 (Read Only)

    . UPE0 : 페리티 에러 표시 비트 (Read Only)

    . U2X0 : 송신 속도 2배 설정

    . MPCM0 : 멀티 프로세서 통신 모드 

  [USCR0B]

    . RXCIE0 : 수신 완료 인터럽트 인에이블 비트

    . TXCIE0 : 송신 완료 인터럽트 인에이블 비트

    . UDRIE0 : 송신 데이터 레지스터 준비 완료 인터럽트 인에이블 비트

    . RXEN0 : 수신기 인에이블

    . TXEN0 : 송신기 인에이블

    . UCSZ202 : 전송 데이터 길이 선택 비트

    . RXB80 : 수신 데이터 비트 8

    . TXB80 : 송신 데이터 비트 8

  [UCSR0C]

    . URSEL0 : 레지스터 선택 비트

    . UMSEL0 : 시리얼 통신 모드 설정 비트

    . UPM01 : 패리티 모드 설정 비트

    . UPM00 : 패리티 모드 설정 비트

    . USBS0 : 정지 비트 선택

    . UCSZ01 : 전송 데이터 비트 수 설정

    . UCSZ00 : 전송 데이터 비트 수 설정

    . UCPOL0 : 클럭 극성 선택

 2) UBRR 레지스터

 - UBRR은 보레이트 속도 설정 관련 레지스터이다.

 [UBRR0H]

  . UBRRH의 7-4 비트는 사용하지 않는다. UBRRH의 3-0비트는 UBRR값의 11-8비트에 해당한다.

  . URSEL이 0이면 UBRRH의 기능을 가지고 URSEL이 1이면 UCSRC 기능을 가진다.

 [UBRR0L]

  . UBRRH의 7-0 비트는 UBRR값의 7-0 비트에 해당한다.

 - 보레이트 계산은 다음의 식을 이용한다.

예를 들어 시스템 클럭이 16MHz이고 보레이트를 9600 bps로 잡으면 UBRR=(16000000)/(16*9600)-1 = 103.1666 이 되며 소수점이하를 버리고 102을 2진수로 변환하면 1100111 이 된다.

 3) UDR 레지스터

 - UDR 레지스터는 데이터 입력시 설정한 값에 맞게 데이터를 전송하는 레지스터이다.


5. 테스트 프로그래 설명

4의 설명을 기반으로 프로그램을 설명해 본다. 

- main 함수의 UCSR0A=0x00 설정은 U2X0 와 MPCM0를 0으로 설정하여 송신속도 2배 설정과 멀티프로세서 통신 모드를 사용하지 않는다. 

- main 함수의 UCSR0B=0b000010000 설정은 TXEN을 1로 하고 나머지는 0으로 한다. 즉 송신부만 활성화 시킴

- main 함수의 UBRR0L=103 & UBRR0H=0  설정은 보레이트를 9600bps로 한다. (4 설명 참고)

- Putch 함수의 UCSR0A & 0x20 은 UDRE가 1이 되기를 기다리는 것으로 송신 데이터 레지스터가 준비 되었는지 체크하고 준비 되었으면 UDR에 문자를 입력한다. 


6. 테스트

테스트를 위한 PC측 터미널은 SecureCRT를 이용한다. 장치 관리자에서 USB시리얼컨버터의 COM 포트를 확인한다.


COM4는 USB-ISP에 할당된 것이고 그 아래 포트COM11이 USB시리얼컨버터의 포트이다. SecureCRT에서 시리얼 터미널을 다음의 옵션을 준다.

터미널을 오픈하고 Atmega162에 전원을 인가하거나 프로그램을 로딩하여 Reset하게 되면 다음과 같이 화면에 Hello가 출력된다.


반응형
Posted by alias
,