Komunikacja AVR z komputerem

top

Przychodzi taki moment w życiu każdego elektronika-amatora, w którym zapalanie i gaszenie diody, czy wypisywanie tekstu na wyświetlaczu przestaje wystarczać – przydałoby się móc, przykładowo zapisać dane wejściowe do pliku, wykreślić z nich wykres, czy móc kontrolować pewne aspekty układu z poziomu komputera.

Najprostszym sposobem na osiągnięcie takich efektów jest użycie konwertera UART-USB. Większość mikrokontrolerów AVR posiada sprzętową obsługę komunikacji w standardzie UART, która pozwala na przesyłanie praktycznie dowolnych informacji np. między dwoma mikrokontrolerami. Niestety – próżno szukać portu UART w komputerze. Tutaj z pomocą przychodzi układ FT232R, który jest sercem dwóch dostępnych w naszej ofercie modułów USB-UART. Dla potrzeb niniejszego artykułu nie ma znaczenia, którego z układów użyjemy (czy będzie to wersja do płytki stykowej, czy „pendrive” – wpinana bezpośrednio do portu USB).

USB-UARTUSB-Uart_3

Nadawcą komunikatów, które będziemy próbowali odebrać w komputerze będzie w niniejszym przykładzie gotowy moduł M8, oparty o mikrokontroler ATmega8A, zaprogramowany przy pomocy środowiska Arduino. Jak zaprogramować moduł M8 przy pomocy Arduino IDE możecie przeczytać tutaj – http://msx-elektronika.pl/pl/zaprogramuj-microboard-m8-w-srodowisku-arduino/

Pierwszą czynnością, którą powinniśmy wykonać jest upewnienie się, czy nasz system operacyjny ma zainstalowane sterowniki niezbędne do obsługi modułu konwertera UART-USB. W tym celu podłączamy moduł do USB (bezpośrednio w przypadku wersji „pendrive”, lub poprzez kabel „drukarkowy” USB typ. B w przypadku wersji do płytki stykowej). System Windows powinien automatycznie wyszukać niezbędne sterowniki i zainstalować je (taka sytuacja miała miejsce podczas pisania tego artykułu na systemie Windows 7 64 bit).

1

Jeżeli jednak po podłączeniu modułu sterowniki nie zostaną zainstalowane prawidłowo, należy pobrać odpowiednią wersję sterowników ze strony producenta układu FT232R – http://www.ftdichip.com/Drivers/VCP.htm. W przypadku systemów operacyjnych Windows polecam pobrać sterowniki z linku w kolumnie „Comments” – są to sterowniki w wersji *.exe, w której proces instalacji jest zautomatyzowany – wystarczy pobrać plik, uruchomić go i postępować zgodnie z instrukcjami wyświetlonymi na ekranie.

Moduł UART-USB widziany jest przez komputer jako wirtualny port szeregowy COM. Środowisko Arduino posiada wbudowany „Monitor portu szeregowego”, który pozwala na szybki podgląd komunikacji.

W celu przetestowania komunikacji musimy najpierw zaprogramować mikrokontroler. W tym celu piszemy prosty program w Arduino IDE.

void setup()

{

  Serial.begin(9600);

}

void loop()

{

  Serial.println(“Test”);

  delay(500);

}

Powyższy program zainicjalizuje wbudowany w mikrokontroler port UART z prędkością 9600 baud, w domyślnym trybie 8 bitów danych, braku bitu parzystości i 1 bitu stopu – odpowiada za to linijka „Serial.begin(9600);”.

Następnie w głównej części programu (nieskończonej pętli loop) następuje nadanie komunikatu tekstowego „Test”, po którym nadawany jest znak końca linii. Komunikat nadawany jest co 500ms, czyli 2 razy na sekundę.

Wgrywamy program na mikrokontroler, po czym przechodzimy do podłączenia konwertera UART-USB do modułu M8.

schemat

Schemat podłączenia jest prosty, ale wymaga dwóch słów komentarza:

Po pierwsze – w tym schemacie cały układ (zarówno konwerter UART-USB, jak i moduł M8) zasilany jest z portu USB kabla, który podłączony jest do konwertera UART-USB. Aby zasilanie to było dostarczane poprawnie należy założyć zworkę na module konwertera wybierającą zasilanie układu napięciem 5V. Gdyby układ U8 posiadał własne zasilanie (np. z programatora USBasp) należałoby KONIECZNIE odłączyć kabel zasilający, łączący pin VCC(5V) modułu M8 z pinem VCC modułu konwertera. W przeciwnym przypadku cały układ byłby zasilany jednocześnie z dwóch źródeł, co mogłoby doprowadzić do uszkodzenia któregoś z układów.

Po drugie – należy zwrócić uwagę na fakt krzyżowego podłączenia pinów TXD i RXD – pin RXD mikrokontrolera wchodzi na pin TXD układu konwertera i odwrotnie. Wynika to z kierunkowości pinów w UART’cie – pin TXD odpowiada za nadawanie, a RXD za odbiór, a więc w celu prawidłowego funkcjonowania to co jest nadawane (a więc znajdujące się na pinie TXD) z mikrokontrolera, musi wchodzić na pin odbioru (a więc RXD) konwertera.

Jeżeli wszystko zostało podłączone zgodnie ze schematem i program został wgrany na mikrokontroler możemy spróbować zaobserwować przebieg komunikacji.

W tym celu uruchamiamy Arduino IDE, po czym w menu Narzędzia->Port szeregowy wybieramy odpowiedni port (prawdopodobnie będzie dostępny tylko jeden).

3

Jeżeli dostępnych będzie więcej portów to w celu sprawdzenia, który z nich to nasz konwerter przechodzimy do Menedżera urządzeń.

4

W sekcji „Porty (COM i LPT)” znajdziemy wszystkie porty szeregowe. Konwerter to port o nazwie „USB Serial Port”, a jego numer podany jest w nawiasie (w tym przypadku – COM16).

Po wybraniu odpowiedniego portu w Arduino IDE możemy uruchomić monitor portu szeregowego przyciskiem w prawym górnym rogu aplikacji.

5

Monitor portu szeregowego uruchomi się i zobaczymy nadawany cyklicznie komunikat „Test”.

6

Jeżeli komunikaty w monitorze nie składają się w napis „Test” (lub inny, którego oczekiwaliśmy), a zamiast tego są to jakieś dziwne znaczki, jak na zrzucie poniżej:

7

Należy upewnić się, czy prędkość komunikacji ustawiona w prawym dolnym rogu monitora portu szeregowego zgadza się z wartością ustawioną w wywołaniu metody Serial.begin(…);. Standardowo jest to prędkość 9600 baud.

Comments are closed.

Post Navigation