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

Konwerter USB-USART na mikrokontrolerze ATmega8

Stiepanowna 24 Lip 2013 18:30 8658 7
  • Konwerter USB-USART na mikrokontrolerze ATmega8

    Najprostszym rozwiązaniem było kupienie FT232, ale w wyniku porównania jego ceny z ceną ATmega8 nie było ono zbyt ekonomiczne. Dlatego autor postanowił zaprojektować konwerter na mikrokontrolerze. A jak jest już mikrokontroler, to sam USART wydaje się minimalistycznym rozwiązaniem. Stąd pomysł na bardziej rozbudowane i uniwersalne urządzenie z kilkoma interfejsami.

    Tak więc urządzenie posiada następujące możliwości:
    - port USB->USART;
    - port USB->SPI;
    - port USB->I2C;

    i oprócz tego jest to urządzenie USB HID, żeby nie męczyć się z instalacją sterowników.

    Autor wybrał mikrokontroler ATmega8, ponieważ w obudowie TQFP zajmuje niewiele miejsca (znacznie mniej niż AtTiny2313) i posiada całe 8KB pamięci.
    Na początku były plany, żeby wszystkie interfejsy dało się programować, ale po rozplanowaniu ścieżek autor musiał zrezygnować ze sprzętowego I2C, ponieważ nie udało się go zaimplementować na jednostronnej płytce. W przyszłości autor rozwiąże ten problem.
    Dlatego też funkcjonalność I2C została nieco ograniczona, co na szczęście nie dotyczy USART i SPI.
    Schemat urządzenia wygląda następująco:

    Konwerter USB-USART na mikrokontrolerze ATmega8

    Jak widać, jest bardzo prosty. Mikrokontroler jest zasilany napięciem +5V, poziomy napięć dla USB dopasowano za pomocą dzielników napięcia. Rezystor 68Ω + dioda Zenera 3,3V. Częstotliwość taktowania mikrokontrolera - 12MHz. To minimalna wymagana częstotliwość dla pracy z szyną USB.

    Schemat również przewiduje trzy diody wskazujące poszczególne tryby pracy. Jedna dioda pokazuje jaki tryb pracy jest aktualnie włączony, a dwie pozostałe wskazują odbiór/transmisję danych.

    Nie przewidziano żadnych przycisków i przełączników w urządzeniu, a wszystkie ustawienia wprowadza się bezpośrednio na komputerze.

    Oprócz tego na wszystkich wyjściach służących do pracy interfejsów znajdują się rezystory 68Ω w celu ochrony mikrokontrolera przed zwarciem. A ponowne lutowanie obudowy TQFP nie jest zbyt ciekawym zajęciem.

    Jak wcześniej wspomniano, komputer rozpoznaje urządzenie jako HID i nie jest potrzebna instalacja sterowników (system operacyjny myśli, że pracuje z urządzeniem wejściowym). Za wymianę danych przez USB jest odpowiedzialna biblioteka V-USB. Działa ona zarówno na mikrokontrolerze, jak i na komputerze. VID i PID wybrano z opcji oferowanych przez V-USB: VID – 0x16c0, PID - 0x05df. W przeciwnym wypadku trzeba by było przeznaczyć okrągłą sumę na zakup indywidualnego identyfikatora dla urządzenia USB lub stosować urządzenie tylko do własnego użytku. A ponieważ to projekt Open Source, spokojnie można korzystać z identyfikatorów V-USB.

    Całość zmontowano na płytce o wymiarach 23х34 mm. Wygląda to tak:

    Konwerter USB-USART na mikrokontrolerze ATmega8

    A po wytrawieniu i polutowaniu tak:

    Konwerter USB-USART na mikrokontrolerze ATmega8

    Jest to próbna wersja urządzenia, dlatego można znaleźć niewielkie różnice w porównaniu ze schematem płytki przedstawionym powyżej. Autor zdecydował, że nie potrzebuje wyjścia SS do pracy SPI i go nie zamontował. Jednak jak się później okazało, był to błąd, gdyż tryb Slave bez niego nie działa. Po wymaganych poprawkach całość działa jak trzeba.

    Jak wcześniej wspomniano, komputer traktuje urządzenie jak HID, czyli system operacyjny dobiera do niego sterownik ze swojej bazy. To umożliwia pracę tego urządzenia na dowolnym komputerze. Ale jest tu pewien mały szkopuł - żaden z dostępnych programów służących do wymiany danych za pośrednictwem USART nie będzie współpracować z tym urządzeniem. Oznacza to, że będzie potrzebny specjalny program, który umożliwi pracę z modułem. Dlatego autor skorzystał z C++ Builder w wersji 2007 i napisał taki oto program:

    Konwerter USB-USART na mikrokontrolerze ATmega8

    Jest on dość prosty, każdy interfejs posiada pewną ilość ustawień. Co ważne każdy z interfejsów może pracować tylko pojedynczo. W momencie podłączenia urządzenia do komputera, w oknie programu pojawią się przyciski, których kliknięcie spowoduje uruchomienie odpowiedniego interfejsu. Następnie wystarczy wpisać dane w pole w określonym formacie i kliknąć przycisk „Send”. Każdy interfejs posiada swój format danych. Poniżej je dokładnie omówię:

    USART: (odbiór danych non stop dopóki tryb jest włączony)
    - Wysyłanie kilku liczb HEX - wpisujemy je z przerwami w dowolnej ilości, np. 01 05 fa aa ...
    - Wysyłanie ciągu znaków (tekst, liczby itd.) - tu na początku ciągu należy wpisać identyfikator S (s), np. s www.cxem.net

    SPI:
    - Aby przesłać dane do urządzenia, należy zastosować taki format ciągu: adres (do kogo przesyłamy i do jakiej komórki pamięci) А (а) i dane D (d).Np., aa3 dfa
    - Aby wysłać zapytanie dotyczące wysłania danych z urządzenia: adres (od kogo otrzymujemy i z jakiej komórki pamięci) oraz identyfikator odczytywania R (r). Np., aa3 r

    I2C:
    - Aby wysłać dane do urządzenia: adres urządzenia (bit odczyt/zapis=0) А (а) adres komórki pamięci M (m) dane D (d). Np., аа2 m03 d15
    - Zapytanie dotyczące danych wygląda tak: adres urządzenia (bit odczyt/zapis=0) А (а) adres komórki pamięci M (m) adres urządzenia (bit odczyt/zapis=1) А (а) Identyfikator odczytu z ilością komórek pamięci do odczytu R (r). Np., aa2 m03 aa3 r1

    Dla SPI w trybie Slave nie przewidziano żadnych komend - siedzimy i czekamy aż coś zostanie przesłane.

    Aby rozpocząć pracę z urządzeniem, podłączamy je do komputera, czekamy, aż system operacyjny wyświetli komunikat o odnalezieniu sterowników, włączamy program i rozpoczynamy wymianę danych.

    Program współpracuje ze wszystkimi wersjami Windows, począwszy od Windows XP, a skończywszy na Windows 8 i nie potrzebuje do tego żadnych dodatków jak np. NetFramework. To samo dotyczy modułu.

    FUSE bity ustawia się za pomocą zewnętrznego rezonatora kwarcowego o wysokiej częstotliwości. Wygląda to tak:

    Konwerter USB-USART na mikrokontrolerze ATmega8

    Na obrazku LOW FUSE bity mają wartość 1, kiedy są zaznaczone i 0, kiedy nie są. W przypadku HIGH z FUSE bitami jest na odwrót. W systemie szesnastkowym tak to wygląda: HIGH: D9, LOW: FF.

    I na koniec wideo (USART pracuje w trybie echo (Rx i Tx są połączone), a SPI i I2C autor testował z układem scalonym RTC PCA2129T, który posiada zarówno interfejs SPI, jak i I2C):

    http://youtu.be/ZjMxuMmkHxY

    W załączniku płytka drukowana, źródła i oprogramowanie

    Autor: neo-bars(_at_)ya.ru

    Link do tłumaczonego tekstu: http://radiokot.ru/circuit/digital/pcmod/49/
    O autorze
    Stiepanowna
    Poziom 12  
    Offline 
    Stiepanowna napisał 90 postów o ocenie 84, pomógł 1 razy. Mieszka w mieście Kraków. Jest z nami od 2011 roku.
  • #2 12559066
    eDZio
    Poziom 16  
    Ciekawe czy dałoby się dodać do tego jeszcze 1 Wire.
  • #3 12560115
    Freddy
    Poziom 43  
    eDZio napisał:
    Ciekawe czy dałoby się dodać do tego jeszcze 1 Wire.

    Przecież jest wersja źródłowa, więc możesz sobie dodać.
  • #4 12560156
    eDZio
    Poziom 16  
    Tak, tylko czy nie będzie problemów. Wiadomo, że 1W jest wrażliwe na odstępy czasowe, czy nie będzie problemów z przerwaniami od USB.
  • #5 12560461
    Freddy
    Poziom 43  
    eDZio napisał:
    Tak, tylko czy nie będzie problemów. Wiadomo, że 1W jest wrażliwe na odstępy czasowe, czy nie będzie problemów z przerwaniami od USB.

    Niby dlaczego, są takie konstrukcje USB-1wire nawet na elektrodzie, np. tutaj
    https://www.elektroda.pl/rtvforum/topic1524421.html
  • #6 12564170
    michal-michalik
    Poziom 23  
    Cytat:
    jest to urządzenie USB HID, żeby nie męczyć się z instalacją sterowników.

    (...)Jak wcześniej wspomniano, komputer traktuje urządzenie jak HID, czyli system operacyjny dobiera do niego sterownik ze swojej bazy. To umożliwia pracę tego urządzenia na dowolnym komputerze. Ale jest tu pewien mały szkopuł - żaden z dostępnych programów służących do wymiany danych za pośrednictwem USART nie będzie współpracować z tym urządzeniem. Oznacza to, że będzie potrzebny specjalny program, który umożliwi pracę z modułem.(...)


    Czyli urządzenie nie wymaga sterowników, ale potrzebuje specjalnego programu do działania... Mega praktyczne ;)
  • #7 12857398
    dominon
    Poziom 18  
    michal-michalik napisał:

    Czyli urządzenie nie wymaga sterowników, ale potrzebuje specjalnego programu do działania... Mega praktyczne ;)


    iTunes dla produktów Apple jakoś się sprawdził. A bez niego muzyki nie wrzucisz...

    Prosty projekt ale na pewno sporo można się nauczyć łącząc hardware i software żeby ze sobą współgrały.
  • #8 12864624
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA