Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

Do strony głównej I LO w Tarnowie

Materiały dla uczniów liceum

  Wyjście       Spis treści       Poprzedni       Następny  

©2018 mgr Jerzy Wałaszek
I LO w Tarnowie

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

 

 

Elementy

Programatory

 

 

Co to jest programator?

Mikrokontroler (ang. microcontroller) jest małym komputerem, który umieszczono w pojedynczym układzie scalonym. Aby mikrokontroler mógł wykonywać cokolwiek użytecznego, musi posiadać program instruujący go, co ma robić. Ten program należy umieścić w pamięci FLASH, która znajduje się wewnątrz układu mikrokontrolera:

Programator (ang. programmer) jest urządzeniem elektronicznym, które umożliwia zapis programu w pamięci FLASH mikrokontrolera. Oprócz zapisu programator pozwala zwykle również odczytać program z pamięci FLASH w mikrokontrolerze (o ile opcja ta nie została zablokowana dla ochrony praw autorskich). Niestety, producenci mikrokontrolerów nie doszli jeszcze do porozumienia i mikrokontrolery różnych marek wymagają najczęściej specjalizowanych programatorów oraz odpowiedniego oprogramowania. Na szczęście popularne mikrokontrolery AVR można łatwo programować tanimi programatorami USB (koszt ok. 12zł). Platformy Arduino w ogóle nie wymagają żadnych programatorów, ponieważ można je programować bezpośrednio poprzez port USB (nawet same, po wgraniu odpowiedniego programu, mogą stać się programatorami różnych mikrokontrolerów). Takie rozwiązanie jest tanie i wygodne dla hobbystów. Jednak do przesyłu danych w mikrokontrolerze musi stale być obecny program ładujący (ang. loader), który umożliwia transmisję poprzez USB. Program taki zajmuje około 2KB pamięci programu. Dla dużych mikrokontrolerów nie jest to wielki problem, jednakże w małych jednostkach program ładujący może niekiedy być istotną przeszkodą. Przy programowaniu za pomocą programatora nie jest wymagany program ładujący i użytkownik ma do swojej dyspozycji praktycznie całą pamięć FLASH mikrokontrolera. W Arduino też można stosować programator, pomijając program ładujący, jednak wtedy traci się możliwość późniejszego programowania poprzez USB (o ile loader nie zostanie odtworzony). Jest to zatem opcja dla bardziej zaawansowanych elektroników.

Programując mikrokontrolery musisz znać i rozumieć zagadnienia związane z programatorami. W rozdziale tym opiszemy podstawowe programatory, z którymi możesz się spotkać w praktyce.

 

Arduino

Arduino nie jest programatorem mikrokontrolerów (chociaż może nim zostać po wgraniu odpowiedniego oprogramowania). Jest to platforma zawierająca mikrokontroler AVR. Istnieje mnóstwo wersji Arduino (tutaj zajmuję się tylko 4 rodzajami z uwagi na ograniczenia finansowe: Digispark, Nano, Uno i Mega):

Arduino Digispark Arduino Nano Arduino Uno Arduino Mega
Procesor: ATTINY 85 16MHz
FLASH: 8KB (w tym 2KB loader)
RAM: 512B
EEPROM: 512B
Procesor: ATMEGA 328 16MHz
FLASH: 32KB (w tym 2KB loader)
RAM: 2KB
EEPROM: 1KB
Procesor: ATMEGA 328 16MHz
FLASH: 32KB (w tym 0,5KB loader)
RAM: 2KB
EEPROM: 1KB
Procesor: ATMEGA 2560 16MHz
FLASH: 256KB (w tym 8KB loader)
RAM: 8KB
EEPROM: 2KB

Każdy z tych modeli Arduino programowany jest bezpośrednio z portu USB komputera PC, nie wymaga zatem osobnego programatora. Arduino programowane jest w odmianie języka C++ i wymaga instalacji środowiska programowania Arduino IDE, które możesz darmowo pobrać ze strony projektu:

https://www.arduino.cc/

Szczegóły programowania Arduino znajdziesz w krótkich kursach, które znajdują się na naszym Warsztacie. W sieci znajdziesz mnóstwo informacji na temat Arduino, bibliotek dla tej platformy, projektów i innych narzędzi, dlatego jest to platforma szczególnie polecana początkującym elektronikom.

