Oprogramowanie układowe i obwód bezpośredniego połączenia USB 2.0 ATtiny45


9

Chcę stworzyć własne modułowe urządzenie USB za pomocą ATtiny45, który po prostu wysyła dane do komputera przez USB. Nie czytam danych, więc połączenie jednokierunkowe (ATtiny -> PC) byłoby całkowicie w porządku.

Używam Arduino Uno jako ISP ze standardowym szkicem ArduinoISP załadowanym z oprogramowania Arduino. Zastanawiam się nad użyciem AVRDUDE do programowania ATtiny45 z Arduino jako ISP, ponieważ chcę móc używać kodu C skompilowanego do HEX, ponieważ jest on bardziej zaawansowany niż Arduino Programming Langue.

Moje podstawowe myśli o obwodzie: wprowadź opis zdjęcia tutaj

Jak widać, chcę „bezpośredniego” połączenia USB. Jak dotąd wiem, że muszę do tego użyć rozwiązania programowego.

  1. Udało mi się SoftwareSerial współpracować z moim ATtiny45. W tym celu użyłem oprogramowania Arduino do zaprogramowania ATtiny45 następującym kodem:

    #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);
    }

    Pamiętaj, że nie używam Pin 3 (jeszcze), ale muszę to zdefiniować dla SoftwareSerial.

    W ten sposób, korzystając z SoftwareSerial, byłem w stanie wysłać dane z ATtiny bezpośrednio do pinu TX mojego Arduino UNO, który został załadowany do niego pusty szkic na potrzeby tego testu. Używałem Serial Monitor oprogramowania Arduino do odczytu danych na COM4 (w moim przypadku), ponieważ mój komputer nie rozpoznał żadnego urządzenia (portu COM), ponieważ próbowałem podłączyć zaprogramowane ATtiny bezpośrednio do kabla USB.

    Niestety mam tylko dziwne znaki Unicode w Serial Monitor. Myślę, że dzieje się tak, ponieważ dane są w formacie szesnastkowym. Zauważyłem więc, że muszę podłączyć konwerter USB / szeregowy między USB a ATtiny45 ... Szukałem takich konwerterów, ale nie chcę używać żadnych gotowych płyt, ponieważ chcę wszystkich moje komponenty na jednej płycie. Myślę, że układ FTDI byłby o wiele za duży dla mojego projektu, prawda? (Ma zbyt małe szpilki, by lutować ...)

  2. V-USB było wtedy moim drugim podejściem, ponieważ nie wymaga konwertera USB / szeregowego (jak wiem). Aby użyć V-USB, musiałbym użyć AVRDUDE, jak wspomniałem wcześniej.

    Znalazłem ten ładny przykład V-USB EasyLogger . Zawiera projekt obwodu i przykładowe oprogramowanie układowe. (C / C ++ / HEX)

    Jedyne, co chcę wiedzieć, to: czy naprawdę muszę sprawić, aby mój obwód wyglądał tak, jak pokazano w przykładzie? -> wprowadź opis zdjęcia tutaj

Co jeszcze muszę wiedzieć o tego rodzaju połączeniu USB? (Dlaczego potrzebuję konwertera USB / szeregowego? Czy mogę po prostu podłączyć +5 i VCC? Jakie elementy są absolutnie potrzebne? Jaki rodzaj sygnału muszę wysłać przez TX? Bity? Szesnastkowy? Jakiego napięcia potrzebuje być ? )

Dziękuję za wszystkie odpowiedzi.


AKTUALIZACJA

Oto kilka dodatkowych linków, które naprawdę pomogły mi w niektórych punktach. Ale nadal nie rozumiałem tego w pełni ...

pierwszy -> http://www.ernstc.dk/arduino/tinycom.html

a drugi -> http://www.re-innovation.co.uk/web12/index.php/en/blog-75/227-attiny-arduino (przewiń w dół do sekcji „Wyjście szeregowe”)


2
Tak, robisz to, przynajmniej jeśli nie chcesz zbyt mocno naruszać specyfikacji limitu elektrycznego . Uwaga: złącze „USB” na górnym schemacie jest rażąco błędnie oznakowane. D + / D- nie są odrębnymi liniami nadawczo-odbiorczymi, ale raczej dwukierunkową parą różnicową .
Chris Stratton

Przepraszam za mój zły szkic. Naprawdę nie jestem elektrykiem, ale programistą. „Rysunek” był tylko wizualizacją moich myśli, które miałem na myśli, planując ten projekt.
Ace

Odpowiedzi:


5

Możesz komunikować się ATtiny45 bezpośrednio z USB, bez konwertera FTDI.

Aby wszystko działało, potrzebujesz biblioteki V-USB .

Bardzo dobrym przykładem wszystkiego pracy jest tutaj , że wykorzystuje ona ten sam przykład z EasyLogger.

Ten sam autor ma kilka innych ciekawych wskazówek i projektów z USB i USB.

Przykładowy obwód z ATtiny:

schematyczny

symulacja tego obwodu - Schemat utworzony przy użyciu CircuitLab


Pytający już spojrzał na V-USB.
Ignacio Vazquez-Abrams,

Dziękuję bardzo. Spróbuję tego jak najszybciej. Ale najpierw chcę cię zapytać o propperujący sposób na zaprogramowanie ATtiny45 z lib V-USB. Nie jestem pewien, co i jak zrobić. Zajrzałem do AVRDUDE. do tej pory wiem, że muszę załadować bootloader ??? do malutkiego, a także oprogramowania układowego (plik hex?). I myślę, że muszę skompilować kod C (np. Przykład easylogger) po zmianie kodu mojej aplikacji. dobrze ?
Ace

