Skocz do zawartości

Komunikacja USB przez ATTINY85


Pomocna odpowiedź

Napisano

Witam!

Widziałem te wszystkie filmiki gdzie ludzie podpinają płytke z ATTINY85 i myk Pamela Adnerson na tapecie. Kupiłem więc gotową płytke, i z tego co wiem to po prostu podpina sie ją do komputera i programuje jak Arduino, a jako że komunikacja USB jest bezpośredni to można bardzo łatwo symulować klawiature. Nie doczekałem sie na paczke z chin więc kupiłem w lokalnym sklepie suche ATTINY. Cały dzień próbuje wgrać jakikolwiek kod używając ardu jako programatora. Moźe mnie ktoś nakierować, żeby udało mi sie sprowadzić to do stanu w którym przychodzą gotowce?

Niestety nie wiemy co podłączyłeś, jak, do czego, co tam próbujesz wgrać i w jaki sposób. Tak więc jakakolwiek pomoc jest niemożliwa, no może oprócz kilku rad ogólnych:

Sklepowo "czyste" AVRy programuje się w zasadzie wyłącznie poprzez ich sprzętowy interfejs. W przypadku tiny85 jest to rodzaj SPI wykorzystujący piny PB0, PB1, PB2 i RESET. Te 4 linie musisz podłączyć do programatora. Jeśli jest nim Arduino, musisz wgrać do niego odpowiedni program żeby płyteczkę (np. UNO) programatorem na czas jakiś uczynić. Potem przez nią ładujesz z PC do tiny tzw. bootloader. Musi to być wersja konkretnie dla tiny85 i.. już 🙂 Masz kostkę która przyjdzie do Ciebie za chwilę na płytce. Teraz musisz podłączyć to zaprogramowane tiny85 (do zasilań i USB) dokładnie tak jak jest to zrobione na oryginalnym Arduino tiny i to wszystko.

Cały czas tak robie i nic. Chciałbym móc programować tiny bezpośrednio po usb, i tak też symulować klawiature.

Tak, już wiemy czego chcesz.

A teraz napisz dokładnie co z czym i jak połączyłeś oraz - krok po kroku od samego początku (czyli nowego procka tiny) - co i jak robisz, jakich plików używasz itp itd. Jeżeli opierasz się na jakimś poradniku w sieci, wskaż go także.

1. Poradnik dotyczy Arduino IDE w wersji 1.0.4. Od tego czasu wiele się zmieniło i nie musisz ręcznie modyfikować plików, choćby boards.txt. Z komunikatów na drugim screenie widzę, że wprowadzone przez Ciebie "ręczne" zmiany trochę nabruździły. Cofnij to wszytko, bo płytki z tiny85 masz już w standardzie, np. Gemma i nie musisz niczego wstawiać z jakichś poradników.

2. Z drugiego obrazka widzę, że chcesz wgrywać coś w rodzaju mrugania diodą. Czy poprawnie załadowałeś bootloader do tiny? Użyty przez Ciebie poradnik dotyczy zamiany Arduino (np. UNO) na programator po to, by już zawsze przy jego pomocy wgrywać kolejne kody (np. blink) do tiny. Ty zdaje się chcesz zrobić tak, by to tiny miało w sobie odpowiedni bootloader i samodzielnie umiało zgłosić się na USB. W tym celu musisz:

a. Wgrać do UNO szkic Przykłady -> ArduinoISP. To zamienia UNO w programator procesorów AVR.

b. Podłączyć tiny jednorazowo do UNO poprzez SPI. To umożliwia wgrywanie dowolnych kodów do tiny. Sposób podłączenia jest opisany w nagłówku szkicu ArduinoISP. Do tiny musisz przeciągnąć z UNO zasilanie (GND, +5V), linię RESET (z pinu 10) oraz 3 linie SPI: MOSI, MISO i SCK (odpowiednio piny: 11, 12 i 13 w UNO). Oczywiście wszelkie połączenia robisz na wyłączonym zasilaniu. Jeśli chcesz, możesz uzupełnić swój programator o 3 diodki LED (z opornikami) na pinach 9, 8 i 7. Doczytaj co oznaczają. Dopiero gdy wszystkie kabelki są sprawdzone, podłączasz UNO do USB. W tej chwili tiny85 także dostaje zasilanie +5V z UNO.

c. Teraz wybierasz:

- Narzędzia -> Płyta -> Arduino Gemma (to pokazuje jaki procesor masz podpięty pod "programator" i jaki bootloader wgrać)

- Narzędzia -> Programator -> Arduino as ISP (to mówi, że po drodze między PC a procesorem jest Arduino robiące za programator)

i klikasz "Wypal bootloader". Cała operacja powinna zająć maks. 10 sekund. Od tej chwili twoje tiny85 ma w sobie bootloader umiejący udawać na dwóch pinach (PB3 i PB4) interfejs USB.

d. Teraz musisz zbudować wokół swojego tiny taki sam hardware jaki istnieje na płytkach Arduino wyposażonych w tiny85. Szczególnie ważne są oporniki na liniach USB - zarówno te szeregowe jak i jeden podciągający do 3.3V. To ważne, bez nich USB nie ruszy poprawnie.

http://codeandlife.com/wp-content/uploads/2012/03/schematic.png

e. Gdy masz już gotowy sprzęt, podpinasz go do USB swojego PCta. Jeśli wmontowałeś diodkę LED+opornik na porcie PB1, powinna zacząć ładnie pulsować a PC powinien wykryć nowe urządzenie na USB i załadować driver (dostarczony razem a systemem Arduino IDE).

f. Dopiero teraz możesz pisać kod na swoje nowe Arduino-tiny85. Przed załadowaniem go do tiny wybierasz oczywiście:

- Narzędzia -> Płyta -> Arduino Gemma

- Narzędzia -> Programator -> Arduino Gemma

klikasz "Załaduj" i czekasz na komunikat o poprawnym zaprogramowaniu układu. Teraz musisz wyjąć go z USB, zasilić z innych 5V i cieszyć się działaniem. Acha, nie działa tu Serial Port Monitor i wiele innych rzeczy. Poczytaj o tym, to mały procek to i mało może.

Pamiętaj też, że numeracja pinów jest tu inna niż w UNO, Gemma liczy je od od 0 (PB0) do 5 (PB5) a diodka LED w przypadku typowego Blink'a jest podłączona do pinu nr 1.

Powodzenia 🙂

---------------------

EDIT: Układem w tej konfiguracji nie zasymulujesz klawiatury ani nie przepchniesz żadnej innej informacji przez USB, bo ten interfejs działa tylko w trybie bootloadera (czyli po resecie procka). Bootloader z kolei nie odpali Twojego programu dopóki siedzi w gniazdku USB - tak właśnie się dzieje po zakończeniu programowania, program nie rusza. Dopiero wyjęcie płytki i zasilenie tiny ze zwykłych 5V powoduje, że bootloader zauważa brak aktywności na USB i po sekundzie-dwóch startuje Twój kod. Musiałbyś napisać i wgrać taki (skomplikowany) program, który także udaje USB, ale przedstawia się jako urządzenie w klasie HID. Dodatkowo trzeba pozbyć się (wykasować) bootloader i wpisać program z HID do "czystego" procesora poprzez programator, choćby taki jak zrobiłeś z ArduinoISP.

Postaraj się zrozumieć jak to wszystko działa, bo pewnych ograniczeń nie przeskoczysz i możesz się srogo zawieść, gdy coś po prostu nie da się zrobić.

  • Lubię! 1

Mój boże, tak bardzo ci dziękuje. Od początku do końca powiedziałeś mi co mam robić, no coś niesamowitego. Mam tylko pytanie, bo powiedziałeś że attiny symuluje usb na PB 3 i 4 a na schemacie jest to 1 i 2, o co chodzi? A, i czy diode na PB1 podłączyć bezpośrednio do PB1 czy gdzieś pomiędzy rezystory? Czy zenerki są konieczne?

Ojej, schemat wziąłem z sieci i wyglądał dobrze, ale nie zauważyłem tej zmiany pinów. Jeżeli wgrywasz bootloader Gemma, to on zakłada USB na PB3 i PB4. Powinienem wskazać schemat oryginalnej płytki:

