[AVR]/Mega82011. 9. 22. 23:30

[Atmega8 EVM] USB HID 테스트

[Atmega8 EVM] USB HID 테스트


USB HID을 이용하면 윈도 표준 입력 인터페이스로 드라이버 필요 없이(정확히는 Windows 내부 표준 드라이버) USB연결 할 수 있다. USB Mouse, Keyboard, Joystick 등이 이 표준을 따르는데 USB를 연결하면 바로 동작하기 때문에 사용자 입장에서 상당히 편리한 인터페이스 이다.

이번에는 AVR AtMega8  (ATMega8-EVM) 의 USB 소프트웨어 스텍을 이용하여 HID Data 테스트를 해 보았다. 스프트웨어 스텍이라 약간 불안하거나 속도에 문제가 있지 않을까 했는데.. 테스트 결과 속도도 나쁘지 않고 저렴고 간단하게 사용할 수 있어서 좋은것 같다.

Atmeg8 EVM을 USB에 연결하면 HID장치로 인식되고 휴먼인터페이스 장치에서 확인 할 수 있다. (드라이버 설정 필요 없이 바로 인식된다.)




AVR USB HID처리
uchar ProcessUSB(uchar *data, uchar len)
{
 unsigned char temp[9];
 unsigned int adc=0;

 switch(data[0])
 {
  case CMD_LED_OFF:
   Led1Off();
   break;

  case CMD_LED_ON:
   Led1On();
   break;
  
  case CMD_EEPROM_READ:
   eeprom_read_block(data, (uchar *)0 + data[1], data[2]); 
   SendUsb((void *)&data, 8);
   break;
   
  case CMD_EEPROM_WRITE:
   eeprom_write_block(data, (uchar *)0 + data[1], data[2]);
   break;   

  case CMD_GET_ADC:
   adc = AdcRead(0);
   //DebugPrint("ADC:%d\r\n", adc);

   temp[0] = adc&0xFF;
   temp[1] = (adc>>8)&0xFF;
   SendUsb((void *)&temp, 8);
   break;
 }  
}


HID제어 Main Source Code
int main(void)
{
 uchar   i;

 //System Init
 SystemInit();
 Led1Init();
 Led1On();
 
 //UART Init
 DebugInit(BAUD_38400);
 DebugPrint("USB HID Test Program\r\n");
 
 //ADC Init
 AdcInit();
    
 //USB Init
    usbInit();
    usbDeviceDisconnect();
   
 i = 0;
    while(--i){             /* fake USB disconnect for > 250 ms */
        wdt_reset();
        _delay_ms(1);
    }
 
    usbDeviceConnect();
    sei();
   
    while(1)
 {  
        wdt_reset();
  //USB 처리
        usbPoll();
    }
    return 0;
}



HID제어 PC Host 프로그램
PC용 프로그램은 C#을 이용하여 작성하였다.
HID제어 부분을 표준 DLL로 제작해 두었기 때문에  VC++, VB, C#에서 쉽게 제어 가능하다.





HID제어 DLL이용하면 아주 간다하게 프로램을 작성할 수 있다.

        private void button2_Click(object sender, EventArgs e)
        {
            bool ret;

            ret = GPortIOHidInit(0, 0);

            if (ret)
            {
                label1.Text = "USB HID Init OK";
            }
            else
            {
                label1.Text = "USB Init ERROR";
            }
        }
  
        private void button3_Click(object sender, EventArgs e)
        {
            int ret;
            ret = OutPort(CMD_LED_ON, 0)
        }

        private void button4_Click(object sender, EventArgs e)
        {
            int ret;
            ret = OutPort(CMD_LED_OFF, 0)
        }

         private void button5_Click(object sender, EventArgs e)
        {
                int ret;
                int adc_val;
                byte[] Buffer = new Byte[8];

                ret = InPort(CMD_ADC_READ+0 ), Byte)

                 adc_val = Buffer[1] | Buffer[2] << 8;
                label1.Text = adc_val.ToString();
       }




AVR HID테스트 동영상
HID를 이용하여 LED를 제어 하고 Mega8의 EEPROM에 데이터를 읽고 쓰며  ADC값을 그래프로 표시하는 테스트 이다. 소프트웨어 스텍임에도 속도가 나쁘지 않다.




Posted by nexp

댓글을 달아 주세요

  1. fjkd

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.10.29 12:43 [ ADDR : EDIT/ DEL : REPLY ]
  2. sinwho

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.08.21 09:37 [ ADDR : EDIT/ DEL : REPLY ]
  3. 서동훈

    관리자의 승인을 기다리고 있는 댓글입니다

    2016.02.02 22:24 [ ADDR : EDIT/ DEL : REPLY ]

[AVR]/Mega162009. 11. 12. 11:13

[AtMega16-SM EVM] Atmega32 보드 관련 자료

[AtMega16-SM EVM] Atmega32 보드 관련 자료



자주 사용하는 특수 기능핀들을 표준화해서 보드를 제작해 두면 여러모로 사용할 곳이 많다. 이번에 TQFP44핀의 Atmega16 시리즈를 몇가지 기능을 업데이트 하여 [SM-Type EVM] 으로 제작해 보았다.



MPU는 TQFP 44핀의 Atmega16, Atmega163, At9085335등이 가능하지만 ATmega32를 이용하여 조립했다.



옵션으로 [AVR-USB 소프트웨어 스택] 을 이용하면 USB기능을 사용할 수 있도록 했다. 평소에 USB전원으로 사용하다 필요할때 저항 3개만 연결하면 된다.



회로도








[SM-Type EVM]이라 USB2UART, Bluetooth, Zigbee와 같은 통신 모듈을 연결 가능하다.





