Ciao a tutti, ho un problema.
Voglio scrivere il bootloader e successivamente (ovviamente) caricare uno sketch su un AtMega328PU da usare "stand alone" ossia senza quarzo ma con oscillatore interno, dato che devo risparmiare costi e spazio e non mi serve precisione.
Uso la IDE 1.8.18, ho trovato solo istruzioni per IDE precedenti la mia, comunque provate e non funzionanti (con la mia 1.8.18).
Vorrei usare una board Arduino UNO R3 per scrivere il bootloader su un AtMega328PU su breadboard (senza quarzo), e successivamente per caricarvi lo sketch.
Come devo fare? Grazie mille, ho letto mille post ma tutti datati e non va nessuno!
Devi aggiungere una "scheda" nel file boards.txt con i fuse impostati adeguatamente:
lfuse=0xFF; hfuse=0xD6; efuse=0xFD;
http://www.itluxembourg.lu/site/hobbyking-orangerx-433mhz-modules-faq/fuse-settings/
Il mio board.txt contiene quindi:
##############################################################
atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=arduino
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.tool=avrdude
atmega328bb.upload.tool=avrdude
lfuse=0xFF; hfuse=0xD6; efuse=0xFD;
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard
È giusto così? Perché caricando sull'UNO lo sketch "ArduinoISP" e impostando come programmatore "Arduino as ISP", se provo a scrivere il bootoloader mi dice
"Impossibile trovare lo strumento avrdude"!
Devi scriverli nelle tre righe sotto!
Quindi il tutto diventa:
##############################################################
atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=arduino
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.tool=avrdude
atmega328bb.upload.tool=avrdude
atmega328bb.bootloader.low_fuses=0xFF
atmega328bb.bootloader.high_fuses=0xD6
atmega328bb.bootloader.extended_fuses=0xFD
atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard
però adesso mi dice:
Warning: Board breadboard:avr:atmega328bb doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328BB
Lo sketch usa 4352 byte (14%) dello spazio disponibile per i programmi. Il massimo è 30720 byte.
Le variabili globali usano 482 byte di memoria dinamica.
Errore durante il caricamento: manca il parametro di configurazione 'upload.params.quiet'
Domattina accendo il computer e vedo...
Buona notte!
Non so se ti puo servire, ma sto facendo praticamente la stessa cosa qui, per farlo funzionare in standalone ho caricato il "minicore", come mi ha suggerito Guglielmo al post 40, poi ho settato l'ide in questo modo
A questo punto ho scritto il bootloader per settare i fuse, e poi carico il programma usando un nano clone programmato come arduinoISP, usando il comando "carica tramite un programmatore" invece del solito "carica" che si usa con la USB, e mi funziona.
EDIT: nota che io sovrascrivo il bootloader perche' non mi serve, tu impostalo nel modo che serve a te' ovviamente
Il minicore non è solo per il 328PB?...
Ah... È possibile selezionare P o PB?
Ho visto che contiene anche altre MCU.
nel "variant"
Grazie a tutti, a domani!
MiniCore:
Enter the following URL in Additional Boards Manager URLs:
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
STUPENDO!!!
Queste, comunque, sono le "schede" che ho aggiunto al mio boards.txt:
##############################################################
uno1MHz.name=Arduino uno 1MHz (ATmega328)
uno1MHz.upload.tool=avrdude
uno1MHz.upload.protocol=arduino
uno1MHz.upload.maximum_size=32256
uno1MHz.upload.maximum_data_size=2048
uno1MHz.upload.speed=9600
uno1MHz.bootloader.tool=avrdude
uno1MHz.bootloader.low_fuses=0x62
uno1MHz.bootloader.high_fuses=0xd9
uno1MHz.bootloader.extended_fuses=0xfd
uno1MHz.bootloader.unlock_bits=0x3F
uno1MHz.bootloader.lock_bits=0x0F
uno1MHz.bootloader.file=optiboot/optiboot_atmega328.hex
uno1MHz.build.mcu=atmega328p
uno1MHz.build.f_cpu=1000000L
uno1MHz.build.board=AVR_UNO_1MHz
uno1MHz.build.core=arduino
uno1MHz.build.variant=standard
##############################################################
unoEE.name=Arduino Uno con EESAVE
unoEE.vid.0=0x2341
unoEE.pid.0=0x0043
unoEE.vid.1=0x2341
unoEE.pid.1=0x0001
unoEE.vid.2=0x2A03
unoEE.pid.2=0x0043
unoEE.vid.3=0x2341
unoEE.pid.3=0x0243
unoEE.upload.tool=avrdude
unoEE.upload.protocol=arduino
unoEE.upload.maximum_size=32256
unoEE.upload.maximum_data_size=2048
unoEE.upload.speed=115200
unoEE.bootloader.tool=avrdude
unoEE.bootloader.low_fuses=0xFF
unoEE.bootloader.high_fuses=0xD6
unoEE.bootloader.extended_fuses=0x05
unoEE.bootloader.unlock_bits=0x3F
unoEE.bootloader.lock_bits=0x0F
unoEE.bootloader.file=optiboot/optiboot_atmega328.hex
unoEE.build.mcu=atmega328p
unoEE.build.f_cpu=16000000L
unoEE.build.board=AVR_UNO
unoEE.build.core=arduino
unoEE.build.variant=standard
##############################################################
unoEE.name=ATmega328p 2MHz (16MHz Div8) con EESAVE
unoEE.vid.0=0x2341
unoEE.pid.0=0x0043
unoEE.vid.1=0x2341
unoEE.pid.1=0x0001
unoEE.vid.2=0x2A03
unoEE.pid.2=0x0043
unoEE.vid.3=0x2341
unoEE.pid.3=0x0243
unoEE.upload.tool=avrdude
unoEE.upload.protocol=arduino
unoEE.upload.maximum_size=32256
unoEE.upload.maximum_data_size=2048
unoEE.upload.speed=115200
unoEE.bootloader.tool=avrdude
unoEE.bootloader.low_fuses=0x62
unoEE.bootloader.high_fuses=0xD9
unoEE.bootloader.extended_fuses=0xFF
unoEE.bootloader.unlock_bits=0x3F
unoEE.bootloader.lock_bits=0x0F
unoEE.bootloader.file=optiboot/optiboot_atmega328.hex
unoEE.build.mcu=atmega328p
unoEE.build.f_cpu=2000000L
unoEE.build.board=AVR_UNO
unoEE.build.core=arduino
unoEE.build.variant=standard
##############################################################
uno8M.name=ATmega328p 8MHz con EESAVE no bootloader
uno8M.vid.0=0x2341
uno8M.pid.0=0x0043
uno8M.vid.1=0x2341
uno8M.pid.1=0x0001
uno8M.vid.2=0x2A03
uno8M.pid.2=0x0043
uno8M.vid.3=0x2341
uno8M.pid.3=0x0243
uno8M.upload.tool=avrdude
uno8M.upload.protocol=arduino
uno8M.upload.maximum_size=32768
uno8M.upload.maximum_data_size=2048
uno8M.upload.speed=115200
uno8M.bootloader.tool=avrdude
uno8M.bootloader.low_fuses=0xE2
uno8M.bootloader.high_fuses=0xD6
uno8M.bootloader.extended_fuses=0x05
uno8M.bootloader.unlock_bits=0x3F
uno8M.bootloader.lock_bits=0x0F
uno8M.bootloader.file=optiboot/optiboot_atmega328.hex
uno8M.build.mcu=atmega328p
uno8M.build.f_cpu=8000000L
uno8M.build.board=AVR_UNO
uno8M.build.core=arduino
uno8M.build.variant=standard
##############################################################
unoEE è a 16MHz con la conservazione del contenuto della EEPROM.
Ho fatto come hai detto tu, ossia ho aggiunto l'URL nelle impostazioni, ho installato nel gestore schede il MiniCore, ho usato un Arduino Uno con caricato ArduinoISP collegato con un ATMega328P su breadboard senza quarzo (pins 17, 18, 19 rispettivamente sui pins 11, 12 e 13 su Arduino Uno, il reset, pin 1, collegato con pull-up a Vcc e al pin 10 di Arduino Uno).
Quindi ho impostato come programmatore Arduino as ISP e ho cliccato Scrivi il bootloader (controllate voi le impostazioni nel mio menu tendina), ma il risultato lo vedete nella schermata, non va. Fallisce la scrittura perché non legge la signature dell'ATMega328P sulla breadboard. Cosa posso fare? Dove sbaglio??
Era nuovo oppure proveniva da una scheda che prima usava un quarzo ?
Se era nuovo di fabbrica era predisposto per funzionare senza quarzo, se invece e' un "recupero" da un vecchio Arduino che prima usava quarzo o risuonatore, i fuses sono impostati per il quarzo esterno e bisogna metterlo, almeno finche' non si scrivono i nuovi fuses insieme al bootloader.
Nel caso, sul repo github del minicore, in fondo, ci sono indicati i collegamenti minimi da fare per tutte e tre le versioni di 328.
Serve il nostro Rescue...
Cosa sarebbe il vostro Rescue??
Un po' scomoda e strana la cosa. Nel senso che con i PIC non è necessario collegarlo come i fuses precedenti volevano. Può darsi quindi che se l'ATMega328P che uso era precedentemente configurato con qurzo esterno e io ora voglio programmarlo SENZA quarzo esterno, lui non comunica con l'UNO e come signature ovviamente viene letto tutto 0.
Ok, provo a collegarci un quarzo, bootarlo e poi vedo se funziona lo sketch senza quarzo. Grazie della dritta. Temevo fosse così ma mi sembrava assurdo.
Okay, aggiungendo il quarzo sulla bb il boot loader viene caricato, però dopo non riesco a caricare lo sketch sull'ATMega328 con il mio bootloader per ck interno. Che programmatore devo impostare sulla ide e come e dove collegarlo per programmarlo? devo rimuovere il quarzo? Cercando ho trovato queste istruzioni: https://docs.arduino.cc/built-in-examples/arduino-isp/ArduinoToBreadboard ma non funziona, non dialoga e nel link non spiega che impostazioni dare come programmatore nell'IDE. Ma perché spiegano sempre le cose a metà? È frustrante!
Arduino as ISP.
Per avviare il caricamento:
CTRL+Shift+U.
Il quarzo puoi toglierlo, ma viene ignorato.