a także czy mógłbyś „uprościć” obwód do absolutnego minimum? Jestem zdezorientowany z powodu np. Diody LED ... naprawdę nie potrzebuję żadnych dodatkowych elementów, takich jak diody LED lub czujniki.
Ace

i jakie diody to D2 i D3? Diody Schottky'ego?
Ace

a co z bitami Fuse? a na samym końcu posta, który podlinkowałeś, mówią coś o bezpiecznikach? Słyszałem, że jeśli zrobię coś nie tak z bezpiecznikami, mogę zepsuć maleństwo?
Ace

5

Zasadniczo USB jest protokołem komunikacyjnym wysokiego poziomu, który ma określone wymagania dotyczące sterowania, synchronizacji i terminacji na poziomie linii sygnałowej. Nie jest tak prosty jak szeregowy, ma różnicowe linie danych i kodowanie NRZI, wymagane odpytywanie, uzgadnianie itp. Dlatego właśnie potrzebujesz adaptera USB / szeregowego, lub potrzebujesz implementacji sprzętu lub oprogramowania USB.

Podczas gdy USB wykorzystuje zasilanie 5 V, linie sygnałowe są w rzeczywistości od 3,3 V do 3,6 V. Właśnie dlatego pokazany obwód VUSB wykorzystuje diody Zenera na tych dwóch liniach. Mały nie może po prostu działać przy 3,3 V, ponieważ nie może być taktowany przy wymaganym 16 MHz przy 3,3 V.

Reszta części, R1-R3, D1, D2, i C1, C2 są absolutnie minimalnymi wymaganymi częściami. To tak naprawdę nie wymaga dużo funkcji. Zobacz tę stronę, aby uzyskać listę wszystkich projektów korzystających z vusb.

Przełącznik, R4 i LED1 są częścią konkretnego przykładu oprogramowania do rejestrowania danych i można ich uniknąć, jeśli nie jest potrzebny / nie zmienia oprogramowania.


Dziękuję za tę odpowiedź. Wiedziałem, że linie danych USB używają ~ 3,3 V. Ale nie rozumiem, jak dokładnie zdefiniowany jest sygnał USB? Czy to nie rząd bitów? Czy nie mogę po prostu „emulować” tych bitów z właściwym taktowaniem w pętli (włączanie i wyłączanie sygnału strojenia)? Mam już małe użycie wewnętrznego osc do pracy z częstotliwością 8 MHz i seryjnego boudrate 4800, więc czas nie powinien stanowić problemu zgodnie z niektórymi wpisami na blogu, które znalazłem ...
Ace

1
@ As 4800 bps to 4,8 kHz. Niska prędkość USB wynosi 1,5 MHZ I jest kodowanie, parzystość, deskryptory USB i wszystko. VUSB „emuluje” dane USB, ale jest to bardzo złożone.
Passerby,

1
@ W zasadzie próbujesz zrobić odpowiednik kogoś, kto próbuje użyć kodu Morse'a na komputerze, dotykając monitora.
Passerby,

HAHA XD Powód, dla którego używam boudrate 4800 jest wyjaśniony w drugim linku w mojej aktualizacji.
Ace

1

Zbyt wiele pytań, aby odpowiedzieć w jednym poście, ale oto kilka krótkich punktów:

Niektóre mikrokontrolery zawierają „punkt końcowy” USB i odpowiedni sprzęt, ale strona Atmel pokazuje, że ATTiny45 nie.

Dlatego nie można po prostu podłączyć portów mikrokontrolera do takiego złącza USB, ponieważ USB jest skomplikowaną magistralą zarówno na poziomie elektronicznym, jak i protokołu.

Jednak, jak zauważono w komentarzach poniżej, wyszukujesz właściwe V-USB, nie użyłem tego, więc zostawię komentarz.

Chipy FTDI nie są zbyt trudne do lutowania, ale odpowiednia płytka z opornością lutowniczą ułatwi to.

Wcześniej używałem czegoś takiego jak ten kabel FT232 :

Kabel USB FT232
(źródło: ftdichip.com )

Ma wbudowany układ FTDI w złączu USB i obsługuje translację wszystkich poziomów, a także zapewnia zasilanie. Koniec to proste złącze o skoku 0,1 ", które można podłączyć do listwy kołkowej.

Są dostępne w serwisie eBay w rozsądnych cenach.



To całkiem interesujące. Zmienię odpowiednio swój post, być może ktoś inny może pomóc w szczegółach V-USB.
David

@David - Tak, VUSB zasadniczo emuluje USB. Twój post jest ogólnie poprawny, ale w szczególności tę rodzinę ATTiny można podłączyć do USB.
Gustavo Litovsky

Dzięki za odpowiedź. Powinienem był pomyśleć, że planuję zbudować projekt na jednej płycie, która ma głowę USB A (jak ta komputerkabelversand.de/pictures/picturesbig/… ). więc w zasadzie wygląda jak zwykła pamięć USB. bez kabli, tylko 3pin-jack na drugim końcu. dlatego nazwałem to „modułowym”. w ten sposób jestem w stanie zaprogramować ATtiny indywidualnie (jest wymienny) i mieć moje różne czujniki / urządzenia podłączone do 3 lub 4 (RX, którego jeszcze nie używam) lewych pinów.
Ace

1
Widziałem to dzisiaj, które może ci się przydać
David
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.