Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
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 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:
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.
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.
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).
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.
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.
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 ©2024 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.