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).
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).
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 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).
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ń.
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.
Monitor portu szeregowego uruchomi się i zobaczymy nadawany cyklicznie komunikat „Test”.
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:
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.