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.

Atmega - Komunikacja mikrokontrolera z PC po USB, jaki układ wybrać

uki_uki1 19 Lip 2013 10:04 5157 19
  • #1 19 Lip 2013 10:04
    uki_uki1
    Poziom 9  

    Witam,
    uczę się programować avry i jestem początkujący. Udało mi się już opanować podstawy i postanowiłem nauczyć się łączyć mikrokontrolery z komputerem. Po wstępnym wybadaniu problemu znalazłem następujące układy, które mógłbym użyć:
    - CP2102
    - FT232
    - MCP2200
    oraz dwa projekty w których można użyć atmegi:
    - Osamu Tamura
    - Igor Cesko

    Niestety nie potrafię zdecydować którego powinienem użyć. Głównym wymaganiem jest prostota implementacji. Czy mógłby mi ktoś doradzić, a może porównać wyżej wymienione układy, jakie mają zalety a jakie wady? Myślę, że wielu początkujących stoi przed podobnym dylematem i im też mogłyby przydać się takie informacje, z góry dziękuję za wszelką pomoc.

    -1 19
  • #2 19 Lip 2013 10:35
    BlueDraco
    Specjalista - Mikrokontrolery

    CP2102 w obudowie bez nóżek - lutowanie tylko dmuchawką. FT232RL występuje w obudowie TSSOP, wymaga 2..3 elementów więcej i ma drobne problemy z driverami, ujawniające się przy masowej transmisji danych. Na początek chyba jednak FT232RL.

    Inne rozwiązania, to:

    Programowy USB na ATmega - jest tego sporo implementacji - nie potrzebuujesz żadnego dodatkowego układu.

    Mikrokontroler (może być ATmega, ale niekoniecznie) z wbudowanym interfejsem USB. z oprogramowaniem realizującym klasę CDC, czyli wirtulany port szeregowy, tak jak FT232RL.

    0
  • #3 19 Lip 2013 10:39
    mickpr
    Poziom 39  

    Osobiście polecam FT232 w wersji RL. Wymaga do pracy tylko parę kondensatorów zewnętrznych.
    Co prawda - możesz mieć problemy z lutowaniem go (napisałeś, że jesteś początkujący), ale zawsze możesz kupić gotowy minimoduł.
    Nie napisałeś do czego byłby ci potrzebny ten USB.

    Jeśli chcesz pójść nieco dalej niż tylko USB->RS232, to możesz użyć samej Atmegi - wybierz sobie odpowiedni MCU: Tutaj
    Możesz też skorzystać z projektu VUSB Link
    Możesz również użyć ATXMEGA - które mają USB na pokładzie.

    0
  • #4 19 Lip 2013 11:27
    uki_uki1
    Poziom 9  

    Dzięki za pomoc :)

    Na początek kupiłbym minimoduł więc sprawy lutowania są drugorzędne. Interfejs miałby współpracować z regulatorem wentylatorów na atmedze8 - chciałbym przesyłać do komputera dane o prędkości obrotowej wentylatorów, odczyty temperatur z LM335, a z komputera do mikrokontrolera wysyłałbym nastawy (współczynnik wypełnienia) PWM.

    atxmegi wolalbym uniknąć bo z tego co widziałem nie ma żadnych w obudowach dip a narazie wszystko robie na płytce stykowej

    Zastanawia mnie różnica w cenie tych układów i ich minimodułów:
    FT232RL układ:14,6 moduł:27
    CP2102 układ:7,6 moduł:16
    MCP2200 układ:6,3 moduł:17
    skoro ft232 jest około 2x droższy i jeżli nie ma drastycznej przewagi nad konkurentami wolałbym go uniknąć

    mam jedną wolną atmege więc spróbuję dziś zrealizować jakieś rozwiązanie z jej użyciem, ale mimo wszystko chciałbym kupić i porównać to z którymś z specjalizowanych układów

    a pytanie który wybrać wciąż pozostaje otwarte i liczę na kolejne rady z waszej strony

    0
  • #6 19 Lip 2013 13:10
    tmf
    Moderator Mikrokontrolery Projektowanie

    uki_uki1 napisał:
    Dzięki za pomoc :)
    atxmegi wolalbym uniknąć bo z tego co widziałem nie ma żadnych w obudowach dip a narazie wszystko robie na płytce stykowej


    To co, że nie ma żadnej w DIP? Kupisz, albo zrobisz sobie sam moduł do stykówki:
    http://mikrokontrolery.blogspot.com/2011/03/xmega-moduly-wlasnej-roboty-diy-by-manakinen.html
    lub gotowe:
    http://mikrokontrolery.blogspot.com/2011/02/mikrokontrolery-xmega-wybrane-moduly.html
    A SMD lutuje się łatwiej niż przewlekane. Także niepotrzebny strach. Tym bardziej, że układy interfejsów USB-USART i tak są w SMD, więc lutować SMD musisz.
    Tu masz przykad jak prosti na XMEGA można wyeliminować konieczność użycia FT:
    http://mikrokontrolery.blogspot.com/2011/03/X...emulacja-portu-szeregowego-rs-232-na-USB.html
    W sumie wychodzi to taniej i prościej niż zabawy z innymi układami.

    0
  • #7 19 Lip 2013 15:32
    BlueDraco
    Specjalista - Mikrokontrolery

    CP2102 : moduł < 10 zł u Chińczyków... ;)

    LPC11U1x - cena ok. 10 zł, dostępne gotowe oprogramowanie VCOM.

    0
  • #8 19 Lip 2013 17:33
    tmf
    Moderator Mikrokontrolery Projektowanie

    ATXMEGA64B3 - 10 zł, dostęne np. w Farnell bez cudów. Dostępne gotowe oprogramowanie VCOM i inne klasy HID ;P

    0
  • #9 19 Lip 2013 18:57
    McMonster
    Poziom 32  

    A jak już się uprzeć na zewnętrzny scalak, to czemu wszyscy się zatrzymali na etapie FT232, skoro są od dłuższego czasu FT230 dostępne za trochę ponad 8 zł? ;)

    0
  • #10 20 Lip 2013 18:49
    mickpr
    Poziom 39  

    McMonster napisał:
    A jak już się uprzeć na zewnętrzny scalak, to czemu wszyscy się zatrzymali na etapie FT232, skoro są od dłuższego czasu FT230 dostępne za trochę ponad 8 zł?
    Fajny scalak, ale brak mu paru linii z FT232RL. Jako zwykły asynchroniczny UART się nada.

    0
  • #12 22 Lip 2013 22:32
    piotrva
    Moderator na urlopie...

    quinty napisał:
    A ja polecam kable USB od starych telefonów. Kabelek kosztuje grosze, siedzi w nim ark3116 lub PL2303 i mają wyjścia na dodatkowe linie np. DCD, RTS.

    Ja z kolei odradzam te układy.
    PL2303 - straszny s**, układ czasem się ot tak zawiesza, ogólnie problematyczny
    Polecam FT232RL - jest dobrze dostępny, z driverami nie ma problemów, nie potrzebuje praktycznie nic oprócz siebie. Na modułach też jest szeroko dostępny.
    IMHO warto teraz wydać niby 2x tyle co na jakiś moduł PL2303, niż potem ma Cię coś trafić, jak się zaczną problemy. Ogólnie kup sobie moduł FT232RL z wszystkimi wyprowadzeniami i masz dobrze narzędzie na dłuuuuugie lata.

    0
  • #13 25 Lip 2013 18:09
    uki_uki1
    Poziom 9  

    Dziś dotarła do mnie płytka z CP2102.
    Sterowniki ze strony producenta zainstalowały się bez problemu na win7x64. W ciągu 2h udało mi się uruchomić połącznie i przesłać pierwsze dane z i do atmegi. Miałem tylko jeden problem, którego rozwiązanie zajęło większość czasu - w internecie wyczytałem, że TX i RX łączymy z przeplotem - TX z urządzenia A do RX urządzenia B. W mojej płytce chyba chinczyki pomyliły oznaczenia, TX z modułu musiałem połączyć z TX atmegi8.

    transmisja z prędkością 9600 działa bez problemów na wbudowanym oscylatorze atmegi (przy 8mhz). innych prędkości jeszcze nie sprawdzałem.

    wygląda na to, że jeśli ktoś nie potrzebuje dodatkowych funkcjonalności FT232RL spokojnie może kupić tańszy CP2102 i nie powinien mieć dużych problemów z jego uruchomieniem

    0
  • #14 29 Cze 2014 12:39
    termil0r
    Poziom 9  

    A ja mam takie pytanie. W sumie to pewnie rzecz trywialna i aż boli jak się o to pyta ale:
    Dlaczego wszędzie gdzie się szuka informacji na temat jak zbudować układ, który byłby kontrolowany/komunikowałby się po usb z PC to wszędzie używa się albo jakiegoś mechanizmu, który powoduje przejście usb->rs232/serial/uart? Czyżby jest to spowodowane tym, że jeśli jakiś uC nie ma wbudowanego portu usb to aby podłączyć mu zewnętrznie jakieś wejście po usb trzeba to i tak sprowadzić do serial/uart (przy założeniu, że nie korzystamy z wynalazków typu v-usb)?

    0
  • #15 29 Cze 2014 12:51
    tmf
    Moderator Mikrokontrolery Projektowanie

    Nie, jest to spowodowane tym, że obsługa rs232 od strony PC jest łatwiejsza. Jeśli zrobisz sobie dedykowane urządzenie, które nie korzysta z CDC to od strony PC musisz napisać sterownik tego urządzenia (i potencjalnie go zcertyfikować) oraz całe API do komunikacji z tym sterownikiem. Jak korzystasz z CDC to masz wszystko gotowe.
    Swoją drogą używanie przejściówek RS/USB typu FT232 i pokrewne w dobie, kiedy nawet proste 8-bitowe procki mają sprzętowy interfejs USB jest IMHO w wielu przypadkach pozbawione sensu.

    -1
  • #16 29 Cze 2014 12:56
    termil0r
    Poziom 9  

    WOW. Dzięki za błyskawiczną odpowiedź.

    Zatem nawiązując teraz do pytania OP. Jeśli chciałbym stworzyć urządzenie komunikujące się przy pomocy USB i własnoręcznie napisać cały sterownik to co jest potrzebne przy uC Atmega8A ?
    Jakiś układ tworzący port usb? Czy może wystarczy wybrać sobie jakieś piny na uC i potem do nich napisać sterownik (oczywiście przepuszczając to przez odpowiedni konwerter poziomów logicznych żeby nie spalić portu usb w kompie)?

    0
  • #17 29 Cze 2014 13:14
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przede wszystkim porzuć ATMega8 - to stary procesor, jest na niego dużo przykładów, ale poza tym w tym zastosowaniu nie ma żadnych zalet. Z ATMega wybierz jakąś ze sprzętowym USB, mają oznaczenia U2 lub U4. Jeszcze lepiej - wybierz XMEGA, te z U mają też sprzętowe USB. Kolejna sprawa - USB to raczej skomplikowany protokół, nie wiem jakie masz doświadczenie, ale bez wyraźnej potrzeby nikt nie dłubie w USB od podstaw. Wiele firm daje gotowce, m.in. Atmel. Te gotowce się potem dostosowuje do własnych potrzeb. Przykłady masz w Atmel Studio - jest tam pokazane jak realizować różne urządzenia klasy CDC i HID.
    Softwarowe emulacje USB miały sens jakieś 5-10 lat temu, teraz się w to nie pakuj.
    Tu masz np. mój przykład wykorzystania wirtualnego RS232 przez USB wykorzystujący implementację firmy Atmel:
    http://mikrokontrolery.blogspot.com/2011/03/X...emulacja-portu-szeregowego-rs-232-na-USB.html

    0
  • #18 13 Lip 2014 10:18
    termil0r
    Poziom 9  

    Ok. Thx za odpowiedź. Skorzystam z niej i zaopatrzę się w ATXMEGA256A3U-A (w pobliskim sklepie taki i tylko taki ze sprzętowym usb mają) i dalszą pracę z USB będę kontynuował właśnie z tym uC.


    Natomiast proszę o rozwianie moich wątpliwości bo w zasadzie tylko to mi tu jeszcze nie pasuje.
    Jeśli użyję układ FTDI FT232RL aby przejść z USART do USB to w efekcie po podłączeniu takiego układu do PC będzie on widoczny jako:
    1. Urządzenie USB, które przedstawi swój CDC i do którego będzie trzeba podać sterownik a od sterownika będzie zależało jak będzie działać i jak będzie widoczne w systemie. Tzn jeśli urządzenie przedstawi nietypowy CDC to wtedy system będzie prosił o sterownik a jak jakiś typowy to będzie użyty jakiś standardowy. (na takim efekcie mi zależy)
    2. Port szeregowy (tak jak w przykładzie z xmega - wirtualny port szeregowy) (tego nie chcę)
    3. Urządzenie USB, które jest czymś porównywalnym z tymi uzyskanymi przez V-USB (tego też nie chcę)

    To na czym de facto mi zależy to aby po podłączeniu mojego urządzenia (używającego ft232rl) do PC, było widoczny jako urządzenie USB ale coś innego aniżeli port szeregowy. Może być coś prostego jak np. myszka, która po podłączeniu będzie mi w jakiś określony sposób przesuwać kursor np. po okręgu.

    A dlaczego ATmega8 ?
    1. Do nauki, tj. dla pełności wiedzy/rozwiązania.
    2. Bo już ją mam
    3. Bo nie ma sprzętowego port usb a mimo to, chcę wiedzieć jak zrobić port tam gdzie go nie ma.
    4. Bo zwyczajnie chcę wiedzieć, jak np. przy pomocy jakiegoś zewnętrznego kontrolera dedykowanego do komunikacji USB przesłać dane z PC do AVR i w drugą stronę.
    5. Bo jeśli uC mogą mieć wsparcie dla portu USB to czy jest jakiś układ który realizuje tylko tą funkcjonalność?

    Widziałem także na przykładzie projektu IgorPlug-USB, że można rzeczywiście samemu zaimplementować obsługę usb w samym uC i potem używać tego jak normalnego urządzenia usb. Natomiast zgodzę się, że nie jest to rzecz trywialna. Nawet sam autor tego projektu mówi, że 4 miesiące studiował specyfikację nim zabrał się do budowania czegokolwiek.

    Bardzo proszę forumowiczów o odpowiedź na to pytanie. Przyda się i mi jak i innym hobbystom/entuzjastom, którzy w przyszłości będą próbowali zrobić komunikację przy pomocy portu USB.

    1
  • #19 13 Lip 2014 10:35
    tmf
    Moderator Mikrokontrolery Projektowanie

    To jak widoczne jest urządzenie USB w systemie zależy od deskryptora USB przesłanego do systemu. Na podstawie dekryptora urządzenia USB OS decyduje do jakiej klasy należy i jakie zainstalować sterowniki. Te sterowniki odpowiadają za to jak takie urządzenie wygląda np. w menagrze urządzeń. Na FT232 nie masz możliwości tworzenia własnego deskryptora USB, to urządzenie zawsze będzie wyglądało jak emulator RS232, którym w istocie jest. Jeśli chcesz, żeby urządzenie było widoczne np. jako myszka należy odpowiednio zmodyfikować deskryptor - odpowiednie przykłady takich urządzeń masz w Atmel Studio lub bibliotece LUFA.
    Co do emulacji USB na ATMega8 - nie umożliwia ona pełnej emulacji USB, jakoś to działa, z naciskiem na słowo jakoś. Samo USB od strony elektrycznej jest banalne - zwykły przesył różnicowy (linie D+ i D-). To co jest istotne to wyższe warstwy protokołu i tu trzeba postudiować dokumentację USB niezależnie od tego, czy korzystasz ze sprzętowego USB czy nie.
    Warto też się zastanowić co jest twoim celem - roczna zabawa i napisanie kolejnego stosu USB, czy zbudowanie jakiegoś funkcjonalnego urządzenia, ktore z tego interfejsu korzysta? Jak już pisałem obecnie praktycznie nikt nie pisze własnego stosu USB, podobnie jak nikt nie pisze własnego stosu TCP/IP - szkoda na to czasu, producenci odpowiednich układów dostarczają rozwiązania lepsze niż jest w stanie napisać 99% programistów-hobbystów, które się tylko dostosowuje do potrzeb.

    1
  • #20 13 Lip 2014 11:19
    termil0r
    Poziom 9  

    @tmf: Dziękuję Tobie serdecznie. Wspaniała odpowiedź na moje pytanie oraz trafne spostrzeżenie.

    0