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

[Asm] transmisja USB <-> ATmega8 nie RS

Adrian_sekowski 02 Mar 2011 14:20 2123 3
  • #1 9225368
    Adrian_sekowski
    Warunkowo odblokowany
    Witam

    Mam nadzieje i liczę na waszą pomoc a nie tylko że to było gdzieś tam to sobie poszukaj,,, albo poczytaj tam --> a tu sam język angielski.

    Jak wiecie prawie wszystko można samemu zrobić i samemu do tego dość. Ale, no właśnie, ale to będzie długo trwało... Dlatego piszę tutaj zakładając nowy temat ponieważ szukając na elektroda.pl znalazłem strzępki informacji z których nie jestem w stanie nic wywnioskować.

    Najpierw napiszę co chce zrobić i przedstawić jak ja to widzę, myślę że da się tak zrobić ale nie wiem jak dlatego liczę na tych co już to zrobili i doszli co z czym udzielą mi jakiś wskazówek (jeżeli nie chcecie na Forum możecie pisać PW - pozyskane informacje zachowam dla siebie w takiej sytuacji).

    A więc zajmuję się od długiego czasu AVR ATmega8 hobbistycznie dla siebie. Zbudowałem sobie coś na bazie oscyloskopu tyle że nie jest to pomiar ciągły a wykonanie "zdjęć" badanym przebiegom. Zależnie od wybranego przycisku pomiar trwa 5, 20, 50, 100, 1000 [ms] gdzie każdy z pomiarów jest dzielony na 32próbki. Wykonuje się równolegle sześć pomiarów (sześć niezależnych wejść pomiarowych - każdy z wejść ma 32próbki - łącznie każdy pomiar trwa tyle samo czasu np 5ms).

    następnie z czytuję z ATmega8 pamięć EEPROM do pliku .hex ten plik otwieram w napisanym przez siebie programie C# i on rysuje mi właśnie te przebiegi 6 pomiarów zależnie który chce oglądać to zaznaczam je i takie mam.

    I tutaj kieruję się już do was z prozbą o wskazówki.

    Chcę teraz pominąć etap (zapisz pomiary - z czytaj EEPROM - wczytaj plik hex) i zastąpić je ciągłą transmisją USB (z przerwą na nadanie np nowych czasów pomiarów lub też ilośći pomiarów - nie istotne teraz, po prostu nadawaj i odbieraj chce wykonać), i otrzymać (Pomiar - transmisja USB - Wykreśl przebieg).

    Wiem powiecie, zrób to na RX TX i przejsciówka USB-RS. Ale ja nie chce bo chcę usb (tak ambitniej :P )

    Siedząc sobie na wykładzie, siedziałem i rozmyślałem. I zauważyłem pewien problem. Że muszę chyba najpierw napisać jakiś sterownik aby PC widział że coś podłączyłem i jest to mój "oscyloskop", następnie odpalę aplikacje napisaną w C# ustawie wartości oscyloskopu jak np czas pomiaru (okres widoczny na wykresie) i inne parametry jakieś (nie istotne teraz).

    Ze strzępków informacji znalezionych na forum dziś, dowiedziałem się że chcę napisać chyba sterownik do urządzenia hid. Znalazłem coś że ma mi pomóc usbio lub libusb - ale szczerze powiem że ściągnąłem obie te rzeczy i nadal nic nie wiem bo nie znalazłem polskiego opisu. Z tego co już wywnioskowałem to chyba odpada transmisja UART w ATMEGA8

    Aha miałem dopisać jak ja to rozumie bo z tego co zauważyłem to po polsku nic nie znajdę, chociaż wy mnie skierujcie na dobrą drogę jeżeli źle mówię.

    Wydaje mi się że po podłączeniu mojego urządzenia (ATMEGA8 bez żadnych przejściówek po prostu pod jakieś tam piny podłączona (bo nie wiem czy ma to znaczenie skoro ja programowo będę sprawdzał wszystkie stany we)) to komputer na pewno poprosi o sterowniki lub też nie (hid nie prosi z tego co wiem ale nie wiem dlaczego), USB ma D+ i D-, wiec raczej nimi Atmega8 musi jakoś podać wartość szeregową 8 biową czy tam 16 bitową - co podłączyłem w odstępnach czasu nie wiem jakich muszą być. To wyczytałem do tej pory i jak nic nie będzie podane to poprosi nas o sterownik a jak bedzie podane to bedzie urządzenie hid chyba. Jeżeli poprosi o sterownik to muszę jakoś go napisać - ale jak co z czym.

    Właśnie o to chodzi że chcę przebrnąć przez ten etap w którym podpinam mój układ do komputera, a odpalam program w C#. Aby komputer współpracował z moim zewnętrzym układem usb.

    Z góry dziękuję za pomoc i czekam tylko i wyłącznie na wyczerpujące informacje tylko w tej dziedzinie bez zbędnych komentarzy aby nie robić śmietnika, same informacje wnoszące coś do tego tematu. Bo tutaj dziś przejrzałem to jest sporo tematów chyba z 9 w których nic nie ma tak naprawdę.
  • #2 9225455
    krru
    Poziom 33  
    Adrian_sekowski napisał:
    Witam


    Wiem powiecie, zrób to na RX TX i przejsciówka USB-RS. Ale ja nie chce bo chcę usb (tak ambitniej :P )



    I tak będziesz musiał jakoś to transmitować.

    Adrian_sekowski napisał:


    Siedząc sobie na wykładzie, siedziałem i rozmyślałem. I zauważyłem pewien problem. Że muszę chyba najpierw napisać jakiś sterownik aby PC widział że coś podłączyłem i jest to mój "oscyloskop", następnie odpalę aplikacje napisaną w C# ustawie wartości oscyloskopu jak np czas pomiaru (okres widoczny na wykresie) i inne parametry jakieś (nie istotne teraz).


    Obawiam się że samej Atmegi8 nie podłaczysz bezpośrednio do USB. Jakiś układ transmisyjny będzie potrzebny. Każde urządzenie USB przedstawia się komputerowi i podaje czym ono jest. Na tej podstawie komputer ładuje odpowiednie sterowniki. Jeśli chcesz, by komputer wiedział, że to jest twój oscyloskop musisz go odpowiednio 'przedstawić'.
    Takie układy, jakie siedzą w przejściówkach USB-RS (inne też) zwykle mają możliwość podpięcia szeregowej pamięci zawierającej te dane - wtedy podpięcie takiego układu nie ładuje sterowników od RS'a, a cos innego.

    Adrian_sekowski napisał:

    Ze strzępków informacji znalezionych na forum dziś, dowiedziałem się że chcę napisać chyba sterownik do urządzenia hid. Znalazłem coś że ma mi pomóc usbio lub libusb - ale szczerze powiem że ściągnąłem obie te rzeczy i nadal nic nie wiem bo nie znalazłem polskiego opisu. Z tego co już wywnioskowałem to chyba odpada transmisja UART w ATMEGA8


    Najpierw ustal jak chcesz podłączyć Atmegę do USB. UART wcale nie odpada, chyba że parametry ci nie pasują, ale chyba nie masz dużo danych do przesłania. Ostatecznie można użyć np FT245 - przez komputer obsługiwany jak RS, ale ma wyjscia/wejścia równoległe, umożliwiając dość szybką transmisję. Oczywiście potrzeba więcej pinów - nie wiem, czy jeszcze tyle masz wolnych.
    Kwestie hid, serial czy coś innego to sprawa drugorzędna.
    libusb to biblioteka umożliwiająca operowania na urządzeniach USB z poziomu zwykłego programu a nie sterownika - łatwiej napisać program.

    Ja planuje wykonać coś podobnego, tyle że na FPGA a uC. Mam płytkę uruchomieniową ze Spartanem3 i 512kB szybkiej (10ns) pamięci SRAM. 512kB to trochę za dużo na przesyłanie RSem.
  • #3 9229048
    mdziewie
    Poziom 19  
    Przepraszam, że się wtrącę, ale Kolega nie zrozumiał.
    Rzeczywiście, Atmegę8 można podłączyć bezpośrednio do USB (chociaż na najwolniejszym biegu) i obsłużyć łącze programowo - istnieją gotowe biblioteki. Rzeczywiście, Atmega z taką biblioteką melduje się jako HID (bo chyba tylko HIDy obsługują tryb Slow w USB).
    Po stronie komputera nie potrzebujesz sterownika - HID (Human Interface Device) to przede wszystkim klawiatura i myszka.
    Twój procesor będzie więc wysyłał dane, udając np. klawiaturę. Sterownik nie jest tu potrzebny, bo klawiaturę obsługuje każdy komputer "w standardzie". W swoim programie obsługujesz urządzenie tak samo, jakbyś obsługiwał klawiaturę (tu akurat jest problem ze słaniem danych w drugą stronę, ale da się zakombinować). Tak działają np. czytniki kodów kreskowych.
  • #4 9229592
    Konto nie istnieje
    Poziom 1  
REKLAMA