atmega8 - bootloader
Moderátor: Moderátoři
atmega8 - bootloader
Osobně když se už rozhodnu použít Arduino, tak vůbec bootloader nepoužívám. Když máš programátor, tak je to vcelku zbytečný. Stačí v IDE nastavit příslušný programátor (menu Nástroje -> programátor). Potom po kompilaci nahrát *.hex příkazem Projekt -> Nahrát pomocí programátoru.
Má to tu výhodu že se IDE nesnaží měnit fuse. Takže např. u ATMega8 jdou použít i porty PB6 a PB7.
Jeejda píše:No, to bude zřejmě tím, že program přeložený pro ATmega328 prostě nelze cpát do ATmega8.
Myslím že tohle problém nebude, Dan555 píše "s volbou čipu atmega8 a s příslušným bootloaderem pro atmega8", tím se vybere správný bootloader.
Edit:
Jeejda: odpusť
Jeejda píše:Nenapsal jsi jestli máš originální desku a jakou přesně, nebo nějakou dělanou? Býval problém s USB externím převodníkem, pokud neměl vyveden tuším ještě DTR, tak bylo třeba po nahrátí programu resetovat MCU ručně v nějakém vymezeném intervalu, jinak se to nerozběhlo. Já zkoušel ATmegu8 na dělaným Arduinu Serial přímo přes hw COM port a tam to šlapalo dobře.
Pak zbývá ještě obligátní knížecí rada - kup ATmegu328P.
Ne, o koupi nejde. Mám oba druhy obvodů, jde mi o to, že mi to prostě nefunguje a fungovat by mělo. Navíc atmegy8 mám do projektů, kde si vystačím s pár kB paměti, v takoém případě je jejich poloviční cena příjemným pocitem.
Na převodníku vyvedený DTR mám, mám jej zapojený v sérii s kondenzátorem 100n na reset pin atmegy - a ten mám přes 10k rezistor připojený na Ucc. Takhle to funguje s obvody atmega328p. Leda by to s atmega8A takhle zapojit nešlo... Vida, zkusím...
Desku mám samovýrobu, vlastně jen MCU s krystalem 16MHz (atmega8A by 16MHz podle datasheetu zvládat měla) a s piny vyvedenými na kolíkové lišty. Takové hodně minimalistické zapojení, kde jsem problém nepředpokládal zejména proto, že s atmega328p tahle deska funguje.
FHonza píše:první co mně napadá: zkontroluj fuse byty. Při nahrávání bootloaderu přes Arduino IDE se mění podle vybrané desky. Potom při nahrávání samotného programu IDE předpokládá, že jsou nastavené tak, jak je napsáno u příslušné desky.
Osobně když se už rozhodnu použít Arduino, tak vůbec bootloader nepoužívám. Když máš programátor, tak je to vcelku zbytečný. Stačí v IDE nastavit příslušný programátor (menu Nástroje -> programátor). Potom po kompilaci nahrát *.hex příkazem Projekt -> Nahrát pomocí programátoru.
Má to tu výhodu že se IDE nesnaží měnit fuse. Takže např. u ATMega8 jdou použít i porty PB6 a PB7.
Občas mám zapojení, které ladím složené, ale místo pro SPI konektor se mi tam už nevejde. Tak si vyvedu jen UART a ladím to přes něj. Takhle mi to fungovalo s atmega328p.
Naprogramované pojistky obvodu jsem přečetl jiným programem, jsou nastavené na L-fuse: DF a H-fuse:CA , podle všeho by měly být správné.
FHonza píše:L: 0xdf a H: 0xca je dobře když je připojen 16Mz krystal. Teď jsem to vyzkoušel na nepájivém poli a funguje mně to prostou výměnou procesorů (a samozřejmě volbou desky).
Jakou verzi IDE používáš, resp. jaký bootloader do mega8 nahráváš ? Já tam mám ATmegaBOOT-prod-firmware-2009-11-07.hex
Zkoušel jsem tam nahrát oba bootloadery z IDE (+ ještě i optiboot), tenhle i ATmegaBOOT.hex, výsledek byl stejně bezútěšný. Problém by ale mohl být v IDE, nejspíše mám špatný proces pálení bootloaderu, protože abych to dokázal i pro atmega8, musel jsem předtím modifikovat některé soubory (dle nějakého zahraničního návodu) - mé originál prostředí IDE totiž vypálit bootloader do atmega8 původně nedokázalo, hlásilo chybu, neboť se snažilo zapsat i extended fuses pojistky, které ale atmega8 nemá.
Napadají mne v současnosti dvě cesty:
1. požádat o zaslání hex obsahu tvého fungujícího mega8, včetně nastavení pojistek - vypálil bych to v jiném programu než IDE (mám na to Extreme Burner) - a pak by se vidělo, kde je problém
2. požádat o zaslání modifikace boards.txt, která pro atmega8 v tvém IDE funguje, abych si atmega8 do IDE přidal znovu a regulérně. Prozatím používám modifikovanou volbu "arduino NG or older", protože jedině tam jsem nalezl typ obvodu atmega8
Oba tyhle body nedokážu vygooglit, resp. nalezené (povětšinou zahraniční) návody nefungují. Jo a používám prostředí 1.6.5-r2.
- přes UART do atmega8 už nahrávat dokáži. A to teprve tehdy, až jsem do ní vypálil ATmegaBOOT-prod-firmware-2009-11-07.hex
- po nahrání programu se ale program hned nespustí, ale trvá to ještě asi 5 sec
- v sérii s DTR zapojený kondenzátor 100n nefunguje. Musím reset před nahráváním vyvolat ručně, pak mám na nahrání cca 8 sec
Sice to funguje, ale ten reset se mi nějak nezdá. Asi hardwarová odlišnost oproti atmega328. Přesto mám pořád pocit, že ten můj bootloader je nějaký divný. Po nahrání se totiž program nespustí hned, ale jakoby to čekalo na dokončení nějaké časovací smyčky.
Pro kontrolu: Namísto atmega8 jsem do svého zapojení vložil atmega328 a vše funguje jak má (s příslušným nastavením).
SUT
SPIEN
BOOTSZ1
BOOTRST
CKOPT
takže bych řek že fuse jsou správně.
A ještě pro jistotu, takhle vypadá funkční část boards.txt (společná deska pro megu168 a 8, liší se pouze volba procesoru):
Kód: Vybrat vše
##############################################################
atmegang.name=Arduino NG or older
atmegang.upload.tool=avrdude
atmegang.upload.protocol=arduino
atmegang.upload.speed=19200
atmegang.bootloader.tool=avrdude
atmegang.bootloader.unlock_bits=0x3F
atmegang.bootloader.lock_bits=0x0F
atmegang.build.mcu=atmegang
atmegang.build.f_cpu=16000000L
atmegang.build.board=AVR_NG
atmegang.build.core=arduino
atmegang.build.variant=standard
## Arduino NG or older w/ ATmega168
## --------------------------------
atmegang.menu.cpu.atmega168=ATmega168
atmegang.menu.cpu.atmega168.upload.maximum_size=14336
atmegang.menu.cpu.atmega168.upload.maximum_data_size=1024
atmegang.menu.cpu.atmega168.bootloader.low_fuses=0xff
atmegang.menu.cpu.atmega168.bootloader.high_fuses=0xdd
atmegang.menu.cpu.atmega168.bootloader.extended_fuses=0x00
atmegang.menu.cpu.atmega168.bootloader.file=atmega/ATmegaBOOT_168_ng.hex
atmegang.menu.cpu.atmega168.build.mcu=atmega168
## Arduino NG or older w/ ATmega8
## ------------------------------
atmegang.menu.cpu.atmega8=ATmega8
atmegang.menu.cpu.atmega8.upload.maximum_size=7168
atmegang.menu.cpu.atmega8.upload.maximum_data_size=1024
atmegang.menu.cpu.atmega8.bootloader.low_fuses=0xdf
atmegang.menu.cpu.atmega8.bootloader.high_fuses=0xca
atmegang.menu.cpu.atmega8.bootloader.file=atmega8/ATmegaBOOT-prod-firmware-2009-11-07.hex
atmegang.menu.cpu.atmega8.build.mcu=atmega8
Edit: Je to pro IDE 1.6.7, pro starší nebude funkční