ATtiny45 direct USB 2.0 Connection의 펌웨어 및 회로


9

USB 를 통해 PC로 데이터를 보내는 ATtiny45사용하여 모듈 식 USB 장치 를 만들고 싶습니다 . 데이터를 읽지 않으므로 단일 방법 (ATtiny-> PC) 연결이 완전히 가능합니다.

나는 사용하고 ISP로 아두 이노 우노을 표준 ArduinoISP 스케치 아두 이노 소프트웨어 내에서로드와. AVRDUDE를 사용하여 Arduino와 함께 ATtiny45를 ISP로 프로그래밍하려고 생각하고 있습니다. Arduino Programming Langue보다 고급이기 때문에 HEX로 컴파일 된 C 코드를 사용할 수 있기를 원하기 때문입니다.

회로에 대한 나의 기본 생각 : 여기에 이미지 설명을 입력하십시오

보다시피, "직접"USB 연결을 원합니다. 지금까지 나는 이것을 위해 소프트웨어 기반 솔루션을 사용해야한다는 것을 알고 있습니다.

  1. ATtiny45와 함께 작동하도록 SoftwareSerial 을 관리했습니다 . 이를 위해 Arduino 소프트웨어를 사용하여 다음 코드로 ATtiny45를 프로그래밍했습니다.

    #include <SoftwareSerial.h>
    #define rxPin 3
    #define txPin 4
    SoftwareSerial serial(rxPin, txPin);
    
    void setup() {
        pinMode(rxPin, INPUT);
        pinMode(txPin, OUTPUT);
        pinMode(led, OUTPUT);     
        serial.begin(4800);
    }
    
    void loop() {
        serial.println("1");
        delay(1000);
    }

    핀 3을 사용하지 않지만 SoftwareSerial에 대해 핀 3을 정의해야합니다.

    이 방법으로 SoftwareSerial을 사용하여 ATtiny에서이 테스트를 위해 빈 스케치가로드 된 Arduino UNO의 TX 핀으로 직접 데이터를 전송할 수있었습니다. 프로그래밍 된 ATtiny를 USB 케이블에 직접 연결하려고 시도했을 때 PC가 어떤 장치 (COM 포트)도 인식하지 못했기 때문에 Arduino 소프트웨어의 직렬 모니터를 사용하여 COM4 (내 경우)의 데이터를 읽었습니다.

    불행히도 직렬 모니터에는 이상한 유니 코드 문자 만 있습니다. 데이터가 16 진수 형식이기 때문이라고 생각합니다. 그래서 USB와 ATtiny45 사이에 USB / 직렬 변환기 를 연결해야한다는 것을 알았습니다 ... 그러한 변환기를 찾았지만 모든 것을 원하기 때문에 미리 만들어진 보드를 사용하고 싶지 않습니다. 하나의 보드에 내 구성 요소. FTDI 칩이 내 프로젝트에 너무 많을 것이라고 생각하지 않습니까? (납땜하기에는 너무 작은 핀이 있습니다 ...)

  2. V-USB 는 USB / 직렬 변환기가 필요하지 않기 때문에 두 번째 접근 방식이었습니다. V-USB를 사용하려면 앞에서 언급 한대로 AVRDUDE를 사용해야합니다.

    이 멋진 예제 V-USB EasyLogger를 찾았습니다 . 회로 설계 및 예제 펌웨어가 포함되어 있습니다. (C / C ++ / HEX)

    내가 알고 싶은 유일한 것은 : 내 회로를 예제와 같이 보이게 만들어야합니까? -> 여기에 이미지 설명을 입력하십시오

이런 종류의 USB 연결에 대해 더 알아야 할 것은 무엇입니까? (USB / 직렬 변환기가 필요한 이유는 무엇입니까? +5 및 VCC를 연결할 수 있습니까? 절대적으로 필요한 구성 요소는 무엇입니까? TX를 통해 어떤 종류의 신호를 보내야합니까? 되려고 ? )

모든 답변에 감사드립니다.


최신 정보

다음은 몇 가지 점에서 실제로 도움이 된 추가 링크입니다. 그러나 나는 여전히 그것을 완전히 이해하지 못했습니다 ...

첫 번째-> http://www.ernstc.dk/arduino/tinycom.html

두 번째-> http://www.re-innovation.co.uk/web12/index.php/en/blog-75/227-attiny-arduino ( '직렬 출력'섹션으로 스크롤)


2
그렇습니다. 적어도 전기 제한 사양을 너무 심하게 위반하지 않으려는 경우 에는 그렇게 합니다. 위 다이어그램에서 "USB"커넥터의 라벨이 잘못 표시되어 있습니다. D + / D-는 별개의 송신 및 수신 라인이 아니라 양방향 차동 쌍 입니다.
Chris Stratton

스케치가 잘못되어 죄송합니다. 나는 정말 전기가 아니라 프로그래머입니다. "도면"은이 프로젝트를 계획 할 때 염두에 둔 내 생각을 시각화 한 것입니다.
Ace

답변:


5

FTDI 변환기없이 ATtiny45를 USB로 직접 통신 할 수 있습니다.

모든 것이 작동하게하려면 V-USB 라이브러리 가 필요합니다 .

작동하는 모든 것의 아주 좋은 예가 여기 있으며 EasyLogger의 동일한 예를 사용합니다.

동일한 저자는 USB 및 uC에 대한 다른 유용한 팁과 프로젝트 를 보유 하고 있습니다 .

ATtiny를 사용한 샘플 회로 :

개략도

이 회로 시뮬레이션CircuitLab을 사용하여 작성된 회로도


asker는 이미 V-USB를 살펴 보았습니다.
Ignacio Vazquez-Abrams

정말 고맙습니다. 최대한 빨리 시도하겠습니다. 그러나 먼저 V-USB 라이브러리를 사용하여 ATtiny45를 프로그래밍하는 적절한 방법을 묻고 싶습니다. 어떻게, 어떻게해야할지 모르겠습니다. AVRDUDE를 살펴 보았습니다. 지금까지 부트 로더를로드해야한다는 것을 알고 있습니까 ??? 펌웨어뿐만 아니라 작은 파일 (16 진수 파일 ??). 그리고 내 응용 프로그램의 코드를 변경 한 후에 C 코드 (예 : easylogger 예제)를 컴파일해야한다고 생각합니다. 권리 ?
Ace

또한 회로를 최소한으로 "단순화"할 수 있습니까? 예를 들어 LED 때문에 혼란스러워합니다. 현재 LED 또는 센서와 같은 추가 구성 요소가 필요하지 않습니다.
에이스

D2와 D3는 어떤 종류의 다이오드입니까? 쇼트 키 다이오드?
Ace

또한 퓨즈 비트는 어떻습니까? 그리고 당신이 연결 한 게시물의 끝 부분은 퓨즈에 대해 말합니다. 퓨즈에 문제가 있으면 작은 것을 망칠 수 있다고 들었습니다.
Ace

5

기본적으로 USB는 신호 라인 레벨 구동, 타이밍 및 종료에 대한 특정 요구 사항이있는 고급 통신 프로토콜입니다. 직렬만큼 간단하지 않고 차동 데이터 라인과 NRZI 인코딩, 필요한 폴링, 핸드 쉐이킹 등이 있습니다. USB / 직렬 어댑터가 필요하거나 USB 하드웨어 또는 소프트웨어 구현이 필요한 이유입니다.

USB는 5V 전원을 사용하지만 신호선은 실제로 3.3V ~ 3.6V입니다. 이것이 바로 VUSB 회로가 두 라인에서 제너 다이오드를 사용하는 이유입니다. Tiny는 3.3V에서 필요한 16MHz로 클럭킹 할 수 없기 때문에 3.3V에서 간단히 동작 할 수 없다.

나머지 부품 R1-R3, D1, D2 및 C1, C2는 최소 필수 부품입니다. 그것은 실제로 당신이 얻는 기능을 많이 요구하지는 않습니다. vusb를 사용하는 모든 프로젝트 목록은이 페이지를 참조하십시오.

스위치, R4 및 LED1은 모두 특정 데이터 로깅 펌웨어 예의 일부이며, 필요하지 않거나 펌웨어를 변경하지 않으면 피할 수 있습니다.


그 답변에 감사드립니다. 나는 usb의 데이터 라인이 ~ 3.3V를 사용한다는 것을 알고 있었다. 그러나 내가 이해하지 못하는 것은 USB 신호가 정확히 어떻게 정의되어 있습니까? 그 행이 아닌가? 루프에서 올바른 타이밍으로 해당 비트를 "에뮬레이션"할 수 없습니까 (튜닝 신호 켜기 ​​및 끄기)? 나는 이미 내부 osc를 8MHz에서 실행하고 4800의 시리얼 보드 레이트를 사용하기 때문에 이미 찾은 블로그 포스트에 따르면 타이밍에 문제가 없어야합니다.
Ace

1
@Ace 4800bps는 4.8khz입니다. USB 저속은 1.5MHZ이며 인코딩, 패리티, USB 디스크립터 및 모든 것이 있습니다. VUSB는 USB 데이터를 "에뮬레이션"하지만 매우 복잡합니다.
통행인

1
@Ace 기본적으로 모니터를 탭하여 컴퓨터에서 모스 코드를 사용하려는 사람과 동등한 작업을 수행하려고합니다.
통행인

HAHA XD 4800의 boudrate를 사용하는 이유는 내 업데이트의 두 번째 링크에 설명되어 있습니다.
Ace

1

한 게시물에 답변하기에는 너무 많은 질문이 있지만 몇 가지 간단한 요점이 있습니다.

일부 마이크로 컨트롤러에는 USB "엔드 포인트"와 관련 하드웨어가 포함되어 있지만 Atmel 사이트 는 ATTiny45가 그렇지 않다는 것을 보여줍니다.

따라서 USB는 전자 및 프로토콜 수준에서 복잡한 버스이기 때문에 마이크로 컨트롤러 포트를 USB 커넥터에 간단히 연결할 수는 없습니다.

그러나 아래 주석에서 언급 한 것처럼 V-USB를 사용하여 올바른 줄을 검색하고 있지만이를 사용하지 않았으므로 다른 사람들이 주석을 남기게됩니다.

FTDI 칩은 납땜하기에 너무 어렵지는 않지만 솔더 레지스트가있는 적절한 PCB를 사용하면 더 쉽게 만들 수 있습니다.

이전에는 이 FT232 케이블 과 같은 것을 사용했습니다 .

FT232 USB 케이블
(출처 : ftdichip.com )

USB 커넥터에 FTDI 칩이 내장되어 있으며 전원을 공급하는 동시에 모든 레벨 변환을 처리합니다. 끝은 핀 헤더에 연결할 수있는 간단한 0.1 "피치 커넥터입니다.

합리적인 가격으로 eBay에서 구입할 수 있습니다.



꽤 흥미 롭습니다. 그에 따라 게시물을 편집하겠습니다. 다른 사람이 V-USB 관련 사항을 도울 수 있습니다.
David

@David-예, VUSB는 기본적으로 USB를 에뮬레이트합니다. 게시물은 일반적으로 정확하지만이 방법을 통해 ATTiny 제품군을 USB에 연결할 수 있습니다.
Gustavo Litovsky

답변 주셔서 감사합니다. USB A 헤드가있는 단일 보드 (예 : computerkabelversand.de/pictures/picturesbig/… ) 가있는 단일 보드에서 프로젝트를 빌드 할 계획 이라고 생각했습니다. 기본적으로 일반적인 USB 스틱처럼 보입니다. 케이블이없고 다른 쪽 끝에 3 핀 잭이 있습니다. 이것이 제가 "모듈 식"이라고 부르는 이유입니다. 이 방법으로 ATtiny를 개별적으로 프로그래밍 할 수 있으며 (이동식 임) 다른 센서 / 장치를 3 또는 4 (아직 사용하지 않는 RX) 왼쪽 핀에 연결했습니다.
Ace

1
이것을 오늘 당신에게 유용하게 보았습니다
David
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.