Chciałbym wypunktować najważniejsze rzeczy dotyczące programowania z użyciem biblioteki Arduino na czystym mikrokontrolerze bez płytki uruchomieniowej. Będzie to bardzo okrojona lista, dlatego na końcu artykułu w źródłach podaje link do filmiku i tutoriali gdzie jest to wyjaśnione dokładniej.
Kolejność działań:
- Pierwszą rzeczą, od jakiej musimy zacząć to podłączyć nasz uC do zasilania.
- Potem za pomocą programatora USBAsp podłączamy go do komputera.
- Teraz wchodzimy na stronę Arduino i szukamy odpowiednich bibliotek dla siebie. Nic nie musimy pobierać, wystarczy skopiować link do pliku konfiguracyjnego JSON.
- dla Atmega16 jest to MightyCore: https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json
- dla Atmega8 jest to MiniCore: https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
- Gdy już dysponujemy linkiem musimy go wkleić w preferencjach (pokazane na screenie) i zapisać.
- Teraz wchodzimy w menedżera płytek i wyszukujemy odpowiednią bibliotekę, np.: jeśli chcemy zaprogramować Atmege16 to musieliśmy wybrać MightyCore, więc wpisujemy tę nazwę i klikamy zainstaluj.
- Jeśli do tego momentu wszystko robiliśmy zgodnie z wytycznymi to w płytkach do wyboru powinny nam się pokazać nowe typy mikrokontrolerów. Wybieramy ten, który nas interesuje.
- Ustawienia (niżej w artykule opisane dokładniej):
- Pierwszą rzeczą, jaką ustawiamy po wybraniu płytki to oscylator. Arduino domyślnie ma zewnętrzny oscylator na 16Mhz, my prawdopodobnie będziemy musieli wybrać 1MHz internal, gdyż jest to domyślne taktowanie. Później polecam zmienić na 8MHz.
- Jeśli jest to Atmega16 lub podobna pod względem ilości wyprowadzeń to musimy pamiętać, aby wybrać odpowiedni pinnout.
- Wybranie odpowiedniego programatora, w naszym przypadku będzie to USPAsp.
- Pierwszą rzeczą, jaką ustawiamy po wybraniu płytki to oscylator. Arduino domyślnie ma zewnętrzny oscylator na 16Mhz, my prawdopodobnie będziemy musieli wybrać 1MHz internal, gdyż jest to domyślne taktowanie. Później polecam zmienić na 8MHz.
- Wypalenie bootloadera. W tym samym menu klikamy na dole „wypal bootloader”.
- Wgranie szkicu za pomocą programatora USBAsp, czyli w menu „szkic” klikamy „wgraj używając programatora”.
Możliwe błędy podczas wypalania albo wgrywania programu:
- Czasem zdarzyło mi się, że musiałem kliknąć kilka razy „wypal bootloader”, aby operacja zakończyła się pomyślnie.
Ustawienia
Tutaj omówię dokładniej niektóre możliwości ustawień dla płytek.
Pinnout dla Atmega16:
- Standard: domyślne numery pinów bazujące na czystym AVR (moim zdaniem najbardziej przejrzysty ze wszystkich)
- Bobuino: ustawienie pinów bazujące na Arduino Uno. Oznacza to, że programy pisane pod Uno będą działały nam na większym mikrokontrolerze, ponieważ numery pinów będą te same
- Sanguino: numeracja wyprowadzeń zgodna ze starymi drukarkami 3D. Nigdy nie korzystałem jeszcze z tego rozwiązania więc nie wiem jak bardzo przydatna jest ta numeracja wyprowadzeń
Ja osobiście używam pinnout`u Bobuino, gdyż zależy mi na zgodności pinów z Arduino Uno. Poniżej wklejam obrazek z właśnie tym pinnoutem:
BDO (brown out detection):
W skrócie ta opcja mówi nam, poniżej jakiego napięcia uC ma się wyłączyć. Domyślnie jest to 2.7V i proponują zostawić tę wartość, gdyż jest ona odpowiednia dla większości Atmega.
Wyprowadzenia Arduino Uno dla Atmega328:
Reszta rzeczy, ustawień i pinnout`ów jest bardzo dobrze wyjaśniona na Githubie projektu:
- MiniCore dla ATmega328, ATmega168, ATmega88, ATmega48 and ATmega8
- MightyCore dla ATmega8535, ATmega16, ATmega32, ATmega164, ATmega324, ATmega644 and ATmega1284
- MegaCore dla ATmega64, ATmega128, ATmega640, ATmega1280, ATmega1281, ATmega2560 and ATmega2561
- MicroCore dla ATtiny13, ATtiny13A and ATtiny13V