Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Atmega8][C] - Niedziałający układ do v-usb

Pershing95 02 Lip 2013 09:32 2211 8
  • #1 02 Lip 2013 09:32
    Pershing95
    Poziom 6  

    Chcę zrobić komunikację Atmega <---> komputer przez USB. Szperając po sieci natrafiłem na projekt V-USB. Niestety lokalny sklep elektroniczny (ah ta prowincja) nie posiadał odpowiednich elementów a jedynie zbliżone. Komputer wykrywa urządzenie, ale VendorID i DeviceID to 0x0000 - nie działa :cry:

    Schemat z wartościami elementów w moim układzie:

    [Atmega8][C] - Niedziałający układ do v-usb

    Tak to wygląda na płytce stykowej (sorry za paskudną jakość ale nie posiadam teraz nic innego poza starym telefonem)

    [Atmega8][C] - Niedziałający układ do v-usb

    Czy zmiana wartości diód zenera z 3v6 na 3v3 może spowodować taki błąd?

    0 8
  • #2 02 Lip 2013 09:40
    tmf
    Moderator Mikrokontrolery Projektowanie

    Tak, gdyż zaczynają przewodzić wcześniej i obciążają linie D+ i D-.
    Z drugiej strony uruchomisz to pseudo-USB i co dalej?
    Nie prościej używać w XXI wieku rozwiązań na miarę XXI wieku:
    http://mikrokontrolery.blogspot.com/2011/03/X...emulacja-portu-szeregowego-rs-232-na-USB.html
    Prościej, taniej, a przede wszystkim w 100% zgodne ze standardem USB.
    Jeśłi wolisz ATMega to są ATMegi ze sprzętowym USB.

    0
  • #3 02 Lip 2013 09:46
    Pershing95
    Poziom 6  

    eh... Będę musiał sobie załatwić w takim razie te diody. Trochę dziwne byłoby kupowanie Xmegi po miesiącu zabawy z elektroniką :D i przy pustce w portfelu :D

    Myślałem o układzie FT232 ;), ale v-usb wydało mi się prostsze. Ale robiłeś już takie USB? Zależałoby mi na wypowiedzi osoby która robiła taki połączenie i podpowiedziała na co należy uważać.

    0
  • #4 02 Lip 2013 10:00
    perlon
    Poziom 19  

    Pershing95 napisał:
    ...Ale robiłeś już takie USB? Zależałoby mi na wypowiedzi osoby która robiła taki połączenie i podpowiedziała na co należy uważać.

    Jakbyś kolego poczytał trochę elektrodę to byś wiedział, że kol. tmf robił już prawie wszystko ;-)

    0
  • #5 02 Lip 2013 10:06
    Pershing95
    Poziom 6  

    Przy 10 postach ciężko powiedzieć, że znam ludzi z elektrody :D Dobra lecę po diody (nawet się rymuje :D)

    0
  • #6 02 Lip 2013 10:12
    tronics
    Poziom 36  

    Pershing95 napisał:
    eh... Będę musiał sobie załatwić w takim razie te diody. Trochę dziwne byłoby kupowanie Xmegi po miesiącu zabawy z elektroniką :D i przy pustce w portfelu :D

    Myślałem o układzie FT232 ;), ale v-usb wydało mi się prostsze. Ale robiłeś już takie USB? Zależałoby mi na wypowiedzi osoby która robiła taki połączenie i podpowiedziała na co należy uważać.

    Na nic zasadniczo nie trzeba uważać o ile jesteś w stanie dokonać wszystkich koniecznych połączeń. Ze względu na to, że FT232RL nie wymaga zupełnie żadnych zewnętrznych elementów (kwarcu, eeproma itp) masz sprawę uproszczoną. 2 jumpery i masz dodatkowo wybór napięć IO między 5 a 3.3V (dobre jeśli chciałbyś kiedyś do xmegi czy arm podłączać). Problemem może być jedynie rozstaw wyprowadzeń gdybyś chciał budować samemu.

    0
  • Pomocny post
    #7 02 Lip 2013 11:10
    tmf
    Moderator Mikrokontrolery Projektowanie

    Z V-USB zetknąłem się lata temu, wtedy praktycznie nie było dostępnych prostych procków z USB sprzętowym i jako hack było to godne odnotowania. Pokaz fajnego, programistycznego myślenia i optymalizacji. Ale czas płynie i obecnie po prostu nie ma sensu używać takich rozwiązań. Ani cenowo, ani funkcjonalnie to się nie sprawdza. Warto wziąć pod uwagę, że systemy operacyjne zaczynają wymagać podpisanych sterowników i robi się problem. FTDI jest prosty i fajny, ma sterowniki do każdego OSu, ale to dodatkowy układ i cena - kilkanaście (14 i więcej) złotych. W tej cenie można mieć procka z USB, a jak widać na przykłądzie pokazanego wcześniej artykułu połączenie tego w celu zrobienia wirtualnego portu szeregowego jest banalnie proste.
    Kolega Pershing95 obruszył się zaproponowaną XMEGA, ale to zwykły AVR, w dodatku tani. Oczywiście można wziąć ATMega U2 i też będzie ok.
    Zaletą rozwiązania opartego na XMEGA/ATMega z USB jest też to, że mamy zaimplementowane wszystkie urządzenia HID. W dodatku sprzętowe rozwiązanie nie obciąża tak procesora, w efekcie nie trzeba za bardzo kombinować jeśli procek ma robić jeszcze coś innego oprócz obsługi USB.

    0
  • #8 06 Lip 2013 09:55
    Pershing95
    Poziom 6  

    OK zakupiłem diody 3V6 oraz oporniki 68Ω oraz wgrałem poniższy program ze strony: http://codeandlife.com/2012/01/29/avr-attiny-usb-tutorial-part-3/.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kompilator wywala mi 11 błędów:
    Code:
    Description   Resource Path Location Type Assignment to itself 'notResetState = notResetState'   
    
    Symbol 'usbMsgPtr_t' could not be resolved   
    Symbol 'usbMsgPtr_t' could not be resolved   
    Symbol 'usbMsgPtr_t' could not be resolved   
    Symbol 'usbMsgPtr_t' could not be resolved
    Symbol 'usbMsgPtr_t' could not be resolved
    Symbol 'usbMsgPtr_t' could not be resolved
    Type 'usbMsgPtr_t' could not be resolved   
    Type 'usbMsgPtr_t' could not be resolved   
    Type 'usbMsgPtr_t' could not be resolved   
    undefined reference to `usbDescriptorHidReport'


    Oczywiście wziąłem poprawkę na plik makefile i wprowadziłem w nim potrzebne zmiany. Uruchamiałem też HID mouse ale komputer nawet nie wykrywał żadnego urządzenia. Pomocy...

    0
  • #9 23 Lip 2013 19:36
    kundzios
    Poziom 19  

    Pershing95, na schemacie w pierwszym poście jest błąd, standardowo D+ musi być podłączone pod INT0 (lub innego INTx). Co do wartości elementów to diody 3.3V będą działać, kiedyś na elektrodzie pojawiały się posty na temat usbasp nie działającego z laptopami, zmiana na diody 3.3V pomagała. Ja w tej chwili mam zbudowany układ który także nie ma ściśle takich samych wartości (akurat takie były pod ręką) i pracuje poprawnie.
    Jeśli zmieniasz podłączenie USB do procesora to zmiany musisz wprowadzić w usbconfig.h .

    0