본문 바로가기

[INTERFACE]/USB

[Mega8-s EVM] USB를 이용한 LED제어 - 펌웨어 작성

[Mega8-s EVM] USB를 이용한 LED제어 - 펌웨어 작성

사용자 삽입 이미지

AVR-USB CDC I/O 의 참고 예제 소스를 이용해 AVR을 이용한 USB를 테스트 했다.
atMega8만을 이용하여 소프트웨어로 USB스텍을 처리 하기 때문에 속도 자체는 빠르지 않지만 저렴하고 간단하게 USB구현 하기에 상당히 좋은것 같다.

소스코드




테스트 예제는 이해를 위해 상당히 간단하게 작성했고 PC시리얼 포트로 전동되는 문자 "1", "2", "3", "4"에 따라 보드에 있는 LED를 제어할 수 있도록 구성하였다.

USB Serial포트로 데이터가 전송되면 usb_cdc_rcv()함수가 수행되며, data를 받아서 처리하면 된다.
usb_cdc_rcv
//-----------------------------------------------------------------------------
// USB CDC Read function
void usb_cdc_rcv(uchar *data, uchar len)
{
 if(len)
 {
  switch(data[0])
  {
   case '1':
    Led1On();
    break;
   
   case '2':
    Led1Off();
    break;

   case '3':
    Led2On();
    break;
   
   case '4':
    Led2Off();
    break;
  }
 }
}
//-----------------------------------------------------------------------------


회로도
클럭은 12Mhz를 사용하였고(물론 16Mhz도 가능하지만 약간의 설정이 필요하다.)
USB처리 포트는 PD2, PD4를 이용하였고, 로스피드 USB이므로 D-에 풀업 저항이 필요하다.

보드상에 LED는 PB2, PB3에 연결되어 있다.


테스트
펌웨어 다운드 후 USB커넥터를 연결하면 디바이스 드라이버를 찾는데

 "avrcdc.inf"를 설정하면 된다.
 드라이버 자체는 윈도우 USB, CDC드라이버를 이용하지만 inf파일은 파일 위치와 간단한 정보를 포함하고 있다.

드라이버가 정상적으로 설치되면 장치관리자에서 설치된 정보를 볼 수 있고 포트나 보레이트등의 변경이 가능하다. 테스트 용으로 보레이트를 9600으로 설정하였다.
 


하이퍼 터미널 혹은 시리얼 포트통신 프로그램을 이용하여 "1", "2", "3", "4"를 전송하면 Mega8-s EVM의 LED가 점등되는것을 확인 할 수 있다.

반응형