Autor článku popisuje možnosť prepojiť MCU AVR s počítačom priamo cez USB bez potreby prídavného hardware.
Vo väčšine našich aplikácií potrebujeme prenášať aj dáta medzi MCU a PC. V dnešnej dobe keď už sériové porty dá sa povedať „vymizli“ a nahrádzajú ich univerzálne sériové zbernice USB sme pri MCU bez HW implementácie USB nútení buď použiť prevodníky UART->USB alebo USB softvérovo implementovať do MCU. Použiť prevodnik je jednoduchšia záležitosť a takisto komunikácia cez UART je jednoduchšia no napríklad taký prevodník FT232RL stojí bežne 7 € a to je už na rozmyslenie.
Nedávno ma napadlo vyskúšať softvérovu implementáciu USB. Je lacnejšia (dve rezistory, dve diody a je to :)), ale zas na druhej strane sa treba trocha popasovať so softvérom.
Vybral som si V-USB a chcel by som ju predstaviť. Je to softvérová implementácia low-speed USB zariadení pre mikrokontroléry s jadrom AVR od firmy ATMEL. Je možné použiť takmer akýkoľvek AVR mikrokontrolér bez použitia ďalších prídavných čipov.
Hlavná stránka V-USB >>
https://www.obdev.at/products/vusb/index.html
Na jeho webe sa nachádza mnoho príkladov využitia.
Hardvér
Ako testovací hardvér som si vytvoril dosku s MCU Attiny2313. Jej schému môžete vidieť na obrázku dole a ako vidno je potrebné minimum súčiastok 🙂 Prikladám aj plošný spoj (projekt) v programe Eagle.
Diódy D1 a D2 slúžia na zrazenie napájacieho napätia na hodnotu blízku 3,3 V. Xtal by mal byť čo najpresnejší a takisto netreba zabudnúť ani na kondíky 22p. Xtal je možné použiť z týchto hodnôt: 12 MHz, 12.8 MHz, 15 MHz, 16 MHz, 16.5 MHz, 18 MHz and 20 MHz.
Obr. 1 Zapojenie s ATtiny2313
Obr. 2 Plošný spoj
Obr. 3 Foto z mojej realizácie HW
Softvér
Čo sa týka softvérovej časti. Na internete som našiel výborný tutorial, ktorý sa skladá zo 4 častí a vysvetľuje sa v ňom všetko pre realizáciu softvéru pre základnú komunikáciu. Seriál nájdete na stránkach:
Celý tutorial mám prejdený a výsledkom sú dva projekty. Jedným je softvér pre MCU attiny2313 a druhým je softvér na strane PC tvorený s použitím knižníc LibUsb. Knižnice pre V-USB sú na stiahnutie tu https://www.obdev.at/products/vusb/download.html.
Prikladám moje projekty v Code::Blocks ak by bol záujem (tvorené v OS Linux Debian):
Záver
Toto riešenie prenosu dát medzi PC a MCU AVR sa mi páči v jednoduchosti realizácie HW a takisto v jeho cene. Nevýhodou je, že je narozdiel od UART zložitejší na programovanie. Preto záujemcom o V-USB želám veľa trpezlivosti a úspechov pri študovaní tutoriálov a skúšaní 🙂
Testoval si aj nejaky bootloader cez V-USB?
napr. http://www.fischl.de/avrusbboot/
Tie posledne dva linky nefunguju.
ahoj, nie neskusal som este.. nebola prilezitost (ale planujem).. zatial iba prenos cez usb_control_msg()
Ja viem, ze VUSB je oblubeny projekt, lebo doplna USB rozhranie do AVR MCU, ktore maju USB rozhranie iba v SMD verziach svojich MCU a navyse s nimi prisli pomerne neskoro.
Ta hardwarova implementacia je ale katastrofalna a ja osobne by som do svojho PC nikdy nepripojil nic tak hrozne. Nerespektuje to dovolene napatia na USB portoch; dve diody na ziskanie nizsieho napatia – ech, to je po seriovom odpore druhy najhorsi sposob ako to urobit.
Rozumiem, ze prvy argument, ktory sa tu vyskytne je „mne to funguje a nemam s tym problem, tak si kritiku strc“, ale radsej by som bol, ak by sa veci robili poriadne a korektne.
Aj neuzemnena zasuvka a spotrebice v nej pripojene mozu dobre fungovat, ale asi by som to tak umyselne nerobil, ak su ine moznosti. A tie v pripade USB rozhrania skutocne su – vsetci vyrobcovia, ktori nezpaspali dobu, maju USB MCU uz dlhe roky, je v takmer kazdom ARM-e, Microchip ma USB-cko vo vsetkych modelovych radach, od low cost za 1E az po high-end 32bit MCU za 8E. Toz tolko z mojej strany 🙂
Pre zaujimavost, nieco podobne pre PIC16F628 http://pandatron.cz/?3265&implementace_usb_portu_na_pic16f628
Ahoj lidi tohle téma dlouhou dobu sleduji, s mikroprocesory řady AVR začínám a rád bych tohle řešení použit i na nějakou ATMegu, ale nevím si s tímhle rady… Nemá někdo funkční řešení v češtině nebo nějaký dobrý návod?
Jinak dobrý článek.
pokud začínáš, tak se na tohle vykašli a pořiď si převodník USB-UART – třeba FT232 nebo PLC2303(nebo jak se to jmenuje)…. dneska to stojí pár korun
hledat něco v češtině, nebo dokonce tutoriál…. hodně štěstí, moc takových opravdu není… raději se nauč anglicky
Najvacsia bykovina na V-USB je ze musis pollovat, a kedze to nevie multitasking tak to nejako budes muset zmestit do 10MS