Arduino Bootloader

Ogólne rozmowy na temat Arduino (i jemu podobnych).
ODPOWIEDZ
Phoenix23
Młodszy majsterkowicz
Posty: 19
Rejestracja: 19 lut 2014, 14:08

Arduino Bootloader

Post autor: Phoenix23 » 5 maja 2014, 17:15

Cześć,
mam pytanie dotyczące takiego oto tematu:
mianowicie
-mam arduino Uno i zwykły mikrokontroler atmega328p,
-wypaliłem bootloader na mikrokontroler atmega328p i dalej wgrałem program( przez Arduino as ISP), wszystko działa i jest ok
tylko teraz mam takie pytanie czy bootloader jest potrzebny do tego żeby interpretować instrukcje w napisane w języku Arduino czy nie? a jak nie, to do czego jest potrzebny? czy nie potrzebny w ogóle?

wiem, że już ten temat był poruszany na forum, ale ja nie znalazłem odpowiedzi tzn jestem w kropce, bo raz widzę taką odpowiedz, a raz inną

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
macin
Majsterkowicz
Posty: 190
Rejestracja: 1 lip 2012, 11:24
Lokalizacja: Bydgoszcz

Re: Arduino Bootloader

Post autor: macin » 5 maja 2014, 19:10

Bootloader jest potrzebny do wgrywania programu np. po RS tak jak to jest w Arduino. Ale gdy masz gotowy plik z rozszerzeniem .hex i zewnętrzny programator na USBasp to nie potrzebujesz tego bootloadera.
Phoenix23
Młodszy majsterkowicz
Posty: 19
Rejestracja: 19 lut 2014, 14:08

Re: Arduino Bootloader

Post autor: Phoenix23 » 5 maja 2014, 19:28

ok, bo znalazłem na forum w jednym tutorialu taki oto tekst
przed wgraniem właściwego programu musimy jeszcze wrzucić na nasz mikrokontroler tak zwany Bootloader. To właśnie dzięki niemu będziemy mogli korzystać z przyjaznej składni kodu i wszystkich funkcji dostępnych dla Arduino.
z którego wynika, że bootloader jest odpowiedzialny za własnie interpretacje kodu arduino, czyli to jest przekłamanie wprowadzające niejasności
Awatar użytkownika
macin
Majsterkowicz
Posty: 190
Rejestracja: 1 lip 2012, 11:24
Lokalizacja: Bydgoszcz

Re: Arduino Bootloader

Post autor: macin » 5 maja 2014, 19:52

Na głównej stronie masz ciekawy artykuł "Marudnik do kwiatów (część druga)" i tam w sekcji "Programowanie mikrokontrolera w zewnętrznym programatorze" masz ładnie wyjaśnione z kąt możesz wziąć plik .hex z IDE Arduino i jak zaprogramować mikrokontroler bez bootloadera, np. z użyciem USBasp.
Phoenix23
Młodszy majsterkowicz
Posty: 19
Rejestracja: 19 lut 2014, 14:08

Re: Arduino Bootloader

Post autor: Phoenix23 » 5 maja 2014, 21:43

dobra to już mam wyjaśnioną tą sprawę, tylko teraz nie wiem jeszcze jednego,
bo jak zrobiłem tak jak pisałem wgrałem ten bootloader pobrany ze strony i wrzuciłem go przez płytkę (arduino as ISP), do mikrokontrolera, dalej wgrałem program, tak że miałem połączone miso, mosi,sck,ss z arduino do mikrokontrolera i teraz moje pytanie czy to by działało tzn mógłbym wgrać ten program poprzez arduino do mikrokontrolera bez tego bootloadera?
Awatar użytkownika
macin
Majsterkowicz
Posty: 190
Rejestracja: 1 lip 2012, 11:24
Lokalizacja: Bydgoszcz

Re: Arduino Bootloader

Post autor: macin » 5 maja 2014, 22:47

Szczerze za bardzo tego nie wiem, ale powinno działać, ja zawsze używałem do wgrywania na czystą atmege USBasp i nigdy nie wypalałem bootloadera. Powinieneś spróbować "wyczyścić" mikrokontroler i wgrać program.
Awatar użytkownika
macin
Majsterkowicz
Posty: 190
Rejestracja: 1 lip 2012, 11:24
Lokalizacja: Bydgoszcz

Re: Arduino Bootloader

Post autor: macin » 5 maja 2014, 22:52

Spójrz jeszcze na to:Link
MrLewerence pisze:Raczej błąd w tej "specyfikacji" z aukcji. 20MHz???

Plik board.txt należy zmodyfikować w ten sposób, że na końcu pliku dopisujesz te dane:

Kod: Zaznacz cały

majsterkowo_atmega328p8.name=ATmega328P @ 8 MHz

majsterkowo_atmega328p8.upload.maximum_size=30720
majsterkowo_atmega328p8.upload.using=arduino:arduinoisp

majsterkowo_atmega328p8.bootloader.low_fuses=0xE2
majsterkowo_atmega328p8.bootloader.high_fuses=0xDA
majsterkowo_atmega328p8.bootloader.extended_fuses=0x05

majsterkowo_atmega328p8.bootloader.path=atmega
majsterkowo_atmega328p8.bootloader.file=ATmegaBOOT_328.hex
majsterkowo_atmega328p8.bootloader.unlock_bits=0x3F
majsterkowo_atmega328p8.bootloader.lock_bits=0x0F

majsterkowo_atmega328p8.build.mcu=atmega328p
majsterkowo_atmega328p8.build.f_cpu=8000000L
majsterkowo_atmega328p8.build.core=arduino
majsterkowo_atmega328p8.build.variant=standard

#################################################################

majsterkowo_atmega328p16.name=ATmega328P @ 16 MHz

majsterkowo_atmega328p16.upload.maximum_size=30720
majsterkowo_atmega328p16.upload.using=arduino:arduinoisp

majsterkowo_atmega328p16.bootloader.low_fuses=0xE2
majsterkowo_atmega328p16.bootloader.high_fuses=0xDA
majsterkowo_atmega328p16.bootloader.extended_fuses=0x05

majsterkowo_atmega328p16.bootloader.path=atmega
majsterkowo_atmega328p16.bootloader.file=ATmegaBOOT_328.hex
majsterkowo_atmega328p16.bootloader.unlock_bits=0x3F
majsterkowo_atmega328p16.bootloader.lock_bits=0x0F

majsterkowo_atmega328p16.build.mcu=atmega328p
majsterkowo_atmega328p16.build.f_cpu=16000000L
majsterkowo_atmega328p16.build.core=arduino
majsterkowo_atmega328p16.build.variant=standard
Ale nie wolno zmieniać pliku board.txt tak, że tylko te informacje w nim są.

Po krótce opiszę to jak ja to robię:

1. W pliku board.txt usuwam począwszy od tego:

Kod: Zaznacz cały

##############################################################

esplora.name=Arduino Esplora
esplora.upload.protocol=avr109
esplora.upload.maximum_size=28672
esplora.upload.speed=57600
esplora.upload.disable_flushing=true
esplora.bootloader.low_fuses=0xff
esplora.bootloader.high_fuses=0xd8
esplora.bootloader.extended_fuses=0xcb
esplora.bootloader.path=caterina
esplora.bootloader.file=Caterina-Esplora.hex
esplora.bootloader.unlock_bits=0x3F
esplora.bootloader.lock_bits=0x2F
esplora.build.mcu=atmega32u4
esplora.build.f_cpu=16000000L
esplora.build.vid=0x2341
esplora.build.pid=0x803C
esplora.build.core=arduino
esplora.build.variant=leonardo

....
.....
/..........

te rzeczy i wszystko co jest do końca.

2. Wklejam taki separator:

Kod: Zaznacz cały

##############################################################
3. Po tym wklejam to:

Kod: Zaznacz cały

majsterkowo_atmega328p8.name=ATmega328P @ 8 MHz

majsterkowo_atmega328p8.upload.maximum_size=30720
majsterkowo_atmega328p8.upload.using=arduino:arduinoisp

majsterkowo_atmega328p8.bootloader.low_fuses=0xE2
majsterkowo_atmega328p8.bootloader.high_fuses=0xDA
majsterkowo_atmega328p8.bootloader.extended_fuses=0x05

majsterkowo_atmega328p8.bootloader.path=atmega
majsterkowo_atmega328p8.bootloader.file=ATmegaBOOT_328.hex
majsterkowo_atmega328p8.bootloader.unlock_bits=0x3F
majsterkowo_atmega328p8.bootloader.lock_bits=0x0F

majsterkowo_atmega328p8.build.mcu=atmega328p
majsterkowo_atmega328p8.build.f_cpu=8000000L
majsterkowo_atmega328p8.build.core=arduino
majsterkowo_atmega328p8.build.variant=standard

#################################################################

majsterkowo_atmega328p16.name=ATmega328P @ 16 MHz

majsterkowo_atmega328p16.upload.maximum_size=30720
majsterkowo_atmega328p16.upload.using=arduino:arduinoisp

majsterkowo_atmega328p16.bootloader.low_fuses=0xE2
majsterkowo_atmega328p16.bootloader.high_fuses=0xDA
majsterkowo_atmega328p16.bootloader.extended_fuses=0x05

majsterkowo_atmega328p16.bootloader.path=atmega
majsterkowo_atmega328p16.bootloader.file=ATmegaBOOT_328.hex
majsterkowo_atmega328p16.bootloader.unlock_bits=0x3F
majsterkowo_atmega328p16.bootloader.lock_bits=0x0F

majsterkowo_atmega328p16.build.mcu=atmega328p
majsterkowo_atmega328p16.build.f_cpu=16000000L
majsterkowo_atmega328p16.build.core=arduino
majsterkowo_atmega328p16.build.variant=standard
zapisuję zmiany i zamykam.

4. Do katalogu:

Kod: Zaznacz cały

C:\Program Files\Arduino\hardware\arduino\bootloaders\atmega
wklejam plik bootloadera pobrany stąd:
http://majsterkowo.pl/forum/download/file.php?id=93

5. Uruchamiam ArduinoIDE, wgrywam szkic ArduinoISP.

6. Podłączam atmegę328 według danych z noty PDF i piny ISP:
- pin 13 (arduino) - pin 19 atmega
- pin 12 (arduino) - pin 18 atmega
- pin 11 (arduino) - pin 17 atmega
- pin 10 (arduino) - pin 1 atmega

7. SPRAWDZAM POŁĄCZENIA ISP oraz ZASILANIE

- Piny zasilania które MUSZĄ BYĆ PODŁĄCZONE:
- +Vcc w atmega328 piny 7 i 20
- GND w atmega328 piny 8 i 22
- dodatkowo między pin 1 atmegi a + Vcc wkładam opornik 10kOhm.
- między piny 9 i 10 na wszelki wypadek wkładam kwarc z przedziału od 1 do 16 MHz.

8. SPRAWDZAM POŁĄCZENIA ISP oraz ZASILANIE

9. W ArduinoIDE z zakładki Narzędzia->Płytka
- wybieram Atmega328 z taktowaniem 8 albo 16Mhz, zależy co robię.

10. Dla sprawdzenia wszelkiej poprawności wgrywam program "blink", żeby nie było żadnych problemów z pinem 13 (sygnał SCK) zmieniam pin na 8 (w atmega328 pin 14).

11. Wgrywam docelowy program.
12. Wyciągam mikrokontroler ze stykówki i montuję go w docelowym urządzeniu.
13. Inkasuję od klienta należność za urządzenie ;)



P.S. 1.
Punkt 1 osoby początkujące, nie mające doświadczenia z Arduino mogą sobie darować, albo przed wszelkimi czynnościami skopiować plik board.txt w bezpieczne miejsce.
P.S. 2.
Zauważyli pewnie co niektórzy, że nie wypalam bootloadera. Nie, bo nie... testuję co się będzie działo w przyszłości z mikrokontrolerem bez wypalania bootloadera. Na pewno nie jest niezbędny.
Awatar użytkownika
scorpion_1982
Majsterkowicz
Posty: 108
Rejestracja: 15 lut 2015, 00:55

Re: Arduino Bootloader

Post autor: scorpion_1982 » 22 sie 2017, 04:25

Jak najbardziej poprzez płytkę Arduino wgrasz program do czystej Atmegi(bez bootloadera)
Tylko że jeśli chcesz tak się bawić to spraw sobie USBASP - dużo bardziej jest wygodny.
Awatar użytkownika
Slawek
Starszy majsterkowicz
Posty: 448
Rejestracja: 29 mar 2015, 15:05

Re: Arduino Bootloader

Post autor: Slawek » 22 sie 2017, 06:52

Należy Ci sie złota łopata za odkopy ;)
kaczakat
Młodszy majsterkowicz
Posty: 25
Rejestracja: 8 wrz 2017, 15:01

Re: Arduino Bootloader

Post autor: kaczakat » 11 kwie 2018, 00:50

To ja poproszę o szpadel, ale po co temat ma zostać taki niedokończony... Bootloader to po pierwsze program do komunikacji i szybkiego wgrywania po UART wsadu do procka, zajmuje niestety w zależności od wersji od 512b do 4kb w AVR, a po drugie ustawia fuse bity w procku, czyli wgrywa konfigurację procesora. Ktoś tu wejdzie i się zdziwi kupując czystą Atmegę 328, że nie działa na 16MHz bez wgrania bootloadera. Fusy można ustawić też odpowiednim programem i lepiej się przy tym nie pomylić. W niektórych chipach dodawanych do środowiska arduino, np. Attiny45 bootloader to tylko ustawienie fuse bitów (za mało pamięci flash by jeszcze tracić na bootloader lub typowego UART nie ma). Bootloader identyfikuje też procek w środowisku arduino, można wgrać ten z UNO do NANO (bo procki w sumie te same i zyskać przy okazji 1,5kb na kod programu oraz szybkość programowania przez UART), ale potem trzeba wybierać. że programuje się płytkę UNO.
Awatar użytkownika
Marhef
Złota rączka
Posty: 1168
Rejestracja: 18 lis 2011, 02:18

Re: Arduino Bootloader

Post autor: Marhef » 11 kwie 2018, 22:50

kaczakat pisze:
11 kwie 2018, 00:50
Bootloader to po pierwsze program do komunikacji i szybkiego wgrywania po UART wsadu do procka
Czy ja wiem, czy to tak szybko... mam wrażenie, że wgrywając plik .hex przez USBASP uzyskam szybsze wgrywanie. A nawet bez bootloadera można komunikować się po UART z komputerem używając płytki arduino. Konwerter to przecież inny układ (albo drugi procek, albo na przykład CH340)
ODPOWIEDZ

Strony partnerskie: