Programowanie Arduino Uno bezpośrednio z Bascom AVR.

Jest to mój pierwszy wpis na temat programowania mikrokontrolerów z rodziny AVR. To właśnie za pomocą tych ośmiobitowych układów wykonałem swoje dotychczasowe projekty. W artykule tym przedstawię sposoby wykorzystania najbardziej popularnej wśród nas hobbystów platformy programistycznej, czyli Arduino. Co ciekawe bardzo przyjazny i interesujący język wysokiego poziomu Bascom AVR  umożliwia wykorzystanie tych modułów w wygodny sposób co przedstawię w niniejszym wpisie.   

Kilka informacji o Arduino

Każdy elektronik słyszał o mikrokontrolerach AVR. Te pożyteczne kości potrafią wykonać wiele rzeczy dzięki temu, że w tani, prosty sposób możemy wgrać to co „wymyśliliśmy” do układu i cieszyć się z naszego projektu. W sieci jest masa poradników, tutoriali wideo, projektów wykonanych przez ludzi pasjonujących się elektroniką i programowaniem. Ogromna popyt na mikroprocesory (głównie AVR) spowodowało powstanie wielu zestawów startowych, płytek stykowych z modułami, programatorami i mikrokontrolerami itp. Ten stan rzeczy zapoczątkował powstanie Arduino, czyli platformy programistycznej. Zbudowana mała płytka PCB z mikrokontrolerem dzięki specyficznej budowie możliwa do rozbudowy na przeróżne urządzenia dzięki tzw. Shield-om. Zastosowanie dodatkowych układów w zestawie umożliwia podpięcie do komputera przez port USB. Moduł zostanie zainstalowany jako szeregowy port COM i on zapweni komunikację z programem ( wgrywanie utworzonych kodów wynikowych ). Ponadto powstało specjalne oprogramowanie mianowicie Arduino IDE umożliwiające tworzenie programów do projektów i wgrywanie ich do danego modułu. Cena Arduino nie jest zbyt wysoka, porównując do rozbudowanych zestawów startowych i jak najbardziej jest pożądana na początek do nauki programowania mikrokontrolerów AVR.  Wracając do modułu opisze budowę płytki Arduino UNO R3 z fabrycznym ATmega328P.

Budowa modułu Arduino UNO R3

Na powyższej fotografii przedstawiłem zdjęcie swojego urządzenia, które zakupiłem na aukcji internetowej za niewielkie pieniądze. Na zdjęciu płytki można zobaczyć dostępne układy IO w postaci rzędowych goldpinów do których możemy podpinać wszelakie układy ( czujniki, fotorezystory, tranzystory, diody itd.). Arduino zasilane może być z zewnętrznego zasilacza o napięciu od (7 do 12 V)  podpięty do gniazda DC po lewej stronie modułu. Można wykorzystać port USB komputera pamiętając o ograniczeniu prądowym tego rozwiązania tak aby nie podpinać „prądożernych” modułów, które mogą pobierać więcej niż 500 mA, ponadto nie można korzystać jednocześnie z zasilacza oraz USB. O prawidłowym zasileniu i uruchomieniu płytki informuje zielona dioda (ON). Dioda L żółtej barwy informuje o prawidłowej komunikacji z komputerem mianowicie podczas podłączenia układu do komputera kilkukrotnie zamruga i zaświeci się na stałe co świadczy o prawidłowej komunikacji urządzenia z komputerem, a więc można spokojnie programować. Jest ona podłączona stale do pinu 13 procesora i można ją włączać i wyłączać.

Gdy dane są wysłane z komputera świeci dioda oznaczona RX, a gdy Arduino wysyła coś do komputera zapala się Led TX. Na płytce można znaleźć przycisk reset do zrestartowania programu mikrokontrolera. W układzie Arduino UNO mamy do dyspozycji trzy rodzaje napięć:

  • 5V – dostępne ze stabilizatora napięcia lub portu USB, zasilające również mikrokontroler dostępne z goldpinu po lewej stronie .
  • 3,3V- również z wyjścia stabilizatora napięcia, znajdujące się obok goldpinu zasilania 5V.
  • Vin – napięcie z wyjścia zasilacza podpiętęgo do gniazda DC na płytce.

Wszystkie te zasilania mają wspólną masę GND dostępną z dwóch goldpinów obok nich. Pin Reset jest wyprowadzony z mikrokontrolera i można go dowolnie wykorzystać, natomiast IOREF to końcówka pełniąca funkcję informującą dla modułów rozszerzających z jakimi napięciem działają piny cyfrowe.

