Wyjście Spis treści Poprzedni Następny
Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych. Autor artykułu: mgr Jerzy Wałaszek Konsultacja: Wojciech Grodowski, mgr inż. Janusz Wałaszek |
©2015 mgr
Jerzy Wałaszek
|
Tematy pokrewne | Podrozdziały | |
(w budowie) |
Mikrokontrolery Środowisko programowania Pierwsza aplikacja AVR Parametry mikrokontrolerów AVR |
Środowisko programowania |
|||||
Programowanie mikroprocesora bezpośrednio za pomocą rozpoznawanych przez niego instrukcji (czyli w asemblerze) jest niestety trudne i tym tutaj nie będziemy się zajmować. Na szczęście opracowano tzw. języki wysokiego poziomu, które posiadają składnię zbliżoną do języka ludzkiego. Dla mikrokontrolerów AVR standardowo będzie to język C, bardzo szybki i bardzo efektywny. Aby efektywnie zaprogramować mikrokontroler AVR potrzebujesz następujących elementów: Programator AVRJest to urządzenie elektroniczne, które pozwoli
ci przesłać do mikrokontrolera program
(zostanie on przez programator zapisany w pamięci FLASH
mikrokontrolera, czyli w pamięci programu). Na rynku
spotkasz całe mnóstwo różnych programatorów. Na początek nie
musi to być urządzenie profesjonalne za kilkaset złotych. W
zupełności wystarczy ci prosty programator USBasp za około
12...16zł
(do kupienia w serwisie Allegro lub w
firmach wysyłkowych). W przyszłości programator
zrobisz sobie sam.
Programator jest podłączany do portu USB komputera PC (dawniej używano portów drukarki lub RS-232, lecz coraz częściej producenci pomijają je w nowym sprzęcie komputerowym). Na drugim końcu posiada złącze typu Kanda, które służy do sprzęgania programatora z mikrokontrolerem. Złącze zawiera dziesięć wtyków (istnieją wersje z 6 wtykami) o następujących oznaczeniach:
Sygnały MOSI, RST, SCK i MISO należy dołączyć do odpowiednich końcówek mikrokontrolera AVR. VCC oznacza napięcie zasilające, GND to masa. Programator może zasilać niewielkie układy prądem do 500mA (ponieważ tyle da się wycisnąć ze zwykłego portu USB komputera). Jeśli twój komputer pracuje pod kontrolą systemu Windows 7/8/10, to poprawną pracę programatora USBasp uzyskasz po zainstalowaniu odpowiednich sterowników. Dokładny proces instalacji jest opisany szczegółowo pod poniższym adresem (uwaga: na czas instalacji sterownika będziesz musiał wyłączyć ochronę antywirusową, inaczej proces instalacji się nie powiedzie):
http://mirekk36.blogspot.com/2013/03/usbasp-win8-instalacja.html
W systemie Linux (wszystkie opisy dotyczą dystrybucji Ubuntu i pochodnych) dostęp do portu USB wymaga odpowiednich uprawnień. W tym celu należy wpisać następujące polecenia:
su root
Zamiast konto_użytkownika wpisujemy w powyższym poleceniu nazwę konta, na którym będziemy pracować. Tworzymy plik reguł dostępu do portów USB. Najpierw uruchamiamy edytor nano z odpowiednią nazwą pliku:
sudo nano
/etc/udev/rules.d/81-avr-programator.rules
Zostanie otwarty pusty plik. Wklejamy do niego poniższy tekst (uwaga: dotyczy tylko programatorów USBasp!!!):
ATTRS{idVendor}=="16c0",
ATTRS{idProduct}=="05dc", MODE="0666", GROUP="plugdev"
Wpis ten określa regułę dostępu do urządzenia USB, którym jest nasz programator. Plik zapisujemy, naciskając kombinację klawiszy Ctrl+O, po czym wychodzimy z edytora nano kombinacją Ctrl+X. Teraz musimy zrestartować podsystem USB oraz reguły dostępu, aby nasz plik został uwzględniony (można również zrestartować komputer). Wydajemy polecenia:
sudo service udev restart
Po wykonaniu tych poleceń programator stanie się widoczny dla oprogramowania.
AVRDUDEDo sterowania programatorem potrzebujesz
specjalnego programu komunikacyjnego o nazwie
AVRDude. Program ten musisz pobrać z Internetu i
zainstalować na swoim komputerze.
Jeśli pracujesz w systemie Windows, to pobierz i zainstaluj pakiet WinAVR (nie jest on już nowy, ale do nauki w zupełności wystarcza. Alternatywą jest pakiet udostępniony przez firmę Atmel). Pakiet zawiera w sobie narzędzia do kompilacji programów dla mikrokontrolerów AVR oraz program AVRDude. W środowisku Linux wpisz polecenia:
su root
Narzędzia do kompilacjiW środowisku Windows instalujesz pakiet
WinAVR.
W systemie Linux wpisz polecenia:
su root sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc exit Zainstalują one kompilator języka C o nazwie gcc-avr oraz różne programy użytkowe i program uruchomieniowy. Zainstalowane zostaną również pliki nagłówkowe (pomówimy o nich później) dla mikrokontrolerów rodziny AVR.
Środowisko EclipseWłaściwie po zainstalowaniu narzędzi i programu
komunikacyjnego AVRDude mógłbyś już programować kontrolery.
Jednakże wymagałoby to od ciebie wpisywania wielu rozkazów w
wierszu poleceń. Aby cię odciążyć od tej nieprzyjemnej
powinności, będziemy używać profesjonalnego środowiska
programowania o nazwie
Eclipse. Zaletą Eclipse jest to, że istnieje w
identycznej postaci w wielu różnych systemach operacyjnych,
np. w Windows i Linux. Alternatywą dla Eclipse jest Atmel
Studio, jednakże jest ono dostępne tylko w systemie
Windows i wspiera głównie firmowe programatory
(USBasp nie jest normalnie obsługiwany), które
działają kilkakrotnie szybciej od tanich USBasp. Z drugiej
strony producentem jest firma Atmel. Zdecyduj sam.
Czym jest Eclipse? Tego typu oprogramowanie nazywamy zintegrowanym środowiskiem programowania, w skrócie IDE (ang. Integrated Development Environment). Łączy ono w sobie zadania wielu oddzielnych programów. Zawiera wygodną konfigurację, edytor oraz łączność z dodatkowymi narzędziami, które zainstalowałeś w poprzednich punktach. Najpierw zainstaluj pakiet Eclipse. W systemie Windows ściągnij z Internetu odpowiednie archiwum, które następnie rozpakuj na dysku. Eclipse nie musi być specjalnie instalowane, wystarczy uruchomić plik programu eclipse.exe, który znajdziesz wewnątrz katalogu eclipse po rozpakowaniu ściągniętego z Internetu archiwum (Uwaga: do uruchomienia Eclipse niezbędne jest zainstalowanie najnowszego pakietu Java JRE). Jeśli korzystasz z systemu Windows 8/10, to dodatkowo umieść w katalogu WinAVR-xxx\utils\bin plik msys-1.0.dll. Bez tego pliku nie będzie poprawnie działał kompilator gcc-avr. W systemie Linux zainstaluj Eclipse z centrum oprogramowania. Następnie wpisz polecenia:
W obu przypadkach Windows i Linux uruchom Eclipse. Wybierz z menu opcję:
Help →
Install New Software
Pojawi się okno dialogowe Install. Kliknij w przycisk Add. Pojawi się nowe okienko dialogowe Add Repository, w którym będą dwa pola tekstowe Name i Location. W polu Location wprowadź adres:
http://avr-eclipse.sourceforge.net/updatesite/
Kliknij w przycisk OK. Spowoduje to pobranie informacji z podanej lokacji o dostępnych wtyczkach dla eclipse. W oknie Install powinien się pojawić element AVR Eclipse Plugin. Wybierz go i kliknij przycisk Next. Okno Install zmieni nieco swój wygląd i zobaczysz w nim wybraną do instalacji wtyczkę AVR Eclipse Plugin. Ponownie kliknij przycisk Next. Teraz będziesz musiał zatwierdzić warunki licencji. Na spodzie wybierz pierwszą opcję:
Kliknij przycisk Finish, co rozpocznie instalację wtyczki. W trakcie tego procesu pojawia się okno z ostrzeżeniem, że oprogramowanie zawiera niepodpisaną zawartość:
Zatwierdź je przyciskiem OK. Po instalacji wtyczki system Eclipse musi być ponownie uruchomiony, o czym poinformuje cię ostatnie okienko dialogowe. Gdy Eclipse uruchomi się ponownie, musimy skonfigurować w nim programator AVR. W tym celu z menu wybierz opcję:
Window → Preferences
Pojawi się okno dialogowe z preferencjami:
Jeśli instalacja wtyczki AVR Eclipse Plugin powiodła się, to w panelu bocznym zobaczysz element AVR. Otwórz go, klikając myszką w strzałkę po lewej stronie. Wybierz AVRDude:
W prawym panelu kliknij przycisk Add... Otworzy się duże okienko dialogowe z listą programatorów obsługiwanych przez AVRDude. U góry w polu Configuration Name wpisz USBasp. Na liście Programmer Hardware wyszukaj i zaznacz:
Kliknij przycisk OK. Okno z listą programatorów zostanie zamknięte. Wybrany programator powinien pojawić się w okienku preferencji:
Aby konfiguracja zaczęła obowiązywać, kliknij przycisk Apply, po czym zamknij okno przyciskiem OK. Po tej operacji twoje środowisko jest gotowe do rozpoczęcia programowania mikrokontrolerów AVR.
|
Pierwsza aplikacja AVR |
||||||||||||||||||||||||||||||||
Po zainstalowaniu środowiska programowania powinieneś je
przetestować. Uruchomimy zatem prostą aplikację dla
mikrokontrolera ATTiny13. Specjalnie wybrałem na początek
ten mikrokontroler, ponieważ jest mały i tani
(od 2 zł za sztukę w serwisie Allegro), a mimo to zawiera
wszystkie podstawowe elementy pozostałych, większych
mikrokontrolerów AVR. Naukę programowania lepiej rozpoczynać na
czymś prostym. ATTiny13 jest tutaj idealny.
Mikrokontroler ATTiny13 jest produkowany w różnych obudowach. Spotkasz wersję przewlekaną i SMD. Na początek zajmiemy się wersją przewlekaną, ponieważ łatwo ją wstawić w płytkę stykową i w podstawkę. Mikrokontroler ATTiny13 wyposażony jest w 8 końcówek o następujących oznaczeniach (oznaczenia odzwierciedlają funkcje spełniane przez końcówki, a tych jest kilka w zależności od trybu pracy mikrokontrolera; funkcje dodatkowe są oznaczone na czerwono):
Wyprowadzenia nr 4 i 8 służą do podpięcia odpowiednio masy (GND) i plusa zasilania (VCC). Pozostałe wyprowadzenia są bitami portu B. Port jest specjalnym rejestrem wewnątrz mikrokontrolera, poprzez który mikrokontroler komunikuje się ze światem zewnętrznym. Poszczególne bity tego rejestru są wyprowadzone na nóżki mikrokontrolera o numerach 1...3 i 5...7. Każdy bit portu B posiada oznaczenie PBn, gdzie n jest numerem tego bitu od 0 do 5 (port B w ATTiny jest 6-cio bitowy). Bity PBn wyprowadzone na nóżki zewnętrzne mikrokontrolera będziemy nazywać liniami portu B. Specjalną funkcję pełni linia PB5, ponieważ posiada ona funkcję zerowania stanu mikrokontrolera, gdy zostanie wprowadzona w stan niski. Również wykorzystywana jest przez interfejs ISP. Z tego powodu jej użycie jest dosyć ograniczone. Pozostałe linie PB0...PB4 są do twojej dyspozycji i możesz z nimi robić co ci się podoba. Musimy tutaj wyjaśnić jedną rzecz. Każda linia portu B może pracować jako wejście lub wyjście. W przypadku pracy jako wyjście mikrokontroler może ustawić na niej stan logiczny 0 lub 1 wpisując 0 lub 1 do odpowiedniego bitu portu B, co z kolei można wykorzystać do sterowania jakimś urządzeniem, np. diodą LED, silniczkiem, itp. Jeśli linia portu pracuje jako wejście, to urządzenie zewnętrzne może na niej ustawiać stan logiczny 0 lub 1, a mikrokontroler posiada możliwość odczytu tego stanu przez odczyt odpowiedniego bitu w rejestrze portu B. O trybie pracy linii portu decyduje program, co dokładnie opiszemy w dalszych rozdziałach kursu. Na płytce stykowej zmontuj następujący układ (widoczne na schemacie montażowym gniazdko Kanda należy do programatora AVR – łączysz jego bolce z płytką stykową za pomocą przewodów wyposażonych w złącza męskie i żeńskie. Poniżej schematu montażowego umieszczone zostały rysunki wyprowadzeń w złączu Kanda zarówno dla gniazdka w programatorze jak i dla wtyczki na końcu taśmy, w którą powinien być wyposażony programator AVR):
Mikrokontroler będzie sterował świeceniem diody LED podłączonej do linii PB0. Opornik 4,7kΩ wymusza na wejściu RESET stan wysoki. Zwykle nie jest potrzebny, lecz jego zastosowanie polepsza odporność układu na zakłócenia. Poniżej opisujemy krok po kroku procedurę tworzenia programu dla mikrokontrolera. Postaraj się dokładnie wykonać podane tu polecenia, gdyż od tego zależy sukces całej operacji.
Uruchom środowisko Eclipse. Obok pierwszej ikony
(New) na pasku narzędziowym u góry okienka znajduje
się strzałka w dół. Kliknij ją. Otworzy sie lista nowych
elementów, które możesz utworzyć tym narzędziem:
Na liście kliknij w C Project. Otworzy się nowe okno dialogowe projektu C.
W polu Project name wpisz wybraną nazwę dla projektu. Następnie kliknij strzałkę obok AVR Cross Target Application i zaznacz Empty Project. Kliknij przycisk Next. Pojawi się kolejne okno dialogowe.
W oknie tym odznacz opcję Debug. Pozostaw zaznaczoną opcję Release. Kompilacja w trybie Debug umieszcza w kodzie dodatkowe elementy, co nie wychodzi na zdrowie małemu ATTiny13. Dlatego należy tę opcję wyłączyć. Kliknij przycisk Next. Następne okno dialogowe pozwoli ci wybrać rodzaj mikrokontrolera, dla którego będzie tworzony program oraz częstotliwość jego pracy (istotne przy odmierzaniu czasu).
W polu MCU Type wybierz mikrokontroler ATtiny13. Pole MCU Frequency pozostaw nienaruszone. Kliknij przycisk Finish. Projekt został utworzony i jego nazwa powinna pojawić się w panelu po lewej stronie (tutaj będą pojawiać się tworzone przez ciebie projekty). Kliknij w nazwę projektu, aby został wybrany przez Eclipse.
Jeśli z jakiś powodów nie widzisz panelu C/C++ Projects, to z menu wybierz opcję:
Window → Show View → C/C++
Projects
W kolejnym kroku należy zdefiniować programator AVR, który chcesz używać ze swoim projektem. W tym celu wybierz z menu opcję:
Project → Properties
Pojawi się okno z opcjami projektu.
Otwórz w bocznym panelu sekcję AVR i kliknij w AVRDude. Wtedy z prawej strony pojawią się opcje konfiguracyjne dla AVRDude. Pod Programmer configuration znajduje się lista dostępnych programatorów (możesz przecież posiadać kilka różnych typów). Kliknij strzałkę w dół i wybierz USBasp (skonfigurowaliśmy go wcześniej). Kliknij przycisk Apply (ważne, inaczej Eclipse nie zapamięta twojego wyboru), a następnie kliknij OK.
Teraz musisz dodać do projektu plik źródłowy, w którym umieścisz tekst programu dla mikrokontrolera. Ponownie kliknij w strzałkę przy ikonie New.
Z listy wybierz Source File (plik źródłowy). Pojawi się okienko dialogowe:
W polu Source file wpisz nazwę pliku i kliknij w przycisk Finish. Eclipse utworzy w projekcie nowy plik źródłowy i otworzy go w oknie edytora.
Przekopiuj do tego okna poniższy tekst programu. Nie przejmuj się, jeśli go nie rozumiesz. Wszystko wyjaśnimy w dalszej części kursu.
Gdy program znajdzie się w edytorze, zapisz go na dysku, naciskając Ctrl+S (pamiętaj zawsze o zapisywaniu swoich programów przed kompilacją, ponieważ kompilator czyta plik z dysku, nie z edytora Eclipse). Teraz musimy przekształcić ten tekst w program dla mikrokontrolera AVR. W tym celu kliknij na pasku narzędziowym ikonę kompilatora:
Eclipse uruchomi kompilator gcc-avr, który dokona kompilacji, czyli przekształci tekst twojego programu źródłowego w ciąg kodów instrukcji dla mikrokontrolera AVR. Jeśli nie popełniłeś błędu, to w panelu konsoli powinien pojawić się taki tekst:
Finished building: sizedummy
Nie przejmuj się, jeśli tego nie rozumiesz. Tak naprawdę ważna jest końcówka, która podsumowuje zużycie pamięci programu (78 bajtów) oraz pamięci RAM (0 bajtów). Informacje te pozwalają się nam zorientować, czy program zmieści się wewnątrz mikrokontrolera. ATTiny13 dysponuje 1024 bajtami pamięci Flash dla programu (program zużywa jej tylko 7,6% tej pamięci) oraz 64 bajtami pamięci RAM. Wiem, że to niewiele, ale ATTiny13 przeznaczony jest dla bardzo prostych zadań, dlatego go właśnie wybrałem! Wynikiem działania kompilatora gcc-avr jest kilka plików, które powstają w katalogu projektowym. Na razie nie musisz znać ich dokładnego przeznaczenia. Po utworzeniu programu należy go przesłać do mikrokontrolera. Podłącz swój programator AVR do portu USB komputera. Kliknij na pasku narzędziowym ikonę AVRDude:
Jeśli wszystko skonfigurowałeś poprawnie, to w panelu konsoli pojawi się tekst z aplikacji AVRDude:
Output: avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.02s avrdude:
Device signature = 0x1e9007 Writing | ################################################## | 100% 0.62s avrdude: 78
bytes of flash written Reading | ################################################## | 100% 0.44s avrdude:
verifying ... avrdude finished
Po przesłaniu programu do mikrokontrolera ATTiny13 dołączona do niego dioda LED powinna zacząć mrugać (świecenie 1 sekunda, zgaszenie 1/10 sekundy i powtórka). Jeśli tak się dzieje, gratulacje, masz skonfigurowany system do tworzenia oprogramowania na mikrokontrolery AVR. Jeśli nie, sprawdź połączenia programatora z mikrokontrolerem. Jeśli są poprawne, to popełniłeś gdzieś błąd w konfiguracji oprogramowania. Wróć na początek rozdziału i spróbuj ponownie wykonać wszystko krok po kroku. Jeśli ci się dalej nie powiedzie, to poproś kolegę o zainstalowanie wszystkiego wg podanych tutaj procedur. Może jemu się uda.
PodsumowanieKolejne kroki tworzenia aplikacji dla
mikrokontrolera AVR są następujące:
|
Parametry mikrokontrolerów AVR |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Firma Atmel produkuje całą gamę różnych
mikrokontrolerów. Programuje się je bardzo podobnie za pomocą
tego samego programatora oraz środowiska IDE. Różnią się one
parametrami oraz możliwościami. Poniżej przedstawiamy kilka
wybranych mikrokontrolerów rodziny AVR. ATTINY13Jest to jeden z najmniejszych mikrokontrolerów, który nadaje się do prostych zastosowań. Układ posiada 8 wyprowadzeń, z których 6 pełni funkcję portów wejścia/wyjścia. Zawiera wydajny, 8-bitowy procesor RISC, który może wykonywać do 20 milionów operacji na sekundę przy taktowaniu 20MHz. Oprócz wersji podstawowej produkowane są układy o powiększonych możliwościach.
ATTINY24Mikrokontroler ATTINY24 posiada większe możliwości od opisanego wyżej ATTINY13. Dostępnych jest więcej linii portów (12 zamiast 6), co pozwala w prosty sposób sterować większą liczbą urządzeń lub urządzeniami, które wymagają kilku linii sterujących. Posiada również więcej pamięci programu i danych.
ATTINY2313Mikrokontroler ATTINY2313 jest najchętniej stosowanym mikrokontrolerem przez hobbystów. Powodem jest niska cena (około 4...6zł za sztukę) oraz względnie duża liczba wyprowadzeń, co umożliwia mu sterowanie nawet skomplikowanymi urządzeniami. Również powiększona pamięć Flash dla programu pozwala pomieścić bardziej złożone programy.
ATMEGA8Mikrokontroler ATMEGA8 posiada bardzo duże możliwości i jest stosowany tam, gdzie trzeba sterować skomplikowanymi urządzeniami lub program musi być bardzo złożony. Występuje również w kilku wersjach o różnych możliwościach. Do programowania ATMEGA8 potrzebny jest profesjonalny programator, ponieważ programowanie zwykłym programatorem USBasp zajmuje mnóstwo czasu (chyba że masz dużo cierpliwości).
|
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe