caricare sketch con un altro arduino

salve :slight_smile:

ma sarebbe possibile inviare uno sketch da un arduino ad un altro? ad esempio su un arduino ho file hex con il relativo sketch che me lo trasmette e tramite i pin tx e rx collegati al secondo arduino esso viene flashato con il programma inviato ... non so se mi sono spiegato :slight_smile:

Si può fare.
Puoi memorizzare il file hex su una scheda SD e da lì leggerlo e flasharlo sull'altro Arduino. In questo modo puoi aggiornare il firmware sulla SD. Se il 1° Arduino è collegato ad un PC allora basta installargli sopra lo sketch ArduinoISP e poi puoi usare l'Arduino come programmatore ecc...
Sono tutte cose fattibili, ma non è detto che per tutti i casi ci sia il programma già pronto.

Spiega casomai meglio la condizione di lavoro dei 2 Arduino

io ho provato ad utilizzare questo circuito di collegamento senza però l'optional FTDI debugging

http://baldwisdom.com/bootdrive/

caricando sull'arduino collegato alla sd (la quale riesce a leggere un file.txt correttamente caricando l esempio dumpfile) il file bootdrive.ino contenuto nella cartella zip che si puo scaricare dal sito, sulla sd ho caricato il file blink.cpp.hex rinominandolo program.hex

Scusa, non capisco.
Hai provato a realizzarlo e non ti ha funzionato oppure lo hai solo studiato?
Anch'io l'ho guardato quel progetto, tempo fa, ma non l'ho ancora provato. Però dovrebbe funzionare se le cose sono state fatte correttamente.

ho provato a realizzarlo ma non funziona ho utilizzato un arduino duemilanove (con bootloader dell'uno) e un arduino uno , all'arduino duemilanove e collegata la sd (non il modulo sd ma proprio un adattatore sd dove inserisco dentro le micro e provando a caricare i file txt con l'esempio dumpfile arduino li legge benissimo quindi non credo che il problema si nell'SD) ...

Non ho esaminato il firmware, bisognerebbe capire come funziona.
Vedo però che è stato scritto sulla Uno, non so se usando la 2009 cambia qualcosa. C'era una nota a piè di pagina in cui accenna al fatto che se la scheda target non è una Uno va cambiata la velocità di upload. POtrebbe valere anche sulla scheda programmatrice?

potrebbe essere tanto vale tentare, proverò ad invertire i due arduini usando la uno come programmatore e la duemilanove come target e cambiando la velocità nel programma , appena ho fatto ti dico :slight_smile:

niente nessun segno di vita =( ... mi serve un aiuto :blush:

Hai collegato il pin SS correttamente? La comunicazione all'SD avviene tramite SPI e quel pin è necessario per dialogare con la schedina.

PS:
se la tua necessità è quella di poter aggiornare il firmware di una Arduino da una schedina SD, potresti provare anche il progetto 2boot:

E' un bootloader modificato che "dovrebbe" permettere l'upload di uno sketch memorizzato su SD direttamente sul chip, senza usare schede terze. Potresti provarlo. E' un progetto vecchiotto, ha 2 annetti.

l ss è collegato correttamente al pin 10, infatti con il dumpfile funziona ....si avevo gia pensato di utilizzare 2boot ma non riesco proprio a capire come andava installato il bootloader avrdude ecc non so come usarli mi sarebbe servita una spiegazione dettagliata, questo mi sembrava più facile :slight_smile:

Metti un chip in standalone, lo colleghi come per la programmazione ISP (vedi guida del Menniti) poi apri un terminale e carichi il firmware con avrdude.
Un'altra via è quella di mettere il firmware in una cartella sotto /hardware/arduino/bootloaders/ e poi creare una board virtuale nel file /hardware/arduino/boards.txt, magari replicando quella della UNO e cambiando solo le voci interessate.

mettiamo ad esempio che crei la cartella /hardware/arduino/bootloaders/2boot e dentro ci copi il file .hex che rinomini come bootloader_2boot.hex.
Una board potrebbe essere questa:

2boot.name=Arduino 2boot
2boot.upload.protocol=arduino
2boot.upload.maximum_size=32256
2boot.upload.speed=115200
2boot.bootloader.low_fuses=0xff
2boot.bootloader.high_fuses=0xde
2boot.bootloader.extended_fuses=0x05
2boot.bootloader.path=2boot
2boot.bootloader.file=bootloader_2boot.hex
2boot.bootloader.unlock_bits=0x3F
2boot.bootloader.lock_bits=0x0F
2boot.build.mcu=atmega328p
2boot.build.f_cpu=16000000L
2boot.build.core=arduino
2boot.build.variant=standard

Avviando l'IDE, carichi lo sketch ArduinoISP sulla UNO usata come programmatore, poi selezioni da Strumenti/Tipo di board la scheda "Arduino 2boot" e clicchi su "Scrivi bootloader".
In questo modo prepari il chip con i fuse ed il bootloader

ook grazie per l'aiuto provo a fare il secondo metodo con l'arduino isp , ma quale sarebbe il file del 2boot? che dal sito non capisco quale sia e non vorrei sbagliare :slight_smile:

I file precompilati sono nella cartella build:

io copio in il contenuto della pagina 2boots-arduino-atmega328p-16000000L-nommc.hex (cioè copio tutte le scritte in esadecimale ) e creo un file .hex lo rinomino bootloader_2boot e lo inserisco nella cartella /hardware/arduino/bootloaders/2boot, creo la boards e poi eseguo il bootloader normalmente, no? :slight_smile:

il programma mi da questo errore

Legge male il file, pare che interpreti la riga del bootloader e quella di un fuse nel file boards.txt come un'unica riga.
Se sei su Windows ed hai editato il file con Notepad, forse il problema è questo. Prova aprendolo con un editor di testo "serio", su Windows c'è Notepad++.

ok grazie problema risolto e bootloader caricato... ma il destino non vuole proprio che carichi uno sketch da usb e mi ha dato un altro problema ... il bootloader l'ho caricato su un atmega della scheda 2009 che dato che ha lo stesso micro della uno e con il bootloader normale della uno sulla 2009 andava pensavo che la seriale andasse anche con questo, invece no mi da l'errore avrdude: stk500_getsync(): not in sync: resp=0x00 ..... provando anche a metterlo in standalone niente nemmno da SD

Premetto che non ho capito se col chip standalone stai cercando di parlarci via seriale, dando per buono questo ti ricordo che il bootloader Optiboot differisce da quello della 2009 perché sono compilati per lavorare a velocità differenti.
L'Optiboot a 115200, quello della 2009 a 57600. Se vuoi caricare uno sketch via seriale su un chip esterno devi impostare la corrispondente velocità nella voce del file boards.txt.

Qui hanno realizzato la stessa cosa ma con la programmazione ISP --> Gammon Forum : Electronics : Microprocessors : Atmega chip stand-alone programmer to upload .hex files
Quindi non serve il bootloader.

oook ma ho provato a cambiare i valori della velocità e ancora niente non me lo carica... sul chip stand alone sto cercando di caricarci lo sketch via SD ... paolop se non riesco a farlo andare con il bootloader provo con la soluzione suggerita da te :slight_smile: