반응형




예전에 만들었던 Atmega328 보드에 시리얼 관련 부품을 추가하려 알아보다가.. 


[임베디드/Avr] - Atmega328 보드 만들기 - 회로 및 부품 확인


[임베디드/Avr] - Atmega328 보드 만들기 - 회로도 그려보기


[임베디드/Avr] - Atmega328 보드 만들기 - 보드 납땜 및 태스트..


예전에 사용했던 USB to TTL 컨버터가 생각나서  재구입하려고 가격을 다시 알아봤습니다...  여기저기 알아보다가 옥션에서 개당 2200원에 판매하는 곳이 있더군요..  바로 주문했던 것이 오늘 왔는데 요렇게 생겼습니다..  pl2303hx 칩을 사용하고 있습니다.






우선 Atmega328 보드에 시리얼 통신 예전에 작성했던 코드를 업로드하고.. 

http://webnautes.tistory.com/639



  1. #define F_CPU 16000000UL    
  2.       
  3. //1. baud rate를 선택    
  4. #define USART_BAUDRATE 9600    
  5.       
  6. //2.시스템 클록과 원하는 baud rate를 이용하여 UBRR 값을 계산한다.    
  7. #define UBRR_VALUE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)    
  8.       
  9.       
  10. #include <avr/io.h>    
  11. #include <stdio.h>    
  12.       
  13.       
  14. void usartInit()    
  15. {       
  16.     //3. UBRR0은 16비트 레지스터이기 때문에 8비트씩 나누어서 넣어야 한다.    
  17.     UBRR0H = (uint8_t)(UBRR_VALUE>>8);    
  18.     UBRR0L = (uint8_t) UBRR_VALUE;    
  19.       
  20.     //4. USART 설정    
  21.     UCSR0C |= (1<<UCSZ00)|(1<<UCSZ01); //Charecter size : 8비트    
  22.     UCSR0C &= ~(1<<USBS0); //stop  bit : 1비트    
  23.     UCSR0C &= ~((1<<UPM01)|(1<<UPM00)); // no parity mode    
  24.           
  25.      //5. 송수신을 가능하게 한다.    
  26.     UCSR0B=(1<<RXEN0)|(1<<TXEN0);    
  27. }    
  28.       
  29.       
  30. void uart_putchar(uint8_t u8Data, FILE *stream )    
  31. {       
  32.     //이전 전송이 끝나기를 기다림    
  33.     while(!(UCSR0A&(1<<UDRE0))){};    
  34.               
  35.     UDR0 = u8Data;    
  36. }    
  37.       
  38. uint8_t uart_getchar( FILE *stream)    
  39. {    
  40.     // 수신 되기를 기다림    
  41.     while(!(UCSR0A&(1<<RXC0))){};    
  42.               
  43.     return UDR0;    
  44. }    
  45.       
  46. //http://www.appelsiini.net/2011/simple-usart-with-avr-libc     
  47. FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);    
  48. FILE uart_input = FDEV_SETUP_STREAM(NULL, uart_getchar, _FDEV_SETUP_READ);    
  49.       
  50. int main(void)    
  51. {    
  52.     usartInit();    
  53.     stdout = &uart_output;    
  54.     stdin  = &uart_input;    
  55.           
  56.     char ch;    
  57.           
  58.     while(1)    
  59.     {    
  60.         ch = getchar();        
  61.               
  62.         if ( ch == '\r') printf( "\r\n");    
  63.         putchar(ch);    
  64.     }    
  65. }   



USB TO TTL 컨버터와 Atmega328 보드를 아래처럼 연결했습니다.


USB TO TTL 컨버터   Atmega328 보드

5V                       5V

GND                    GND

RXD                    PD1(TXD)

TXD                    PD0(RXD)



그리고 나서 노트북에 USB TO TTL  컨버터를 연결해봅니다. 그리고는 장치관리자에서 확인해봤는데 예상대로 제대로 안잡혀있습니다.





아래와 같은 에러가 나있네요.. 혹시나해서 구글에서 검색하다가 방법을 찾았는데..

http://www.ifamilysoftware.com/news37.html 에서 32비트 경우랑 64비트 경우를 나누어서 설명하고 있습니다.  제 경우는 윈도우10 64비트라  64비트 경우를 따라 진행해봤습니다..





1. 아래 링크에서 드라이버를 다운로드 받아 둡니다...

http://www.ifamilysoftware.com/Drivers/PL2303Installer/PL2303_64bit_Installer.exe



2. USB to TTL 컨버터를 피시에서 분리합니다.


3. 다운로드 받았던 드라이버를 실행시킵니다.. 설치 도중에 아래와 같은 창이 뜨면 USB to TTL 모듈을 연결하고 Continue버튼을 클릭합니다. 






4. 이제 재부팅을 해봅니다..




5. 문제 없이 잡혀있습니다..~~









이제 터미널을 열어서 문자를 입력하면 에코가 되어서 돌아오는지 확인해봅니다. 문제 없이 잘 동작합니다..~~





반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts