Programowanie ATmega bez bootloadera

Zbiór tutoriali związanych z Arduino.
ODPOWIEDZ
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Programowanie ATmega bez bootloadera

Post autor: Mateusz88 » 25 paź 2012, 11:05

Moim pierwszym mikrokontrolerem który chciałem zaprogramować była ATmega88PA-PU,
kupiłem ją bo myślałem ze nie będzie żadnych problemów żeby ją zaprogramować gdyż miała
wspólną dokumentację z uC na Arduino. Niestety nie udało mi się znaleźć działającego
bootloadera. Postanowiłem poszukać sposobu na zaprogramowanie ATmegi bez bootloadera i
chyba mi się udało, bo jak na razie wszystko działa.

Wchodzimy na stronę http://www.engbedded.com/fusecalc i wybieramy model naszego uC, w
moim przypadku będzie to ATmega88PA. To co nas interesuje to bity konfiguracyjne tzw. fuse,
znajdują się one w ostatniej tabeli. W moim przypadku będzie to:

Low=0x62
High=0xdf
Extended=0xf9

W przypadku extended fuse trzeba uważać bo nie zawsze występuje np. ATmega8A, wtedy
ograniczamy się tylko do low i high fuse, dodatkowo w moim przypadku obok wartości extended
pojawiła się gwiazdka która sugeruje (czerwony tekst po prawej) zmianę extended fuse z 0xf9 na
0x01 a więc ostatecznie moje bity konfiguracji będą wynosić:

Low=0x62
High=0xdf
Extended=0x01

Teraz stworzymy własny wpis do pliku boards.txt

Kod: Zaznacz cały

atmega88.name=ATmega88 (internal 1 MHz)
atmega88.bootloader.low_fuses=0x62
atmega88.bootloader.high_fuses=0xdf
atmega88.bootloader.extended_fuses=0x01
atmega88.upload.maximum_size=8192
atmega88.build.mcu=abc
atmega88.build.f_cpu=1000000L
atmega88.build.core=arduino
atmega88.build.variant=standard
Każdy wiersz zaczyna się od unikalnej nazwy (u mnie „atmega88”) która rozróżnia poszczególne
wpisy w pliku, nazwa ta jest dowolna. Pierwszy wiersz to nazwa która wyświetli się w menu Board,
kolejne trzy to fuse które już mamy. Piąta to rozmiar pamięci flash (8 * 1024 = 8192), w szóstej
polecam na razie wpisać byle co np. abc. Siódma to częstotliwość. Ostatnie dwie nie jestem pewien
za co odpowiadają ale muszą być :) Zapisujemy zmiany w pliku, uruchamiamy Arduino, z menu
Tools > Board wybieramy nasz właśnie dodany wpis, otwieramy program Blink i klikamy Verify.
Powinien pokazać się nam błąd „MCU 'abc' supported for assembler only” i lista obsługiwanych
uC, wyszukujemy nazwę najbardziej zbliżoną do naszej ATmegi (u mnie atmega88p) i kopiujemy ją
(wielkość liter ma znaczenie) do pliku boards.txt. Ostatecznie wpis będzie wyglądał:

Kod: Zaznacz cały

atmega88.name=ATmega88 (internal 1 MHz)
atmega88.bootloader.low_fuses=0x62
atmega88.bootloader.high_fuses=0xdf
atmega88.bootloader.extended_fuses=0x01
atmega88.upload.maximum_size=8192
atmega88.build.mcu=atmega88p
atmega88.build.f_cpu=1000000L
atmega88.build.core=arduino
atmega88.build.variant=standard
Dalsze postępowanie jest już standardowe:
-Wgrywamy ArduinoISP na Arduino.
-Podłączamy ATmege według schematu http://arduino.cc/en/uploads/Tutorial/S ... ardAVR.png
-z menu Tools > board wybieramy nasz wpis
-wybieramy Tools > Programmer > Arduino as ISP
-Klikamy Burn Bootloader (ten punkt powtarzamy tylko jeśli zmienimy w pliku boards.txt fuse bity na inne)
-teraz możemy już wgrać swój program

UWAGA – nie zmieniajcie domyślnych fuse bitów, bo poprzez nieumiejętne modyfikacje tych
wartości można sobie zablokować uC. Polecam przeczytać artykuł http://www.drzasiek.cba.pl/fusebity.php
jak również forum elektroda w którym sporo osób opisuje jak zablokowali sobie uC

Sam dopiero zaczynam przygodę z programowaniem dlatego nie odpowiadam za ewentualne
problemy. Ja testowałem ten sposób na dwóch uC (ATmega88PA-PU i ATmega168P-20PU) i
wszystko działa.
Ostatnio zmieniony 25 paź 2012, 12:20 przez Mateusz88, łącznie zmieniany 1 raz.

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: Programowanie ATmega bez bootloadera

Post autor: macin » 25 paź 2012, 11:49

Bardzo przydatny tutorial, kiedyś męczyłem się tydzień z atina25.
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Re: Programowanie ATmega bez bootloadera

Post autor: Mateusz88 » 11 lis 2012, 14:40

Dziś na czacie widziałem dyskusje o bootloaderze a konkretnie za co odpowiada, sam nie znam odpowiedzi na to pytanie, ale programowanie z mojego tutoriala jak najbardziej pozwala na używanie analogRead(), digitalRead() itp. Działa tez protokół I2C i komunikacja RX/TX. Ja na swoim Arduino mam prawie na stałe wgrane ArduinoISP, wszystkie projekty robię na osobnym uC.
ramcin
Młodszy majsterkowicz
Posty: 7
Rejestracja: 20 paź 2014, 22:57

Re: Programowanie ATmega bez bootloadera

Post autor: ramcin » 23 gru 2014, 01:29

Zrobiłem wg Twojego tutoriala i nie dziala mi Atmega8A ;/ Masz moze jakis pomysl?
stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Programowanie ATmega bez bootloadera

Post autor: stiven » 23 gru 2014, 10:49

Potrzebujesz tą atmege8a mieć bez bootloadera? Jakie ustawienia dodałeś do pliku boards.txt?
ramcin
Młodszy majsterkowicz
Posty: 7
Rejestracja: 20 paź 2014, 22:57

Re: Programowanie ATmega bez bootloadera

Post autor: ramcin » 23 gru 2014, 14:51

Czy potrzebuje?
Potrzebuje zaprogramować sobie mikrokontroler za pomocą arduino i pozniej go włożyć do swojego układu i żeby działał do tego potrzebuje to zrobić.
Do pliku boards.txt dodałem:

Kod: Zaznacz cały

atmega8A_moj.name=ATmega8A_moj (internal 1 MHz)
atmega8A_moj.bootloader.low_fuses=0xe4
atmega8A_moj.bootloader.high_fuses=0xd9
atmega8A_moj.upload.maximum_size=8192
atmega8A_moj.build.mcu=atmega8
atmega8A_moj.build.f_cpu=8000000L
atmega8A_moj.build.core=arduino
atmega8A_moj.build.variant=standard
Potrzebuje tak zrobić zeby działało i zebym mogł sobie ja atmege8a programowac na arduino. Jakas rada?
stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Programowanie ATmega bez bootloadera

Post autor: stiven » 23 gru 2014, 17:49

Pytałem dlatego, bo ustawienia można wgrać razem z bootloaderem, jest osobny temat z gotowcem do wgrania do tej atmegi. Dopiero później zobaczyłem, że tam też pisałeś.
Napisałeś, że po wgraniu sposobem stąd, atmega nie działa, co dokładniej się dzieje?

Programując podłączasz się do odpowiednich pinów? Według oznaczeń z tego obrazka:
http://majsterkowo.pl/wp-content/upload ... 8-pins.png
ramcin
Młodszy majsterkowicz
Posty: 7
Rejestracja: 20 paź 2014, 22:57

Re: Programowanie ATmega bez bootloadera

Post autor: ramcin » 24 gru 2014, 01:02

Podłączam tak:
10(Arduino) - 1 [PC6 (PCINT14/RESET)]
11(Arduino) - 17 [PB3 (MOSI/OC2A/PCINT3)]
12(Arduino) - 18 [PB4 (MISO/PCINT4)]
13(Arduino) - 19 [PB5 (SCK/PCINT5)]
+5V(Arduino) 7
GND(Arduino) 8

Po kliknieciu wypal bootloader, wyskakuje błąd, błędy (trzy rózne spotkałem):

Kod: Zaznacz cały

avrdude: stk500_getsync(): not in sync: resp=0x30

Kod: Zaznacz cały

avrdude: Expected signature for ATMEGA328P is 1E 95 0F
         Double check chip, or use -F to override this check.

Kod: Zaznacz cały

avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.
Także nie moge nawet sprawdzic czy dziala bo nie wgrwa się nawet bootloader. Nie podłączam zewnetrznego kwarca. Co robie zle?
stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Programowanie ATmega bez bootloadera

Post autor: stiven » 24 gru 2014, 01:17

z menu Tools > Board wybieramy nasz właśnie dodany wpis
Nie ustawiłeś, że chcesz programować atmege8a.
ramcin
Młodszy majsterkowicz
Posty: 7
Rejestracja: 20 paź 2014, 22:57

Re: Programowanie ATmega bez bootloadera

Post autor: ramcin » 24 gru 2014, 02:38

Wybieralem, czyli ATmega8A_moj (internal 1 MHz).
najpierw zaprogramowalem arduino programem arduino isp tak jak sie programuje arduino plytka uno i programator ten Avrisp mkii.
Nastepnie ybieram plytke tak jak u gory czyli atmega8ai programator arduino isp. Nastepnie wypal bootloader i wywala blad
Xtream
Majsterkowicz
Posty: 154
Rejestracja: 19 sty 2015, 13:42

Re: Programowanie ATmega bez bootloadera

Post autor: Xtream » 19 sty 2015, 21:14

Mógłby ktoś podesłać jak wyglądałby wpis dla 328p?
Awatar użytkownika
marti_ns
Młodszy majsterkowicz
Posty: 45
Rejestracja: 19 lis 2014, 14:56
Lokalizacja: Krościneko nad Dunjacem

Re: Programowanie ATmega bez bootloadera

Post autor: marti_ns » 22 sty 2015, 17:02

ja bym zrobił np tak dla 328P z kwarcem 16 mhz

atmsa16.name=ATmega in Stand Alone @ 16
atmsa16.upload.protocol=usbasp
atmsa16.upload.maximum_size=32768
atmsa16.upload.speed=115200
atmsa16.upload.using=USBasp
atmsa16.bootloader.low_fuses=0xFF
atmsa16.bootloader.high_fuses=0xDE
atmsa16.bootloader.extended_fuses=0xFD
atmsa16.bootloader.path=optiboot
atmsa16.bootloader.file=optiboot_atmega328.hex
atmsa16.bootloader.unlock_bits=0x3F
atmsa16.bootloader.lock_bits=0x0F
atmsa16.build.mcu=atmega328p
atmsa16.build.f_cpu=16000000L
atmsa16.build.core=arduino


ale niech ktoś sprawdzi bo nie jestem specjalistą , fusy wg mkavr calcultor
Awatar użytkownika
marti_ns
Młodszy majsterkowicz
Posty: 45
Rejestracja: 19 lis 2014, 14:56
Lokalizacja: Krościneko nad Dunjacem

Re: Programowanie ATmega bez bootloadera

Post autor: marti_ns » 23 sty 2015, 14:14

No tak tylko pomijamy bootloader żeby zyskać te cenne bajty które on zajmuje.
Awatar użytkownika
marti_ns
Młodszy majsterkowicz
Posty: 45
Rejestracja: 19 lis 2014, 14:56
Lokalizacja: Krościneko nad Dunjacem

Re: Programowanie ATmega bez bootloadera

Post autor: marti_ns » 23 sty 2015, 14:51

Tylko trzeba max upload size ustawić na max ile ma procek
ODPOWIEDZ

Strony partnerskie: