Go Down

Topic: Leggere e scrivere su Eeprom su Arduino Standalone (Read 1 time) previous topic - next topic

vic_20

Salve a tutti, spero che qualcuno sappia aiutarmi in merito ad un problema a cui non so dare risposta:

Sto portando avanti un progetto che prima avevo testato su una arduino Mega, e adesso voglio ricreare il tutto standalone con un atmega328.
Il progetto originale è composto da due sketch, il primo scrive su eeprom dei dati che possono cambiare in base a dove viene montato il dispositivo, poi il secondo sketch contiene il programma vero e proprio. Il fatto è che con l'arduino mega carico il primo sketch che mi scrive i dati su eeprom, poi carico il secondo, che legge i dati dalla eeprom, e tutto funziona perfettamente. Uso questo sistema per una maggiore velocita nel cambiare alcuni parametri e non dover andare a rivedere il programma.
Se provo però a scrivere sulla eeprom dell' atmega standalone, e poi inviargli dopo il programma, la eeprom viene cancellata.
Perche se uso l'arduino Mega la eeprom non viene riscritta, mentre sullo standalone si?

leo72

La MEGA la programmi direttamente? Se sì, l'IDE di Arduino non invia comandi per cancellare la EEPROM.
Se lo standalone lo programmi con lo sketch ArduinoISP, immagino che venga eseguito un erase del chip.

Potresti provare a scrivere il secondo sketch direttamente da terminale passando ad avrdude solo il binario da scrivere nella Flash. In questo modo non vai a toccare la EEPROM. Prova anche ad abilitare il fuse per proteggere la EEPROM durante i cicli di programmazione del chip.

vic_20

?? Prova anche ad abilitare il fuse per proteggere la EEPROM durante i cicli di programmazione del chip.

Grazie della dritta, sapresti darmi qualche indicazione per poter capire meglio cosa fare, ovvero ho capito la tua spiegazione, ma non so da dove cominciare soprettutto per i fuse, suppongo che dovrei modificare il programma che uso per far diventare la mia arduino mega un programmatore, o la parte in cui indico il modello di atmega da programmare ?

Grazie!

leo72

Il settaggio dei fuse lo fai da terminale.
I fuse li calcoli con questo strumento qui:
http://www.engbedded.com/fusecalc

Per programmare i fuse fai riferimento alla guida di Menniti. Si tratta comunque di agire con il terminale. Hai mai lavorato con avrdude da terminale?

vic_20

Non ho mai lavoretto con avrdude, comunque provo a trovare qualche guida, hai per caso il link sulla guida di Menniti ?

PaoloP

#5
Oct 09, 2012, 06:39 pm Last Edit: Mar 06, 2013, 07:04 pm by PaoloP Reason: 1
Da segnare nei preferiti --> http://www.michelemenniti.it/arduino_burn_bootloader.php  ;)
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

gingardu

#6
Oct 09, 2012, 06:50 pm Last Edit: Oct 09, 2012, 07:00 pm by gingardu Reason: 1


Se provo però a scrivere sulla eeprom dell' atmega standalone, e poi inviargli dopo il programma, la eeprom viene cancellata.
Perche se uso l'arduino Mega la eeprom non viene riscritta, mentre sullo standalone si?


che strano mo pare che "avevamo"  stabilito che sull'arduino 1   la memoria non  veniva mai cancellata,
non e che gli indirizzi sono troppo "alti"  e in realta non scrivi nulla perche il 328 arriva solo fino a 1023
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

PaoloP

In effetti, se ha provato sulla Mega, ma in stand-alone ha un 328. Forse c'è qualche correzione da fare.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

vic_20

Ragazzi ho risolto impostando i fuses in questo modo:

0xFF Low
0xD7 High
0x07 Extended

in questo modo la eprom viene preservata e non cancellata.

Grazie a tutti

Go Up