https://www.arduino.cc/en/uploads/Main/arduino-gemma-schematic.pdf

ale na niej z kolei jest inna numeracja pinów procesora, bo posadzili swoje attiny85 w innej obudowie. Dla Ciebie ważne są oczywiście nazwy portów.

Zauważ, że tu jest zrobione wszystko tak jak być powinno, czyli tiny jest zasilane z 3.3V przez stabilizator. USB pracuje tylko na takich poziomach i nie jest bezpiecznie podłączać tu procesor 5V. Dlatego w niektórych "domowych" projektach spotyka się zasilanie 5V i diody Zenera plus oporniki. Musisz się zdecydować na któreś rozwiązanie: albo poprawne zasilanie 3.3V, albo dodatkowe Zenerki+oporniki (które są tylko obejściem problemu). Oczywiście w obu przypadkach USB musi wychodzić z PB3/4, bo to cecha wgrywanego bootloadera.

Dziękuje ci bardzo. Nie znasz może sposobu jak zrobić z tego "kaczuszke"?

[ Dodano: 03-09-2017, 16:11 ]

No wszystko jest tak jak na schemacie, oporniki, zenerki 5v1, tylko PB3 i 4 zamiast 1 i 2, diodka pulsuje, a komputer co kilka sekund na chwilke coś widzi, i natychmiastowo przestaje.

Hm, to teraz mamy już różnice tzw. osobnicze między Twoim układem a tym co powinno być i co działa. Można więc tylko zgadywać. Skoro coś tam w komputerze jarzy, to może jakiś parametr jest na granicy?

Po pierwsze sprawdź, czy to przeszkadza w programowaniu. Da się skompilować jakiś prosty kod na Gemmę i załadować go do tiny? Niechby i mruganie diodką 5 razy na sekundę. Jeśli tak, to w zasadzie.. działa 😐

Jeśli nie, to może procesor ma lekko "zwichrowany" zegar. AVR mają w środku generatory RC i nie zawsze każda sztuka ma go idealnie wykalibrowanego. USB potrzebuje tak naprawdę precyzji kwarcu więc wszystkie pomysły oparte o RC działają trochę dzięki szczęściu. Spróbuj z inną sztuką tiny85.

Możesz też zmienić napięcie. Niestety (a może w tym wypadku na szczęście?) wewnętrzny generator tiny " pływa" od napięcia zasilania. Najprostsza jest zwykł dioda krzemowa szeregowo od zasilania z gniazda USB do Vcc procesora tiny. Od razu masz 0.6V mniej. Albo dwie szeregowo... Może Zenerki są jakieś "nie teges" a może oporniki za duże lub za małe? Może wstaw na inne napięcia? Może 2.7V? Może 3.0V? Mogę tylko zmyślać, przykro mi. Ja osobiście nigdy bym tak nie zrobił w swoim projekcie ale w sieci są przykłady, że to działa nawet na płytkach stykowych. Być może Ci którym nie poszło nie chwalą się.. Na pewno lepszym rozwiązaniem jest zasilanie proca z 3.3V przez stabilizator, choć to powoduje, że cała płytka robi się 3-woltowa i potem nie będzie wolno podłączać jej do układów zasilanych z 5V a niestety wiele czujników jest takich. Odpadają wtedy Zenery na USB i ta "garażowa" implementacja tego interfejsu jest bardziej zgodna ze specyfikacją.

Możesz też zmienić kabel USB na.. lepszy. Nie pytaj proszę co to znaczy. Może tylko krótszy? Jeśli masz po drodze hub USB (np. w monitorze) to go wywal i podepnij się wprost do płyty głównej PC.

Na pewno procesor potrzebuje kondensatorów bezpośrednio na swoim zasilaniu. Dałeś jakieś (10uF + 100nF) tuż przy pinach GND/Vcc? No wiesz, musisz kombinować. Raczej nie będzie "złotej" rady 😐

Ciekawe jak zadziała oryginalna płytka i jaki będzie miała bootloader. Co zamówiłeś? Niektóre są inne niż oryginalna Gemma (nawet w tak prostym układzie można coś zmienić, choćby numery linii portów do USB) i wymagają jednak doinstalowania pakietu nowych płytek..

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...