W poprzednim artykule opisałem programowanie Arduino Pro Mini. Jest to idealny układ do wykorzystania w docelowym urządzeniu. Osoby, które chcą zbudować własny układ elektroniczny od podstaw zainteresuje natomiast możliwość zaprogramowania mikrokontrolerów ATmega328, ATmega168, ATmega8 i innych w taki sposób, by udawały układy Arduino. Warto zastanowić się, czy takie rozwiązanie ma sens. Układy Atmel ATmega możemy programować z wykorzystaniem asemblera lub języka C. Takie programowanie daje nam pełną kontrolę nad rejestrami, licznikami, pamięcią i wszystkim, co wbudowano w układy Atmela.
Podstawową wadą programowania w asemblerze, czy nawet w C jest to, że musimy znać zasadę działania i budowę poszczególnych składowych mikrokontrolera. Arduino upraszcza programowanie wprowadzając pewną warstwę abstrakcji. Nie musimy znać dokładnie zasady odczytu danych z portów analogowych, wystarczy, że znamy polecenie, które to wykona. Dodatkowo Arduino udostępnia masę bibliotek do obsługi "wszystkiego co potrzebne". Sam swego czasu programowałem układy ATmega w asemblerze, później w C z wykorzystaniem GCC-AVR. W pewnym momencie doszedłem jednak do wniosku, że zbyt dużo czasu poświęcam na "wyważanie otwartych drzwi" zamiast skupić się na właściwym budowanym układzie. Podsumowując: jeżeli chcesz budować własne ciekawe układy elektroniczne, a nie masz ochoty na zagłębianie się w tajniki budowy i programowania mikrokontrolerów, to korzystaj z układów Arduino i pakietu ArduinoIDE. W przypadku, gdy Arduino ogranicza Twoje pomysły, a wiesz, że mikrokontroler jest w stanie to wykonać przerzuć się na C. Tu dochodzimy do sedna sprawy. Jak układ ATmega zamienić na sprawne Arduino? Sprawa jest prosta, choć wymaga posiadania elementarnej znajomości elektroniki.
Układy Arduino wykorzystują mikrokontrolery firmy Atmel. Przykładowo w Arduino UNO zamontowano układ ATmega328. Mikrokontroler ATmega328 zamontowany w Arduino UNO różni się od mikrokontrolera ATmega328 kupionego w sklepie jednym drobnym elementem - ma wgrany tzw. bootloader, czyli mały program, który umożliwia wgrywanie właściwego programu za pomocą interfejsu szeregowego. Typowy układ Arduino taktowany jest za pomocą kwarcu 16MHz. Poniżej przedstawiono sposób podłączenia mikrokontrolera ATmega328 do programatora zbudowanego z Arduino UNO.
Do prawidłowej pracy układu wymagane są 4 dodatkowe elementy:
- rezonator 16MHz,
- dwa kondensatory 22pF,
- rezystor 10K (reset układu - nie jest wymagany przy programowaniu).
W poniższej tabeli przedstawiono sposób połączenia Arduino UNO do mikrokontrolera w celu jego zaprogramowania (wgrania bootloadera).
Arduino UNO | ATmega328 |
---|---|
+5V | VCC (7) |
GND | GND (8) |
10 | RESET (1) |
11 | MOSI (17) |
12 | MISO (18) |
13 | SCK (19) |
Dodatkowo do wyprowadzeń 9 i 10 należy podłączyć rezonator kwarcowy i kondensatory, natomiast pomiędzy wyprowadzenie nr 1 a +5V rezystor 10K. Schemat podłączenia poszczególnych elementów przedstawiono poniżej.
Po podłączeniu i sprawdzeniu poprawności połączeń możemy przejść do właściwej operacji wgrania bootloadera do mikrokontrolera ATmega328.
UWAGA!!! Nieprawidłowe podłączenie może doprowadzić do uszkodzenia któregoś z układów, a w skrajnym przypadku do uszkodzenia komputera. Wszystkie połączenia wykonujesz na własną odpowiedzialność.
Pierwszym krokiem jaki należy wykonać jest przerobienie układu Arduino UNO na programator. Jest to bardzo prosta czynność, ponieważ w zestawie przykładowych programów dostarczonych z pakietem ArduinoIDE znajduje się program ArduinoISP. Wgrywamy go do Arduino i od tego momentu Arduino jest pełnoprawnym programatorem układów Atmel ATmega.
Kolejnym krokiem jest ustawienie w ArduinoIDE(Narzędzia->płytka) typu układu jaki chcemy zbudować. Dokładniej poinformujemy nasz programator jaki bootloader zostanie wgrany do mikrokontrolera. W tym miejscu wyjaśnię różnice pomiędzy poszczególnymi układami. Każdy typ Arduino charakteryzuje się specyficzną budową. Oznacza to, że w jednym układzie stosuje się ATmega328, w innym ATmega8, w jeszcze innym ATmega1280. Dodatkowo różne układy Arduino łączą się z komputerem za pomocą konwertera USB-RS różnego typu. Programując nasz mikrokontroler wybieramy bootloader pasujący do niego:
- ATmega328 - Arduino UNO, Arduino Pro Mini,
- ATmega8 - Arduino NG/ATmega8,
- ATmega168 - Arduino NG/ATmega168.
Po wybraniu układu wybieramy programator(Narzędzia->programator->Arduino as ISP). Ostatnią rzeczą jaką należy wykonać jest wypalenie bootloadera (Narzędzia->wypal bootloader). W przypadku, gdy wszystkie połączenia były prawidłowe po kilku sekundach układ zostanie zaprogramowany. Jeżeli z jakichś względów wypalanie bootloadera nie zostanie zakończone prawidłowo należy sprawdzić połączenia i spróbować jeszcze raz. Ja do mikrokontrolera wgrywam najczęściej bootloader Arduino Pro Mini. W sytuacji, gdy wszystko zakończyło się sukcesem dysponujemy układem scalonym z wgranym bootloaderem, który możemy programować z wykorzystaniem pakietu ArduinoIDE. Co nam to daje? Możemy zbudować układ testowy z wykorzystaniem Arduino, a następnie zaprojektować płytkę i polutować gotowy układ elektroniczny montując w nim mikrokontroler ATmega.
To jednak nie wszystko. Możemy nasz nowy układ przeprogramować wykorzystując konwerter USB-RS TTL. Jak to zrobić można przeczytać w poprzednim artykule: Oswajamy Arduino Pro Mini
Podsumowanie
W prosty sposób możemy klonować układy Arduino poprzez wypalanie bootloadera. Jest to operacja prosta, szybka i co ważne LEGALNA, ponieważ Arduino jest projektem Open Hardware. Przygotowane w ten sposób mikrokontrolery możemy wykorzystywać we własnych projektach zgodnie z własnym uznaniem. Efekty końcowe uzależnione są jedynie od wyobraźni autora projektu.