[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 ]

[INTERFACE]/USB_FTDI2011. 7. 17. 15:30

[FT2232H EVM] VC++, C#을 이용한 USB2.0 High Speed 테스트

[FT2232H EVM] VC++, C#을 이용한 USB2.0 High Speed 테스트



D2XX Direct Drivers
[FT2232H EVM] 테스트를 위해 D2XX 드라이버가 필요하다.



VC++ 설정
헤드파일 설정하고, DLL파일 설정하면 간단히 환경 설정 할 수 있다.

#include "FTD2XX.h"





FT2232H 테스트 프로그램 작성
간단한 프로그램 작성해서 테스트 했다. LED On/Off 테스트.




C#을 이용한 FT2232H 테스트 프로그램 작성





FT2232H 테스트 동영상

Posted by nexp
TAG c#, FT2232H

댓글을 달아 주세요

[Proramming]/C#2010. 7. 25. 18:04

C#에서 ActiveX 등록 및 사용하기

C#에서 ActiveX 등록 및 사용하기

C#에서 ActiveX 등록하기
기존 VC++이나 VB에서와는 다르게 .NET 환경에서는 ActiveX 등록하는 방법이 조금 다르다. (익숙하지 않아 기록 해 둘 필요가 있다.)

도구상자에서 오른쪽 마우스 클릭하여 메뉴에서 [항목 선택]



[COM 구성요소] 탭에서 등록하고 싶은 ActiveX 를 등록해 주면 된다.





아래는 간단히 내가 만들어 사용하고 있는 Oscilloscope ActiveX Dll 을 등록하여 테스트 한 결과 이다.

Posted by nexp

댓글을 달아 주세요

[Proramming]/C#2009. 11. 28. 14:46

Serial LCD 제어 - C#을 이용한 LCD제어

Serial LCD 제어 - C#을 이용한 LCD제어


 Serial LCD 모듈을 이용하면 시간, 온도등 PC상의 기타 정보를 쉽게 표시할 수 있다. 특히 인터넷을 이용하면 오늘의 날씨, 뉴스 등도 쉽게 정보를 얻어올 수 있다. 일단 간단이 PC에서 입력한 정보가 LCD에 출력되는 프로그램을 작성해 보았다.

C#을 이용하여 Serial LCD 모듈을 제어 하는 프로그램 작성
USB2UART를 이용하여 Serial Prot로 데이터를 출력하도록 했다. 특히 C#을 이용하면 화면 출력에 관련된 여러가지 기능들을 쉽게 처리할 수 있어 상당히 편리하다.



간단히 몇줄의 코드를 이용하여 작성가능하다.
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "C# Serial Test";
            serialPort1.Open();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            char[] str = new char[2];
            if (index > 0)
            {
                if ((index % 16) == 0)
                {
                    textBox1.Text = "";
                    serialPort1.Write("\r");
                    return;
                }
            }
            str = textBox1.Text.ToCharArray(index++, 1);
            serialPort1.Write(str[0].ToString());
        }


USB2Serial모듈을 이용한 Serial LCD모듈 연결



테스트 동영상

Posted by nexp

댓글을 달아 주세요

[SENSOR]/Gyro2009. 4. 2. 21:00

[IDG-500] 2축 자이로센서 테스트

[IDG-500] 2축 자이로센서 테스트


2축 자이로센서 IDG-500 을 이용하여 데이터 수집 테스트를 진행하였다. PC프로그램은 Visual C# 2008을 이용하였고 C# Serial Port 컨트롤을 사용해 PC화면에 출력하도록 했다.




Posted by nexp

댓글을 달아 주세요