Programujemy procesor Atmega328 przez Arduino UNO

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

ArduinoISP_1

I to wszystko. Jeśli nie wyrwaliśmy przez nieuwagę żadnego kabelka, dioda powinna mrugać jak na filmie.

LINKI

http://www.notesandvolts.com/2013/01/fun-with-arduino-arduino-as-isp.html

Dodaj komentarz