Digispark jest projektem firmy Digistump. Jest to najmniejszy (prawdopodobnie) model kompatybilny programowo z Arduino (po zainstalowaniu odpowiedniej nakładki na środowisko programowania Arduino IDE). Nadaje się on do bardzo prostych projektów z uwagi na małą liczbę portów (tylko 6, a właściwie 5, ponieważ jeden służy jako RESET). Nie polecam go zupełnie początkującym, ponieważ z uwagi na prostotę i redukcję kosztów płytka Digispark może sprawiać różne kłopoty.
Nano Jest miniaturową wersją płytki UNO. Posiada ten sam procesor w wersji SMD oraz tyle samo portów we/wy i jest kompatybilny programowo z Uno. Komunikuje się z komputerem PC za pomocą portu USB (USB 2.0 mini B).
Uno Jest to podstawowy model Arduino. Programowanie odbywa się złączem USB B. Mikrokontroler posiada swoją podstawkę – w razie uszkodzenia można go szybko wymienić bez lutowania (jednakże wtedy należy umieścić w nim program loadera). Dla tego modelu znajdziesz w sieci najwięcej projektów i bibliotek.
Mega to platforma dla dużych projektów. Zastosowany mikrokontroler posiada dużą pamięć dla programów, co umożliwia wprowadzanie bardzo skomplikowanych aplikacji. Duża liczba portów we/wy pozwala na sterowanie złożonych urządzeń zewnętrznych. Programowanie za pomocą złącza USB B.

Zwróć uwagę na 6 goldpinów na płytkach Arduino Nano, Uno i Mega. Służą one do podłączenia zewnętrznego programatora AVR, który pozwala zaprogramować mikrokontroler na płytce Arduino w dowolny sposób z pominięciem USB. Jest to opcja dla zaawansowanych użytkowników. Dzięki niej możesz zrobić z Arduino, co tylko zechcesz.

 

Mikrokontrolery AVR

Mikrokontrolery AVR stały się ogromnie popularne ze względu na niską cenę, wydajność oraz łatwość programowania. Są to układy 8-bitowe produkowane przez firmę Atmel, obecnie przejętą przez Microchip (producent mikrokontrolerów PIC). Można je programować na różne sposoby (Eclipse, AVR Studio i inne). Rodzina układów jest bardzo rozległa, jednakże cechuje je podobny sposób przesyłania danych pomiędzy mikrokontrolerem a programatorem. Wykorzystywana jest transmisja SPI (ang. Serial Peripheral Interface – Szeregowy Interfejs dla Urządzeń Peryferyjnych). Wykorzystuje ona 4 linie:
  • RESET – stan niski wprowadza mikrokontroler w tryb programowania. Stan niski musi być utrzymywany przez cały okres programowania układu AVR.
  • SCK – tutaj pojawiają się impulsy zegarowe, które synchronizują transmisję danych.
  • MOSI – tą linią przesyłane są dane z programatora do mikrokontrolera w takt impulsów SCK.
  • MISO – tą linią mikrokontroler przesyła dane do programatora w takt impulsów SCK.

W zależności od typu mikrokontrolera AVR linie te są podpinane do różnych wyprowadzeń. Tutaj musisz sięgnąć do danych technicznych mikrokontrolera, ponieważ nie ma jakiejś stałej reguły. Poniżej przedstawiam kilka popularnych mikrokontrolerów AVR z zaznaczonymi liniami programowania:

ATTINY13
ATTINY25
ATTINY45
ATTINY85
ATTINY24
ATTINY44
ATTINY84
ATTINY2313
ATMEGA8
ATMEGA48
ATMEGA88
ATMEGA168
ATMEGA328
ATMEGA16
ATMEGA32

Programator dla mikrokontrolerów AVR udostępnia 6 linii, które podłącza się do odpowiednich końcówek układu mikrokontrolera (zgodnie z danymi technicznymi układu):

Programator wyposażany jest najczęściej w gniazdo KANDA 6 lub KANDA 10, z którego pobierane są sygnały programujące mikrokontroler:

KANDA 6
KANDA 10

Istnieją przejściówki pomiędzy gniazdami KANDA 10 a KANDA 6. Warto się w coś takiego wyposażyć:

Programator posiada gniazdo lub wtyk USB do połączenia z komputerem PC, a z drugiej strony gniazdo programujące mikrokontroler:

Na płytce programatora znajduje się odpowiednio zaprogramowany mikrokontroler, który steruje procesem przesyłania danych pomiędzy komputerem PC a programowanym mikrokontrolerem.

Do programowania mikrokontrolera AVR możesz użyć zwykłej płytki stykowej oraz przewodów z wtykami żeńskimi po jednej stronie i męskimi po drugiej. Mikrokontroler umieszczasz w płytce, po czym łączysz płytkę przewodami z programatorem:

Jeśli często programujesz mikrokontrolery w ten sposób, to warto zakupić programator z gniazdem ZIF (ang. Zero Insertion Force – zerowa siła włożenia). W gniazdo ZIF wkładasz układ scalony mikrokontrolera, po czym blokujesz go dźwigienką. Układ zostaje wtedy elektrycznie połączony z programatorem.

Tego typu programatory automatycznie przesyłają sygnały programujące do odpowiednich wyprowadzeń układu mikrokontrolera (po ustawieniu jego typu w programatorze).

Kilka lat temu skonstruowałem prostą przystawkę do programatora AVR, która podłącza sygnały do właściwych końcówek mikrokontrolera. Rodzaj programowanego mikrokontrolera wybiera się wpinając tasiemkę w odpowiednie gniazdo na płytce, a sam mikrokontroler jest wkładany do podstawki ZIF:

Programator podłącza się tasiemką do gniazda KANDA 6 lub KANDA 10, które znajdują się z boku płytki. Dioda czerwona sygnalizuje obecność zasilania, dioda niebieska świeci się w czasie programowania (gdy sygnał RESET z programatora przyjmuje stan niski).

Mikrokontrolery AVR mogą być programowane bezpośrednio w układzie, w którym pracują. Warunkiem jest, aby współpracujące elementy układu nie zakłócały transmisji danych liniami SCK, MISO i MOSI.  Przykładem mogą tutaj być płytki Arduino, które posiadają złącza KANDA 6 do programowania mikrokontrolera poza systemem Arduino:

Programowanie mikrokontrolera w układzie nosi nazwę ISP (ang. In System Programming). Rozwiązanie to jest bardzo wygodne, ponieważ w trakcie uruchamiania (często potrzebujesz kilkakrotnie poprawiać program mikrokontrolera, aby wszystko działało zgodnie z twoimi zamierzeniami) nie musisz oddzielać mikrokontrolera od jego układu aplikacyjnego – istotne dla mikrokontrolerów SMD, które są lutowane do płytki. Płytkę aplikacyjną projektuje się tak, aby znalazło się na niej gniazdo Kanda 6 lub istniała prosta możliwość podłączenia sygnałów programujących.

Po przebrnięciu przez problemy połączeniowe przejdźmy do samych programatorów AVR.

Programator jest urządzeniem komunikującym się z komputerem PC za pomocą portu USB. Aby programator został rozpoznany przez system operacyjny w momencie podłączenia do portu USB, musisz zainstalować odpowiedni sterownik. Opisujemy to w dziale Instalacji Oprogramowania przy odpowiednim środowisku programowania.

Kolejnym niezbędnym składnikiem oprogramowania jest program komunikacyjny, który steruje pracą programatora poprzez port USB. Popularnym programem tego typu jest aplikacja AVRDUDE, która pracuje zarówno w systemie Windows jak i Linux. AVRDUDE umożliwia odczyt/zapis pamięci FLASH i EEPROM mikrokontrolera. Niektóre środowiska posiadają własne sterowniki oraz programy komunikacyjne, które wymagają firmowych programatorów.

Programatory USBasp

Są to proste i tanie programatory AVR. Możesz kupić taki programator za około 8...12 zł. Szybkość programowania nie jest specjalnie duża, ale wystarczająca na potrzeby amatorskie. Nadają się szczególnie dla małych mikrokontrolerów AVR z rodziny ATTINY. Programator USBasp posiada z jednej strony wtyk USB, który można podłączać bezpośrednio do gniazda USB komputera PC. Z drugiej strony znajduje się gniazdo KANDA z sygnałami sterującymi procesem programowania mikrokontrolera AVR (Vcc, GND, RST, SCK, MOSI i MISO).

Programatorów tego typu nie obsługuje środowisko Atmel Studio 7. Jednakże bez większych problemów możesz je używać z popularnym środowiskiem Eclipse wraz z AVRDUDE. Programatory pozwalają na programowanie mikrokontrolerów AVR bezpośrednio w układzie elektronicznym bez potrzeby ich wyjmowania (ISP).

Programatory MKII/MKIII

Dla bardziej wymagających elektroników przeznaczone są programatory MKII i MKIII. Ich zaletą jest duża szybkość programowania (istotne przy większych mikrokontrolerach posiadających dużą pamięć programu) oraz dodatkowe tryby i funkcje, których nie posiadają proste programatory. Cena tych programatorów jest w granicach od 70...200 zł. Programatory MK2/3 są bezpośrednio obsługiwane przez AVR Studio. Obsługuje je również aplikacja AVRDUDE, co pozwala na programowanie mikrokontrolerów AVR w środowisku Eclipse. Programatory MKII pozwalają programować praktycznie wszystkie układy AVR, nawet te najnowsze. Jeśli poważnie myślisz o programowaniu mikrokontrolerów, to powinieneś zakupić programator tego typu.

Programatory MKII/III komunikują się z komputerem PC poprzez złącze USB 2.0. Komunikacja z mikrokontrolerami może odbywać się w różny sposób, zwykle jest to SPI poprzez złącza KANDA, jednak programatory te pozwalają na pracę wg innych trybów, np. w trybie programowania wysokonapięciowego (ang. HVP: High Voltage Programming): mikrokontrolery AVR posiadają tzw. fusebity (bity bezpiecznikowe), które można ustawiać lub zerować poprzez programator. Niektóre z ich funkcji mogą spowodować utratę łączności z mikrokontrolerem w normalnym trybie SPI (np. przełączenie portu RESET w tryb zwykłego portu we/wy wyłącza możliwość programowania). W takim przypadku układ mikrokontrolera można naprawić programując go wg protokołu HVP: do linii RESET przyłącza się napięcie 12V (stąd w nazwie słowo "wysokonapięciowe"), po czym na ustalone końcówki układu podaje się sygnały komunikacyjne. Szczegóły znajdziesz w instrukcji programatora i mikrokontrolera.

Inne programatory AVR

Opisane powyżej dwa rodzaje programatorów mikrokontrolerów AVR nie wyczerpują tematu – na rynku znajduje się mnóstwo różnego rodzaju programatorów. Nie opisuję ich wszystkich, ponieważ z większością nie miałem okazji pracować. Można jednak zauważyć tutaj pewną prawidłowość: im więcej możliwości oferuje programator, tym jest droższy. W praktyce amatorskiej nie potrzebujesz profesjonalnego sprzętu, chyba że otwierasz własną produkcję, ale wtedy przestajesz być amatorem, nieprawdaż? Przez wiele lat korzystałem z prostych programatorów USBasp/MK3 i nigdy nie narzekałem, są zupełnie wystarczające.

W handlu możesz spotkać programatory uniwersalne, czyli takie, które umożliwiają programowanie wielu różnych marek mikrokontrolerów. Dosyć popularny jest programator TL866A:

Programator TL866A posiada podstawkę ZIF, w której umieszcza się programowany układ. Istnieje też możliwość programowania w układzie ISP za pomocą dołączonego kabla. Programator współpracuje z ponad 13 tysiącami różnych układów (mikrokontrolery AVR, PIC, pamięci, układy TTL, CMOS itp.):

Sterowanie programatorem odbywa się poprzez złącze USB i specjalny program (zdjęcie powyżej). Takie urządzenie jest przydatne dla zaawansowanych elektroników, którzy pracują z mikrokontrolerami różnych firm oraz z innymi układami programowalnymi. Początkujący raczej z tego nie skorzysta, a za programator trzeba dać około 300zł.

Oprócz samych programatorów w handlu obecne są zestawy uruchomieniowe, które pozwalają programować mikrokontrolery oraz testować ich działanie. Taką popularną platformą jest STK500 (koszt ponad 500zł):

Zaletą tego zestawu jest to, iż współpracuje on bezpośrednio z AVR Studio 7, co nie jest niczym dziwnym, ponieważ oba produkty są dziełem firmy ATMEL.

 

 

Mikrokontrolery PIC

Firma Microchip Technology Inc. jest producentem olbrzymiej rodziny mikrokontrolerów, które krótko nazywamy mikrokontrolerami PIC (ang. Peripheral Interface Controller). Mikrokontrolery PIC obejmują całą gamę układów, od najprostszych do bardzo zaawansowanych, przewyższających możliwościami najpotężniejsze jednostki AVR. Obecnie Microchip przejął firmę Atmel i mikrokontrolery AVR są również produkowane przez tę firmę.