Piny cyfrowe (na płytce jako DIGITAL( PWM ∼) są ponumerowane następująco: 1-13 i mogą pełnić funkcję wejściową lub wyjściową w zależności od programowej konfiguracji.To oznacza, że poprzez wejścia może wykrywać stan niski (0V) lub wysoki (ok. 2,5-5V) co przydaje się do podpięcia przycisków, a nawet małej klawiatury. Natomiast wyjścia umożliwiają włączanie/wyłączanie układów zewnętrznych jak diody, tranzystory, wyświetlacze.

Piny analogowe (ANALOG IN) nr. od 0 do 5. Pełnią role pinów wejściowych. Są doprowadzone do przetworników ADC wbudowanych w mikrokontroler. Jego wewnętrzne układy pozwalają na 10 bitową rozdzielczość pomiaru napięcia od 0 do 5V. 10 bitów zapewnia dokładność na poziomie ∼0.0049. Pin AREF pełni rolę napięcia wzorcowego dla przetwornika i może przyjmować inne wartości niż najbardziej popularne 5V co zatem zwiększy dokładność pomiaru. Warto wiedzieć, że piny A0-A5 naturalnie mogą pełnić rolę I/O cyfrowych po uprzedniej konfiguracji w programie. Oznaczone po stronie prawej (piny cyfrowe) niektóre mają znaczek ∼ . Są to wyprowadzenia umożliwiające otrzymanie na wyjściu sygnały prostokątne op regulowanym programowo współczynniku wypełnienia zwanym PWM (amplituda sygnału 0-5V). W ten sposób można regulować moc rożnych urządzeń. Tak oto wykorzystałem to jako regulację temperatury grota lutownicy (patrz: Cyfrowa stacja lutownicza DIY).

Moduł Arduino UNO posiada na pinach 0 oraz 1 inerfejs RS 232 działającym w standardzie TTL. Wejście danych znajduje się na pinie 0 oznaczonym RX natomiast TX jest wyjściem danych na pinie nr.1. Transmisja jest zrealizowana szeregowo w sposób asynchroniczny z prędkością 115200 bodów. Dzięki temu samemu interfejsowi możliwe jest wgrywanie programu z komputera przez USB, za pomocą zainstalowanego wirtualnego portu COM.

Na płytce znajduje się również sześciopinowe złącze do magistrali szeregowej SPI. Za komunikację odpowiadają SCK (13 pin) tj. sygnał zegarowy, MOSI jest wyjścim danych dostępnym na pinie 11 natomiast wejście danych MISO występuje na goldpinie nr.12. Dodatkowo na pinie 10 dostępny jest sygnał SS pozwalający na wybór urządzenia na magistrali. Arduino Uno umożliwia szybką transmisję synchroniczną o wartości 8 Mhz.

Ponieważ wszystkie mikrokontrolery AVR mają możliwość wykorzystania „procków” do komunikacji szyną I2C zwaną również TWI opisywana platforma również ma wyprowadzenia po prawej u samej góry. Pierwszy od góry SCL jest sygnałem zegarowym natomiast SDA, czyli linia danych znajduje się poniżej tego pierwszego. Należy pamiętać również, że końcowki te mogą pełnić rolę przetworników analogowo-cyfrowych (ADC). W poradniku wspomnę jeszcze na temat przerwań zewnętrznych. Kiedy na wejściu mikrokontrolera wystąpi jakaś zmiana np. ze stanu 5V zostanie doprowadzone do 0V wtedy procesor to wykryje i natychmiast zmieni działanie programu (podprogram) wedle naszych pomysłów, które wymyśliliśmy. Umożliwiają nam to wyprowadzenia 3 oraz 2 z prawej strony.

Instalacja sterowników Arduino na komputerze 

Do pisania kodów, ale także do pracy z elektroniką wykorzystuję już dosyć przestarzałego Asus’a 😛 . Jego systemem operacyjnym jest Windows XP i na nim przedstawię instalację Arduino Uno, którego używam. Aby to było możliwe trzeba będzie pobrać oprogramowanie ze strony producenta i zainstalować na komputerze, gdyż mimo że nawet nie będziemy używać do pisania kodów znajdują się tam sterowniki niezbędne do instalacji platformy (folder drivers). Podczas instalacji natknąłem się na problem mianowicie po pobraniu wersji nie wymagających instalacji moduł nie chciał działać na tych sterownikach. Arduino Uno było zainstalowane jednak nie było komunikacji z komputerem o czym informowała mrugająca cały czas dioda led L. Problem ten rozwiązało pobranie oprogramowania ze strony podanej na odwrocie oryginalnej płytki PCB. Jeśli napotkałeś podobny problem wypróbuj odpowiednią wersję Arduino IDE wymagającej instalacji z odpowiedniego źródła. Opisane wyżej problemy  mogą być wynikiem posiadania tzw. klonów i na forum trafiłem na informację, że takie moduły wymagają specjalnych sterowników (CH340). Ja posiadam orginalny układ i nie wiem jak to się ma rzeczywiście.

Instalacja Arduino Uno w systemie Windows XP

Kiedy mamy przygotowaną całą platformę można przystąpić do instalacji Arduino w systemie. Ja posiadam system Windows XP i to na nim przedstawię przebieg konfiguracji niemniej jednak jest analogiczna do innych. Po podłączeniu platformy do komputera system wykryje nowy sprzęt i przystąpi do instalacji sterowników jak przedstawiono na fotografii pierwszej :

Tutaj należy wybrać drugą opcję: Zainstaluj z listy określonej lokalizacji(zaawansowane) aby można było dołączyć wymagane sterowniki. Po wybraniu tej opcji i kliknięciu Dalej wyświetli się następujące okienko :

W opcji Wyszukaj najlepszy sterownik w tych lokalizacjach w ścieżce lokalizacji podajemy folder z plikiem DRIVERS powstałym podczas instalowania oprogramowania Arduino na komputerze. Celem jest odnalezienie ścieżki dostępu i jej zatwierdzenie przechodząc do kolejnego etapu.

W tym momencie ukaże się okienko jak powyżej i nastąpi instalacja sterowników na komputerze i po kilku sekundach w przypadku prawidłowej instalacji zobaczymy okienko :

W ten oto sposób mamy skonfigurowany moduł Arduino Uno na swoim komputerze i możemy już pisać programy 🙂 , ale zaraz 😀 …

Watro jeszcze otworzyć menadżera urządzeń ( Mój komputer -> LPM-> Właściwości-> Sprzęt-> Menadżer Urządzeń.) i sprawdzić czy platforma jest widoczna w systemie. Warto to zrobić, a nawet trzeba korzystając z Bascom AVR aby dowiedzieć się jaki to jest port COM by można było przystąpić do jego konfiguracji.

Jak widać na obrazku urządzenie jest u mnie porwanie zainstalowane i występuje pod portem COM21.

Konfiguracja Basom AVR i przykładowy program.

Jeśli moduł został poprawnie zainstalowany z powodzeniem można przejść do tworzenia wymyślonych aplikacji. Mimo dominacji języka C oraz bazującej na nim oprogramowaniu Arduino wiele użytkowników tak jak ja wykorzystuje kompilator stworzony przez Marka Alberts’a mianowicie Bascom AVR. Bardzo mi pasuje to środowisko, gdyż jestem amatorem w programowaniu i tworzę zwykle proste projekty z mikrokontrolerami. Największa wadę stanowi ograniczenia kompilatora w wersji demo do 4 kB natomiast dostęp do pełnej ulepszonej wersji ( obecnie 2.0.8.1 ) umożliwia już zaawansowane aplikacje. Jako przykład warty inspiracji pozwolę sobie przywołać genialny projekt Pana Bartka o nazwie „Mika„, który bardzo mi zaimponował oraz bardzo zmotywował do poznawania tego dialektu. Wracając do tematu niezykle łatwo można wykorzystać moduły Arduino i tworzyć aplikację w Bascomie. Aby była taka możliwość musimy po odpaleniu programu wejść w okno : Options -> Programmer i dokonać odpowiednich konfiguracji.

Tutaj mamy możliwość wyboru programatora który zaprogramuje mikrokontroler w module po kompilacji. W liście rozwijanej musimy odnaleźć i wybrać opcję ARDUINO. Platforma został zainstalowany jako szeregowy port COM należy go koniecznie określić. W moim przypadku to COM21, ale jeśli tego nie wiemy to można sprawdzić w menadżerze urządzeń (opisano powyżej). Kolejnym i ostatnim parametrem jaki musimy zmodyfikować jest prędkość transmisji szeregowej: BAUD. Arduino UNO jakie posiadam pracuje z prędkością 115200 bodów i tak należy wpisać lub wybrać z rozwijanej listy z boku. Tak skonfigurowane informację pozwolą po naciśnięciu przycisku w programie Program Chip (F4) zaprogramowanie mikrokontrolera w platformie pod warunkiem, że została ona prawidłowo wykryta przez system 🙂

Podsumowanie

Mam nadzieję, że udało mi się dobrze opisać zarówno platformę oraz jej integrację z środowiskiem programistycznym Bascom AVR. Mimo malejącemu zainteresowaniu tym programem jest spora grupa korzystająca z niego, a w sieci wiadomości o tym jak na lekarstwo. 😉 W następnym artykule przedstawię projekt termometru cyfrowego z czujnikami Dallas 18b20 wykonanym na przedstawionym module.

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *