Arduino jako ISP czyli jak wgrać bootloader w ATmega
Często stajemy przed problemem jak wgrać w fabrycznie nowy układ ATmega328 bootloader Arduino. Zawsze można kupić gotowy układ albo programator np USBASP, jednak jeżeli pod ręką mamy działające Arduino, ono nam może posłużyć jako programator.

Procedura jest następująca:
- w działające Arduino wgrywamy szkic ArduinoISP (menu File/Examples/ArduinoISP) tak jak nasze zwykłe programy
- podłączamy układ ATmega do naszego Arduino (z prawej oznaczenie wyjścia na UNO)
- zasilanie – 5V (chyba że to układ działający tylko do 3.3V)
- masa – GND
- MOSI – D11
- MISO – D12
- SCK – D13
- reset – D10
- Jeżeli naszym programatorem ma być układ z rodziny Arduino Mega, wówczas piny po stronie Mega wyglądają tak
- MOSI – D51
- MISO – D50
- SCK – D52
- reset – D53
- można zaprogramować ATmegę wprost w innym Arduino, ma to znaczenie zwłaszcza, jeżeli jest to układ ze scalakiem wlutowanym na stałe (na zdjęciu programowanie Arduino Pro Mini)
- W menu wybieramy rodzaj programatora Tools/Programmer/Arduino as ISP
- W menu Tools/Board wybieramy taką płytkę, jakiej bootloader chcemy wgrać (na zdjęciu jest to Pro Mini 5V, więc wybrany został Arduino Pro or Pro Mini (5V, 16 Mhz) w/ATmega328)
- Pozostaje tylko Tools/Burn Bootloader i czekać na komunikat o sukcesie
Dla ułatwienia pracy do Arduino działającego jako programator można podłączyć kilka diod (nie zapomnieć o rezystorze ograniczającym prąd), by widzieć wyraźnie co się w danym momencie dzieje. I tak D9 – heartbeat (znak że szkic działa), D8 – wystąpił błąd, D7 – programowanie w trakcie.
To teraz powiedz jak to zrobić z arduino leonardo – bo jego mi się jakiś czas temu za nic nie udało odpalić jako programator ISP
@Kitsibas
To jest dobre pytanie. Sam nie korzystam zbyt często z Leoanrdo i zdarza mi się nie myśleć w kategoriach tej płytki. Sęk w tym że ATmega32u4 ma na innych wyjściach SPI więc lądują one gdzie indziej. Podobnie jest na Arduino Mega. Tyle że przypadku Leonardo:
http://arduino.cc/en/Main/ArduinoBoardLeonardo
Czyli inaczej mówiąc trzeba podłaczyć ze złącza ICSP na Leonardo. Które piny? MOSI/MISO/SCK są na headerze: https://starter-kit.nettigo.pl/wp-content/uploads/2012/04/avr_programmer.jpg
Reset (D10 w wersji UNO) musisz ustawić na inne cyfrowe wyjście – przez zmianę w
#define RESET SS
(w ArduinoISP szkicu). Powinno wtedy działać. Jeśli mu wystarczy czasu spróbuję to zrobić na Leonardo, zobaczymy czy się uda…Hej! A możesz napisać jak do układu z wgranym bootloaderem wgrać teraz wsad z naszym programem?
Kuba: w menu „Narzędzia->Programator” wybierasz swój programator.
Potem gdy chcesz wysłać program do Arduino klikasz przycisk „Załaduj” z przyciśniętym przyciskiem [Shift]. Wtedy program załaduje się przez programator.
@Kuba
Chyba, że chodzi Ci o 'zwykłe’ programowanie Mini przez konwerter USB/Serial, nie programator.
Jeżeli o takie programowanie to kiedyś o tym pisaliśmy: https://starter-kit.nettigo.pl/2011/01/programowanie-arduino-pro-mini-za-pomoca-usb-mini/ jest to dalej aktualne, tyle że konwerter pewnie masz jakiś inny, ale zasada podłączenia jest taka sama.
Co trzeba zrobić gdy otrzymujemy komunikat o błędnej sygnaturze? Od kilku dni walczę z zaprogramowaniem fabrycznie nowej Atmegi8L-8PU za pomocą Arduino Uno i nie mogę sobie z tym poradzić. Próbowałem w boards.txt zmieniać szybkość taktowania na fabryczny 1MHz ale to też nie pomagało, jak za pomocą Arduino zmienić taktowanie wewnętrznego oscylatora lub w ogóle jak zmusić ją do współpracy z Arduino. Pozdrawiam
Czy ktoś mogłby opisać powyższą procedurę gdy mamy Leonardo jako programator? Była wyżej zapowiedź ale teraz cisza.
Mam Leonardo i ATmegę88 i chciałbym przenieść swój projekt zwalniając Leonardo do innych celów. Przekopywanie internetu jak na razie mało pomogło. Chyba moja kombinacja jest mało popularna :(
Ja poległem i kupiłem USBASP. taniej i prościej.
A mnie się jednak udało. Okazało się, że mam ATmega88P i znalazłem stosowny bootloader na http://mypocket-technologies.com/2013/09/bootload-an-atmel-atmega88p/
Udało się zapakować po kablu LPT, który nic nie kosztuje, do uC, a później wrzucić jakiś przykładowy szkic z Arduino IDE, który mi teraz piknie diodą mruga.
Mam tylko wątpliwość dlaczego przy wgrywaniu bootloadera jak i szkicu dostaję taki komunikat:
avrdude: verification error, first mismatch at byte 0x1800
0x19 != 0xff
avrdude: verification error; content mismatch
Wygląda to jak jakiś błąd, ale wszystko działa prawidłowo, więc sam już nie wiem co to oznacza.
Znalazłem stronę gdzie posiadacze Leonardo mogą go skutecznie zamienić na programator ISP. Sprawdzone i rzeczywiście działa.
http://www.instructables.com/id/Arduino-Leonardo-as-Isp
Dziękuję za artykuł – bardzo użyteczny. Przydał by się jeszcze jednak rysunek gdzie są poszczególne złącza, jak np. na tej stronie
https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader/connecting-the-programmer
Pozdrawiam!
Tak dla potomności – właśnie wgrałem bootloader do Arduino Leonardo Eth z wykorzystaniem Arduino Mega jako programatora.
Aby się to udało, należy wgrać szkic ArduinoISP do płytki która ma być programatorem a następnie połączyć kablami tak jak jest to w opisie (np. tu https://www.arduino.cc/en/tutorial/arduinoISP) ale.. płytkę Leonardo nie podłączamy na piny tylko do złącza ICSP.
W moim przypadku było to tak:
50 na ICSP-1
5V na ICSP-2
52 na ICSP-3
51 na ICSP-4
10 na ICSP-5
GND na ICSP-6
Pozdrawiam