Koszt mikrokontrolerów PIC jest porównywalny z kosztem mikrokontrolerów AVR, niekiedy można otrzymać te mikrokontrolery za darmo od firmy Microchip – trzeba być studentem i posiadać adres pocztowy w domenie .edu. Mikrokontrolery PIC nie są specjalnie trudniejsze w programowaniu od AVR'ów, jednak wymagają bardziej profesjonalnych narzędzi, dlatego nie polecam ich zupełnie początkującym. Z drugiej strony PIC'e oferują więcej możliwości niż AVR'y. Sam musisz zatem dokonać wyboru swojego ulubionego mikrokontrolera.

Do programowania mikrokontrolerów PIC mogą być stosowane różne programatory – najprostsze możesz nawet wykonać samemu, jednakże godny polecenia jest programator PICkit 3:

Koszt jest dosyć duży: za oryginał należy zapłacić ponad 200 zł, chińskie klony można kupić już od 80 zł. Dlaczego akurat ten programator? Do programowania mikrokontrolerów PIC musisz posiadać odpowiednie oprogramowanie, a najlepsze jest tutaj MPLAB X IDE firmy Microchip. Środowisko to współpracuje bezpośrednio z programatorem PICkit3.

Programator ten pozwala programować mikrokontrolery PIC bezpośrednio w układzie docelowym pod warunkiem, iż nie będą zakłócane sygnały transmisji danych. Istnieją również przystawki do tego programatora z podstawką ZIF:

 

Kontrolery PIC stosują do programowania inny protokół niż kontrolery AVR. Programator PICKIT 3 posiada 6 wyjść (wyjście nr 1 oznaczone jest na obudowie białym trójkatem):

VPP – napięcie programowania
MCLR – Master Clear, zerowanie
VDD – napięcie zasilania
VSS – GND, masa
ICSPDAT/PGD – we/wy danych programowania
ICSPCLK/PGC – zegar programowania szeregowego
LVP – Low Voltage Programming, programowanie niskim napięciem

Znaczenie poszczególnych linii sygnałowych jest następujące:

VPP/MCLR  –  tutaj pojawia się napięcie programujące, około 13V. Dodatkowo stan niski pozwala zresetować mikrokontroler. Linia ta powinna być połączona opornikiem 4,7...10k z napięciem zasilającym układ. Opornik pełni funkcję podciągającą (ang. pull-up).
VDD  –  linia powinna być podłączona do napięcia zasilającego mikrokontroler. Jeśli mikrokontroler nie jest zewnętrznie zasilany, to programator PICKIT wykrywa to badając napięcie tej linii. W takim przypadku programator PICKIT może dostarczyć odpowiednie napięcie zasilające, jednakże musisz pamiętać, że nie nadaje się ono do zasilania całego układu z mikrokontrolerem, ponieważ pozwala jedynie na pobór około 30mA prądu. Dlatego zaleca się, aby programowany układ posiadał niezależne, własne zasilanie. Jednak do testu wykorzystamy tę linię do zasilania mikrokontrolera, który sam nie pobiera dużego prądu.
VSS  –  masa elektryczna.
ICSPDAT/PGD  –  (ang. ICSP: In Circuit Serial Programming – programowanie szeregowe wewnątrz układu) tą linią przesyłane są dane pomiędzy programatorem a mikrokontrolerem.
ISDPCLK/PGC  –  ta linia przesyła impulsy zegarowe do mikrokontrolera, które synchronizują transmisję danych pomiędzy mikrokontrolerem a programatorem.
LVP  –  umożliwia programowanie mikrokontrolerów niskim napięciem. Tej linii nie będziemy używać.

Sposób dołączenia programatora do kontrolera zależy od typu kontrolera i tutaj musisz się posiłkować danymi technicznymi programowanego układu. Zalecane jest następujące połączenie wyjść programatora PICkit 3 z mikrokontrolerem:

Poniżej kilka popularnych kontrolerów PIC z zaznaczonymi wyprowadzeniami do programowania i połączeniami na płytce stykowej:

Kontrolery PIC możesz oczywiście programować za pomocą innych programatorów. Jeśli nie będą one obsługiwane z poziomu MPLAB X, to nie ma tragedii. Program napisany w tym środowisku kompilujesz i w katalogu projektowym powstanie plik z rozszerzeniem hex. Jest to zapis programu w notacji szesnastkowej. Wystarczy taki plik zaimportować do programu obsługującego programator i zaprogramować nim mikrokontroler.

Przykładem takiego programatora jest K150 (koszt około 40...50zł):

Programator posiada podstawkę ZIF oraz gniazdo do programowania w układzie. Tutaj znajdziesz sposób jego instalacji w Windows 10.

 

 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2018 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.