logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR][C] - V-USB - pytanko

mirekk36 07 Wrz 2010 17:45 2182 13
  • #1 8485944
    mirekk36
    Poziom 42  
    Witam,

    Czy komuś zechciałoby się chociaż w 2-3 zdaniach podpowiedzieć jak zabrać się za implementację V-USB w procku żeby toto działało w trybie HID ???

    Tzn, żeby nie było - zassałem sobie teoretycznie odpowiedni wręcz niby gotowiec:

    http://www.obdev.at/products/vusb/hidkeys.html

    Jest schemacik , jest kod - no teoretycznie wszystko tylko, że działa połowicznie i trudno mi dojść co i jak tak na pierwszy rzut oka :(

    Tzn działa tylko to, że Windows ładnie, grzecznie i potulnie rozpoznał urządzenie HIDKeys - to wsio (natomiast żadne klawisze nie działają). Tzn mam aplikację, która widzi urządzenia HID w systemie i ładnie pokazuje co one przesyłają do kompa np jakiś Joy - widzę latające raporty po wciśnięciu dowolnego na nim klawisza.

    Ale może ktoś (please) jakoś w kilku punktach usystematyzował co po kolei trzeba ustawić ? gdzie ? żeby ruszyć z jakimś nawet prostym projektem, który będzie działał na 1 klawisz ale też mógł odbierać jakieś dane.

    Czy jest różnica w podłączaniu ??? bo na niektórych schematach D- podłączony jest do 2 pinów procka a drugi do jednego. Na innych schematach bywa inaczej. O co tu chodzi?

    Może chociaż jakieś wskazówki - od czego zacząć? co poprzeglądać jeszcze?
  • Pomocny post
    #2 8486010
    gaskoin
    Poziom 38  
    Jeśli chodzi o implementację czegokolwiek to trzeba się niestety przekopać przez wszystkie pliki nagłówkowe i to dość szczegółowo, tam jest w zasadzie wszystko jest.

    W samym V-USB też jest folder z przykładami HID. Możesz też zajrzeć w źródła capslockera

    Cytat:
    Czy jest różnica w podłączaniu ??? bo na niektórych schematach D- podłączony jest do 2 pinów procka a drugi do jednego. Na innych schematach bywa inaczej. O co tu chodzi?


    chyba raczej D+, w bibliotekach jest to opisane, MUSI być podłączony do INT0, dodatkowo do własnych potrzeb możesz podpiąć gdzieś indziej
  • #3 8486114
    mirekk36
    Poziom 42  
    gaskoin --> no to ja wiem, że muszę się przekopać, nic mnie z tego nie zwolni i tak i tak, jednak może ktoś coś tak w pigułce w międzyczasie coś podpowie - to będzie szybciej może.

    Tak samo nie mogę natrafić od razu na ślad, czym się różni to podłączenie do procka na 3 piny albo tylko na 2 ?? z czym to się wiąże jeśli chodzi o działanie.

    Ale za przykład capskockera dzięki ;) - poszperam i w nim.
  • #4 8486145
    Mat_91
    Poziom 25  
    Jeżeli chodzi o działanie na 2 piny lub 3 to nie ma żadnej różnicy, chodzi o to jak już kolega wspomniał że jedna linia musi być podpięta do INT bo implementacja V-USB opiera się na przerwaniach, nie podepniesz do INT- nie będzie działało.
  • #5 8486201
    gaskoin
    Poziom 38  
    Cytat:
    gaskoin --> no to ja wiem, że muszę się przekopać, nic mnie z tego nie zwolni i tak i tak, jednak może ktoś coś tak w pigułce w międzyczasie coś podpowie - to będzie szybciej może.


    niestety - musisz się przekopać i już, bo właściwie to trzeba przekopać plik usbconfig.h usbdrv.h. Informacji tam zawartych jest dość sporo i nie da się w 3 zdaniach napisać - wejdź tu, ustaw to, wejdź tam ustaw tamto :)
    Czym więcej dowiesz się sam tym lepiej dla Ciebie, korzystanie ze szczątkowych informacji dobrze się nie kończy. Na zachętę zdanie wyjaśnienia:

    Cytat:
    USB lines D+ and D- MUST be wired to the same I/O port. We recommend that D+
    triggers the interrupt (best achieved by using INT0 for D+), but it is also
    possible to trigger the interrupt from D-. If D- is used, interrupts are also
    triggered by SOF packets. D- requires a pull-up of 1.5k to +3.5V (and the
    device must be powered at 3.5V) to identify as low-speed USB device. A
    pull-down or pull-up of 1M SHOULD be connected from D+ to +3.5V to prevent
    interference when no USB master is connected.
  • #6 8486706
    mirekk36
    Poziom 42  
    No dobra, skoro nikt jakoś nie umie w skrócie podpowiedzieć (a może się nie da? no nieważne)

    To może zanim przebrnę przez całość ktoś odpowie mi na kilka prostych pytań natury ogólnej.

    1. Tak tylko z czystej ciekawości , bo jakoś nie mogę dostrzec żadnych zalet tworzenia urządzeń typu HID w oparciu o V-USB. Po co komu i do czego się przydają takie klawiaturki, różnego typu, generowanie wciskanego wciąż klawisza, emulacja myszki albko dżojstika ??? tak poza zabawą albo poza robieniem komuś kawału??? Pytam na serio - bo może ja czegoś nie potrafię dostrzec .

    2. Czy jeśli już załóżmy uda mi się zrobić takie urządzonko własne HID, to czy będzie można bez problemu nie tylko wysyłać ale i ODBIERAĆ z kompa jakieś dane ??? (nie ważne jakiej długości czy że może będą musiały być w jakimś tam formacie z góry narzuconym.?

    to narazie tyle ;)

    Dodano po 53 [minuty]:

    eeee tam, nie da się nic podpowiedzieć - jak się nie chce albo nie wie to się nie da.

    Proszę bardzo a tu się da:

    https://www.elektroda.pl/rtvforum/topic1314855.html

    kolega się w tym wątku naprodukował że szok. tyle cennych informacji i to akurat to o co mi chodziło. Jutro sobie potestuję.
  • Pomocny post
    #7 8487012
    tymon_x
    Poziom 30  
    mirekk36 napisał:
    1. Tak tylko z czystej ciekawości , bo jakoś nie mogę dostrzec żadnych zalet tworzenia urządzeń typu HID w oparciu o V-USB. Po co komu i do czego się przydają takie klawiaturki, różnego typu, generowanie wciskanego wciąż klawisza, emulacja myszki albko dżojstika ??? tak poza zabawą albo poza robieniem komuś kawału??? Pytam na serio - bo może ja czegoś nie potrafię dostrzec .

    HID - najłatwiejszy sposób wykorzystania USB do komunikacji ze wszystkich innych rozwiązaniach. Dane wysyła się za pomocą raportów, zdefiniowany przez deskryptor. Transfer w HID 800B/s (low speed) do 64kB/s (full speed), możliwość trybu bulk (masowego). To ostatnie to nawet ciekawe, w mojej klawiaturze można podpiąć pendrive'a i wprowadzić transfer pełną parą (;
    Ogólnie o USB: USB - making sense, wybrane i wyselekcjonowane rozdziały z dokumentacji potrzebne do implementacji. Reszta to wodolejstwo z tej ponad 500 stronicowej DS'a.
    mirekk36 napisał:
    2. Czy jeśli już załóżmy uda mi się zrobić takie urządzonko własne HID, to czy będzie można bez problemu nie tylko wysyłać ale i ODBIERAĆ z kompa jakieś dane ??? (nie ważne jakiej długości czy że może będą musiały być w jakimś tam formacie z góry narzuconym.?

    Tak, za pomocą raportów. Format raportów określa się za pomocą deskryptorów.
  • #8 8487096
    mirekk36
    Poziom 42  
    tymon_x --> fajny link, dzięki. A o tej wymianie raportów to właśnie zaczytałem ciekawe rzeczy i przykładowy program nawet napisany przez kolegę m_marko ! w linku który podałem wyżej. W zasadzie na razie tak na sucho jak czytam to wydaje się zrozumiałe jeśli chodzi o te jego przykłady - jutro przetestuję na żywym organiźmie i ew zadam dodatkowe pytania.
  • #9 8487320
    rpal
    Poziom 27  
    Ty się kolego przygotuj (a piszę tu bez żadnej urazy spowodowanej tym co admin niedawno wywali :) ) że jak się nie przewrócisz to się nie naucys. Myślę że czyjś przejrzysty kod będzie najlepszym nauczycielem. I podeprę tu się własnym doświadczeniem odnośnie informacji odnośnie RDS-u o którym to jakoś nikt nie potrafił się celująco wypowiedzieć. W końcu dokopałem się do źródła od jakiegoś microchipa i tam pojąłem o co biega inna sprawa że w kodzie był byk który moim zdaniem autor celowo zostawił potomnym. Więc z wielką chęcią bym pomógł ale mam taką jak powyżej właśnie radę, wujek google :) Jak masz dostęp do cegły pt.Anatomia PC to może coś niecoś się w tym temacie przybliży, ja mam w razie czego mogę ja nieco przeskanować.
  • #10 8487436
    mirekk36
    Poziom 42  
    rpal --> nie żywię żadnej urazy. Ale ja bym tam umiał komuś kto ma w ogóle zacząć coś z tym robić - cokolwiek podpowiedzieć na początek. Nawet chociażby to jak się w dokumentacji poruszać.

    Nawet już teraz mógłbym sam komuś w kilku krokach powiedzieć co i jak - zamiast odsyłać do wujka googla, którego dobrze znam ;)

    Jak już mówiłem i podałem link - kolega m_marko, jakoś mógł to przedstawić w pigułce. Nawet wysilił się z własnym kodem oraz udzielił wielu osobom pytającym wyczerpującyh odpowiedzi. Więc nie ma co opowiadać, że "się nie da"

    Co nie oznacza że uważam że nie masz racji twierdząc iż człowiek najlepiej coś pozna jak sam od początku do końca sam coś rozpozna i przerżnie że tak powiem ;) ..... Ty nie trafiłeś może nikogo kto znał obsługę RDS'a - szkoda - bo sam przyznasz, że czasem chociaż kilka wskazówek od kogoś kto cokolwiek wie - zaoszczędza dużo czasu. A ja gotowca na pewno nie oczekiwałem i wykładu Bóg wie jakiego.

    Jeśli już przebrnę ten temat - to ja osobiście na pewno chętnie udzielę takich wstępnych informacji jak zacząć się w tym poruszać dzieląc się własnym doświadczeniem bo to zwykle i tak działa w dwie strony - przy okazji człowiek i sam się czegoś dowie w trakcie ciekawej dyskusji.

    A pomagam wielu osobom i przez maila i na elektrodzie w miarę swojej skromnej wiedzy, inaczej nie miałbym tylu "pomógł" co mam.

    Dodano po 12 [minuty]:

    Przy okazji nowe pytanko na gorąco:

    czy komunikacja za pomocą Interrupt- albo Bulk-In endpoints też wchodzi w grę przy symulacji urządzenia HID ?

    czy takie dane też można w PC odebrać jakimś programem do obsługi HID? (chyba nie - prawda? ... trzeba napisać wtedy jakiś własny sterownik z wykorzystaniem LibUSB32 ?)

    (tylko proszę już bez porad typu "zapytaj wujka googla" - jak ktoś nie wie albo nie chce podpowiedzieć to lepiej niech nie pisze ok?)
  • Pomocny post
    #11 8487739
    hotdog
    Poziom 26  
    mirekk36 napisał:

    czy takie dane też można w PC odebrać jakimś programem do obsługi HID? (chyba nie - prawda? ... trzeba napisać wtedy jakiś własny sterownik z wykorzystaniem LibUSB32 ?)


    Oczywiście że się da. Nie wchodząc w całą topologię USB (to komputer odpytuje urządzenia o potrzebę jakiejś "akcji"). HID da się zastosować wszędzie tam gdzie nie potrzeba wysokich prędkości transmisji. Ot chociażby programator avrdude. Nawet głupia klawiatura ma komunikację w dwie strony (można zapalić diody z komputera :)).

    HID ma taką zaletę że nie trzeba pisać sterowników, ale za to trzeba CAŁĄ obsługę urządzenia zawrzeć w programie właśnie poprzez raporty i ich deskryptory.

    Musisz porostu opisać co który bajt oznacza, co robi itd.

    Zacznij od przykładu examples\hid-data\ z archiwum biblioteki. Ja od niego zaczynałem. Program zapisuje i odczytuje 128 bajtów do eepromu. Nie wiem czy dobrze pamiętam, ale przy schemacie trzeba D+ i D- podłączyć w obrębie tego samego portu (czyli PORTD, PORTB - tam gdzie jest INT)

    Projekt jest ok, ale sumie w przypadku każdego zastosowania powinno się coś tam im zapłacić. Chyba żeby wykorzystać starszą wersję które chyba miały inne licencję.
  • #12 8487878
    mirekk36
    Poziom 42  
    No tak, już doczytałem o tym odpytywaniu ze strony kompa ale dzięki za wskazówki. Co do opłat, to jeśli znalazłoby się już jakieś praktyczne i komercyjne rozwiązanie to można tam zapłacić te 199 eurasków na początek (do 150 urządzeń chyba)

    Dodano po 1 [godziny] 44 [minuty]:

    No i proszę, wszystko chula pięknie, gra i buczy ;)

    Miałem wprawdzie problem z odpaleniem testowego programu na ATmega328P ale okazało się, że to przez starsze drivery v-usb, które jeszcze używały starych nazw wektorów przerwań od SIGNAL, po zamianie w pliku *.S nazwy wektora na IBT0_vect wszystko ładnie ruszyło.

    Transmisja działa w dwie strony jak należy.
  • #13 8488481
    hotdog
    Poziom 26  
    mirekk36 napisał:
    No tak, już doczytałem o tym odpytywaniu ze strony kompa ale dzięki za wskazówki. Co do opłat, to jeśli znalazłoby się już jakieś praktyczne i komercyjne rozwiązanie to można tam zapłacić te 199 eurasków na początek (do 150 urządzeń chyba)


    Niby tak, ale urządzenie nie jest elektrycznie zgodne z USB (przynajmniej tak gdzieś przeczytałem) i oficjalnie nie powinno się pisać że taki interfejs posiada. Gdzieś chyba w dokumentacji było napisane, że nie jest certyfikowane przez organizację standaryzującą USB.

    200 euro w przeliczeniu na sztukę wychodzi ok 5zł.

    Patrząc na ceny avr'ów, chyba lepiej dorzucić te 5zł do procka i kupić chociażby jakiegoś Cortex'a z USB (np LPC1313FHN33 przy 30 sztukach w kamami to 13,61zł, STM32F103C6T6 przy 30 w tym samym sklepie to 16,11). Możliwości masz wtedy podniesione do n'tej. Oczywiście to tylko podejście jakie ja bym przyjął.

    Pozdrawiam.
  • #14 8488501
    mirekk36
    Poziom 42  
    Rozumiem twoje podejście, ale ja, jeśli wystarczy mi użyć np ATtiny45 żeby zrobić to co mam do zrobienia, to nie będę rzucał się od razu na LPCxxx, STMxxx i tym podobne....

    A to, że nie jest zgodne ze standardem to w przypadku tych projektów, które będę miał ew do zrobienia - w zasadzie mnie czochra ;) skoro zawsze ładnie działa. Niektórzy wprawdzie co i rusz piszą, że im a to USBASP nie działa z laptokiem, a to, że innego projektu na v-usb jakiś komp nie rozpoznaje. A moim patentem na takie problemy jest stosowanie diod zenera na 3,3V zamiast tak jak wszędzie opisują 3,6V. To już nie raz pomogło wielu ludziom jak im doradziłem, po czym się okazało że USBASP ożył

    Dopiero jak klient się uprze i będzie chciał coś lepszego chcąc zapłacić za to odpowiednią cenę - wtedy i ja sięgnę po LPCxxxx w takich przypadkach ;)
REKLAMA