AVR Mega16 확장 테스트 보드



네트웍 확장 보드를 이용하면 ENC28J60 이더넷 컨트롤러 모듈로 이더넷 테스트가 쉽게 가능해 진다.



W5100 이더넷 모듈 연결

Posted by nexp

댓글을 달아 주세요

[AVR]/Mega82009. 5. 8. 22:40

[Mega8-SM EVM] 소형 AVR보드 제작

[Mega8-SM EVM] 소형 AVR보드 제작



기존 [Mega8-s EVM]에 확장해서 [SM-Type EVM] 로 제작 했다. SM-Type은 USB2Seral 모듈이나 Bluetooth 모듈 등을 연결할수 있고 SPI, I2C, UART등의 자주사용하는 기능을 표준화된 핀맵으로 정의해서 제작하고 있다. 또한 소프트웨어 USB스택을 테스트 할 수 있도록 USB커넥터를 연결 하능하다. (참고 USB 관련 테스트 예제, USB 호스트 예제)



USB커넥터를 두어 SW USB Stack을 테스트 할 수 있을 뿐아니라 USB2UART가 있어 디버깅 및 Arduino 를 쉽게 포팅할 수 있도록 제작했다.



회로도

확장 커넥터


on board LED


USB Connector



Posted by nexp

댓글을 달아 주세요

[INTERFACE]/USB2008. 10. 5. 21:22

[ATmega8-s EVM] USB HID Keyboard 예제 작성

[ATmega8-s EVM] USB HID Keyboard 예제 작성

사용자 삽입 이미지



[AVR-USB 소프트웨어 스텍] 을 이용하여 USB키보드를 제작해 보았다.
ATmega8 보드에 USB를 연결하면 장치관리자에 "HID 키보드 장치"로 인식되는 것을 확인할 수 있다.




Keyboard 처리
KEY_DATA_REPORT m_KeyBuffer[NUM_KEYS + 1] =
{
 {0, 0},                     // no key pressed
 {MOD_SHIFT_LEFT, KEY_1},
    {MOD_SHIFT_LEFT, KEY_2},
};

void ProcessKeyboard(void)
{
  if(!(ReadKey() & SW1_VALUE))
 {
  if(!m_SwFlag[0])
  {
   //Key Press
   m_SwFlag[0] = 1;
   
   Led1On();
   SendUsbReport(&m_KeyBuffer[1], sizeof(KEY_DATA_REPORT));
  }
 }
 else
 {
  if(m_SwFlag[0])
  {
   Led1Off();
   SendUsbReport(&m_KeyBuffer[0], sizeof(KEY_DATA_REPORT));  
   m_SwFlag[0] = 0;
  }
 }

:

}


Atmeg8 USB Keyboard 예제 소스코드
//-----------------------------------------------------------------------------
int main(void)
{
 Led1Init();Led2Init();
 Led1Off();Led2On(); 

 InitKeyboard(); 
 
 usbInitFunction();
 enable();

 for(;;)
 {
  usbPoll();
  
  ProcessKeyboard();
 }
 return 0;
}
//-----------------------------------------------------------------------------


사용자 삽입 이미지
Posted by nexp

댓글을 달아 주세요

[INTERFACE]/USB2008. 7. 30. 22:40

[Mega8-s EVM] USB를 이용한 LED제어 - 호스트프로그램 작성

[Mega8-s EVM] USB를 이용한 LED제어 - 호스트프로그램 작성

사용자 삽입 이미지


VB 소스코드




VB를 이용하여 Mega8 USB보드의 LED를 제어하는 소프트웨어를 작성해 보았다.
예전 USB2Serial 예제를 그대로 사용하기 위해 최대한 간단하게 작성했다



예전 프로그램을 약간 수정하여 보레이트는 9600으로 설정하고 PORT는 콤보박스의 설정에 따라 초기화 할 수 있도록 하였다.
    'com포트 열기
    MSComm1.Settings = "9600,n,8,1"
    MSComm1.CommPort = m_ComPort
    MSComm1.PortOpen = True


프로그램 실행
USB를 이용한 atMega8 보드의 LED제어를 위한 호스트 프로그램 실행


테스트 동영상
Posted by nexp

댓글을 달아 주세요

  1. simul

    대단하시네요.. 간단하게 Input, Output PCB만들려고 하는데, 참고 자료가 있을까요..??

    Parallel로는 만들었었는데요..(Switch 만들어서, 전기가 통하면 In / LED 붙여서 OutPort 제어등..)

    USB로 만들려면 반드시 Chip을 붙여야 하나요..?? LED같은 Output 제어하는것은 몇군데에서 봤는데,
    Input 제어(뭔가를 누르면 Computer에서 인식)는 별로 없는것 같아요..

    PCB 도면등 있으면 부탁드립니다.

    너무 횡설수설 했네요.. 수고하세요

    2008.08.16 18:27 [ ADDR : EDIT/ DEL : REPLY ]
  2. 이 예제는 AVR펌웨어에서 소프트웨어적으로 USB처리를 하는 방식입니다.
    속도는 USB에 비해 느리구요... 펌웨어 부하가 늘어 날 수록 불안해 질 수 있습니다.
    USB칩을 사용하면 CPU의 부하도 줄이고 상당히 안정적 입니다. 상품으로 판매 할 목적이라면 전용의 칩을 사용할 것을 권장드리구요...

    Input은 output과 동일하구요... 소스코드에 약간만 추가하시면 됩니다.

    회로는 블로그에 올라가 있는데...

    2008.08.19 13:05 신고 [ ADDR : EDIT/ DEL : REPLY ]