[MSP430]/MSP430F5x2011. 11. 27. 23:00

[MSP430F5510 EVM] USB Keyboard 테스트

[MSP430F5510 EVM] USB Keyboard 테스트


MP430F5510은 저렴하고 저전력인 MSP430코어이다.  USB기능이 있고 소형(48Pin QFN)이기 때문에 밧데리로 구동하는 간단한 HID장치나 USB Keyboard, USB Mouse 장치를 만들기에 좋다.

[MSP430F5510 EVM] 보드를 이용하여 USB Keyboard 테스트해 보았다. 소스코드도 기존 예제에 쉽게 포팅 할 수 있도록 수정해서 정리 해 보았다.





[MSP430F5510 EVM]  USB Keyboard 테스트 동영상
USB Keynoard 테스를 위해 간단히 Up, Down, Left, Right Key를 에뮬레이션 하여 뷰어 할때 편리한 USB 장치를 만들어 보았다.





MSP430F5510 USB Keyboard 테스트 예제 소스코드
void main(void)
{
    //UART 초기화
 DebugInit(BAUD_115200);
 DebugPrint("MSP430F5510 USB Test\r");
   
    //MSP430 USB초기화
    Msp430UsbInit();

    Led1Init();
    Led1On();
   
    //Key 초기화
    INIT_KEY_IO();
   
 // Enable interrupts
    enable();

   //USB가 연결되어 있으면 이벤트 발생하여 재연결
    if (USB_connectionInfo() & kUSB_vbusPresent)USB_handleVbusOnEvent();
    
  
   while(1)
  {
     //USB 처리
     ProcessUSB();
  }
}



USB 처리 함수
void ProcessUSB(void)
{
     switch(USB_connectionState())
      {
         case (ST_USB_DISCONNECTED | ST_NOENUM_SUSPENDED):
               __bis_SR_register(LPM3_bits + GIE);  // Enter LPM3 w/interrupt.  Nothing for us to do while disconnected. 
               break;
             
         case ST_USB_CONNECTED_NO_ENUM:
              break;
             
         case ST_ENUM_ACTIVE:
          
              __bis_SR_register(LPM0_bits + GIE);     // Enter LPM0 w/interrupt, until a keypress occurs
             //Key처리 
             PorcessKeyboad();        
              }
              break; 
             
         case ST_ENUM_SUSPENDED:
              __bis_SR_register(LPM3_bits + GIE);  // Enter LPM3 w/interrupt.  Nothing for us to do while 
              break;                                // suspended.  (Remote wakeup isn't enabled in this example.)
             
         case ST_ENUM_IN_PROGRESS:
              break;
             
         case ST_ERROR:
              break;
             
         default:;
      }
}



Keyboard 인터럽트 처리 핸들러
#pragma vector=PORT1_VECTOR
__interrupt void Port1_ISR(void)
{
    WORD i;
    unsigned char key_val = 0;
 
    if(P1IFG)
    {
        key_val = ~P1IN;
        Delay(30);   // Cheap debounce. 

        report[0] = 0;
        report[1] = 0;       
        switch(key_val)
        {
        case 1:
            report[2] = usbUsageLeftArrow;
            break;
           
        case 2:
            report[2] = usbUsageRightArrow;
            break;
           
        case 4:
            report[2] = usbUsageUpArrow;
            break;
           
        case 8:
            report[2] = usbUsageDownArrow;
            break;   
           
        case 0x10:
            report[2] = usbUsageA;
            break; 

        case 0x20:
            report[2] = usbUsageB;
            break;
           
        case 0x40:
            report[2] = usbUsageN;
            report[3] = usbUsageE;
            report[4] = usbUsageX;           
            report[5] = usbUsageP;           
            report[6] = usbUsageEnter;
            break; 

        case 0x80:
            report[2] = usbUsageEnter;
            break;             
           
        }
       
        buttonPressed = TRUE;
        __bic_SR_register_on_exit(LPM3_bits);  // Wake main from LPMx       
        P1IFG = 0;
    } 
}
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

댓글을 달아 주세요

[Microchip]/PIC18F2008. 7. 5. 10:43

[PIC18F4x EVM] 관련자료

[PIC18F4x EVM] 관련자료

사용자 삽입 이미지







예제 Source Code - PIC18F4450 USB HID Mouse, Keyboard, CDC 예제



회로도:











테스트 동영상

Posted by nexp

댓글을 달아 주세요

[MyProject]/20022002. 4. 11. 22:37

PC용 MOUSE, KEYBOARD, JOYSTICK 복합기 개발

PC용 MOUSE, KEYBOARD, JOYSTICK 복합기 개발
    - USB Device Driver 제작.
    - HID Mouse Device Driver 제작.
    - HID Keyboard Device Driver 제작.
    - HID Joystick Device Driver.
    - Host Program 제작.


기능
- IBM PC호환 USB 트랙볼 마우스.
- 자판 키보드 기능, 앞뒷면 키보드로 활용가능.

- 게임용 조이스틱 기능(게임별로 키(조함키 포함) 할당가능).

- 인터넷 전용키/워드전용키 기능.
 






1차  프로토 보드 제작
TUSB3210을 이용하여 보드 제작 및 테스트
 


소프트웨어 제작
디바이스 드라이버 및 환경설정 프로그램 제작






 

Posted by nexp

댓글을 달아 주세요

[AppBoard]/PROTO_BOARD2002. 4. 10. 00:47

Mouse Keyboard Joystick 복합기 프로토 보드 제작

Mouse Keyboard Joystick 복합기 프로토 보드 제작



PC용 Mouse + Keyboard + Joystick 복합기 개발을 위해 프로토 타입 형태로 제작했다.
케이스 제작도 염려해 두고 테스트용으로 제작 했다.  쉽게 연결할 수 있는 USB커넥터나 디버깅용 RS232 시리얼 포트, 기타 빵판형태의 SMD컨버터를 두어 편리하게 테스트 할 수 있도록 제작했다.


당시 가격때문에 내부 매모리가 워낙 적은 MCU라 외부에 확장메모리 커넥터를 두어 개발할때 넉넉한 메모리로 할수 있었다.



1차 목업케이스 적용

Posted by nexp

댓글을 달아 주세요