Część pierwsza – wgrywanie bootloadera
Artykuł by nie powstał gdyby nie strona http://www.gammon.com.au/breadboard.
Facet, który to napisał nazywa się Nick Gammon i dzięki niemu pierwszy raz wgrałem bootloader-a do Atmegi 328. Wcześniej przejrzałem dziesiątki filmów i nic. Tak jak mnóstwo ludzi (sądząc po komentarzach) nie dawałem rady wgrać boota do Atmegi przez Arduino IDE. Facet pokazał połączenie płytki z procesorem i napisał program, który bardzo w tym pomaga. I chwała mu za to!
Podstawowe połączenie umożliwiające wgranie bootloadera i programowanie procesora przez Arduino:
Znalazłem przy okazji stronę z naklejkami na procesory.
Może się przydać przy podłączaniu.
https://flic.kr/p/VX6gDM
Wypalanie bootloader-a:
Ściągamy od Nicka kody:
https://github.com/nickgammon/arduino_sketches
Najpierw wgrywamy do Arduino UNO program Atmega_Board_Detector. Ustawiamy serial monitor na 115200 baud-ów. W oknie serial monitora powinniśmy (jeśli chip nie ma wgranego Bootloadera) zobaczyć to:
Atmega chip detector.
Written by Nick Gammon.
Version 1.19
Compiled on Oct 3 2018 at 22:19:48 with Arduino IDE 10802.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0x62
HFuse = 0xD9
EFuse = 0xFF
Lock byte = 0xFF
Clock calibration = 0x9C
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 7000
.....
MD5 sum of bootloader = 0x6A 0xE5 0x9E 0x64 0x85 0x03 0x77 0xEE 0x54 0x70 0xC8 0x54 0x76 0x15 0x51 0xEA
No bootloader (all 0xFF)
....
Następnie wgrywamy Atmega_Board_Programmer
Atmega chip programmer.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDA
EFuse = 0xFD
Lock byte = 0xFF
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
MD5 sum of current bootloader = DE 03 FE 65 A6 76 5C AA 8C 91 34 3A CC 62 CF FC
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Mamy dwie opcje do wyboru:’L’ lub ‘U’.
W oknie serial monitora wpisujemy: L , jeśli chcemy wgrać bootloader wykorzystujący wewnętrzny rezonator 8 MHz. W układzie z rysunku powyżej tylko taki jest możliwy
U – jeśli mamy wpięty zewnętrzny kwarc 16 MHz i chcemy by nasza Atmega328 pracowała dokładnie tak, jak w Arduino UNO
Po wyborze opcji wpisujemy ‘G’ i bootloader się wypala. Po wypaleniu możemy zweryfikować efekt programem Atmega_Board_Detector
Połączenie z zewnętrznym oscylatorem, opcja ‘U’
Uwaga!
Wgrać bootloader wykorzystujący wewnętrzny rezonator 8 MHz możemy również w układzie z zewnętrznym oscylatorem. Nie musimy go wypinać, wystarczy przy wgrywaniu wcisnąć literę ‘L’, potem ‘G’. Podobnie wgrywanie zasadniczego programu, korzystając z ArduinoISP, można przeprowadzić na płytce z kwarcem zewnętrznym, trzeba pamiętać jedynie, że wybieramy Board: LilyPad Arduino, Processor: ATmega328P
Część druga – wgrywanie programu do Atmegi
Tu muszę podziękować Elektro Marasowi za ten film na YouTube.
1. Wchodzimy do Arduino IDE, odszukujemy
File -> Examples -> ArduinoISP
https://flic.kr/p/UEUvHo
2. Wysyłamy kod do Arduino.
3. Otwieramy okno z kodem, który chcemy wgrać do naszego procesora. (Na przykład nieśmiertelną migającą diodę. Pamiętajmy jednak żeby zmienić PIN 13 [LED_BUILTIN], zajęty przez programator, na powiedzmy PIN 9-ty).
W zakładce Tools wybieramy Programmer: “Arduino as ISP”
4. Znów wchodzimy do Arduino IDE, odszukujemy
Sketch -> Upload Using Programmer
I to wszystko. Jeśli nie wyrwaliśmy przez nieuwagę żadnego kabelka, dioda powinna mrugać jak na filmie.
LINKI