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

[INTERFACE]/USB2008. 7. 29. 23:40

[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가 점등되는것을 확인 할 수 있다.

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/USB2008. 7. 28. 23:38

[Mega8-s EVM] USB CDC를 이용한 보드 제어 - 드라이버 인식

[Mega8-s EVM] USB CDC를 이용한 보드 제어

사용자 삽입 이미지


[Mega8-s EVM]을 이용하여 CDC(USB2Serial) 테스트 프로그램을 작성해 보았다.
서 참고한 소스를 수정 하였는데... 처음에는 정상 동작하지 않았다.



USB D+, D- 포트 핀 설정을 내 보드에 맞도록 수정 해 주었고 디스크립트 몇가지 수정 하였으며 실제 동작 부분도 보드 상태에 맞도록 수정 하였다.


정말 값싸게 AVR atMega8을 이용하여 USB를 이용할 수 있어 간단한 어플리케이션에 딱 좋겠다.

USB인식
플래시 라이트 후에 USB케이블을 다시 연결 해 주어야 정상 반영이 되는데... 그것때문에 시간이 좀 걸린것 같다.



드라이버 설치
드라이버는 MS에서 제공하는 CDC드라이버를 이용하고 INF파일만 좀 수정하여 설치 하였다.



드라이버가 정상 등록되면 장치관리자에서 확인 할 수 있다.
Posted by nexp

댓글을 달아 주세요

  1. 권혁진

    안녕하세요. atmega8로 USB2SERIAL 최대 속도 어느정도 나오는지 알고자합니다.

    2009.11.13 09:58 [ ADDR : EDIT/ DEL : REPLY ]

[INTERFACE]/USB2008. 5. 9. 13:59

[At90USB1287 EVM] USB Host 보드

[At90USB1287 EVM] USB Host 보드



AVR코어에 USB Host/Device 기는을 가진 AT90USB1287 보드로 네트웍 기능을 추가하여 Ethernet To USB테스트 가능하도록 했다.



FTP서버를 이용하여 원격지에서의 USB메모리 스틱의 데이터를 업데이트 가능하다.



테스트 동영상
FTP클라이언트로 접속하여 원격지에서 보드에있는 USB 메모리 스틱의 파일을 업데이트 하는 예제
Posted by nexp

댓글을 달아 주세요

[INTERFACE]/USB2008. 2. 9. 08:32

USB Full Speed 데이터 전송속도

USB Full Speed 데이터 전송속도


Ethernet to USB 보드 제작할때 일이다. FTP에서 데이터를 보내서 USB보드에 저장하는 장치 인데 FTP에서 속도 측정 결과 최대속도 340KByte/s 가 나왔다.
의뢰한 클라이언트의 말
"12M USB가 이것밖에 안돼?"
황당하다~


USB는 여러개의 트랜젝션(Setup, Data IN, Data OUT. Status IN, Status Out)으로 전송된다. 하나의 트랜젝션은 여러개의 패킷으로 나누어지는데 엔드포인터의 최대 전송 수에 관계된다.
 
벌크 전송의 예로 100바이트의 데이터를 전송하는 트랜젝션은 64 + 36 두개의 트랜젝션으로 나누어진다.
 
[OUT 트랜젝션 1]
1)C -> D : OUT Token Packet
2)C -> D : 64byte Data Packet
3)D -> C : HandShaking Packet
 
[OUT 트랜젝션 2]
1)C -> D : OUT Token Packet
2)C -> D : 36byte Data Packet
3)D -> C : HandShaking Packet
 
USB 보드를 제작하고 클라이언트 들에게 자주 듣는 예기로 "USB는 12Mbps 인데 왜이리 느린거야?"는 말이다.
단순히 USB 스펙의 12Mbps만을 생각하기 때문이다.
12Mbit/s -> 1.5Mbyte/s이고
1.5MB/3(tranjaction) -> 500Kbyte 가 최대 전송속도가 된다.

하지만 실제 소형 마이컴에서 이 속도 내기는 무리다. 대부분 USB컨트롤러를 이용하므로 컨트롤러 제어하고 인터럽트 처리 데이터 카피등으로 인해 느려지고 데이터 받아서 뭔가 처려하려고 들면 훨씬더 느려진다. 그리고 Bulk전송만 한다면 모르지만 트랜젝션 전환이 많으면 많을수록 훨씬 더 느려진다.
요즘은 MCU + USB포함된 MCU가 많이 출시되므로 좀 달라졌겠지만 400KByte/s 이상 나오는것 잘 못본것 같다.
 
 



Posted by nexp
TAG USB

댓글을 달아 주세요