salvare un valore su eeprom prima dello spegnimento...basta un condensatore?

Pensando di utilizzare un circuito standalone, se avessi bisogno di salvare un valore su eeprom solo appena prima delli spegnimento potrei utilizzare un condensatore in parallelo al pin di alimentazione e, collegando il +5 ad un pin in ingresso sfruttare la carica del condensatore in modo che, allo spegnimento il pin vada a 0 mentre il microcontrollore sia ancora brevemente alimentato dal condensatore?
A quel punto basterebbe avere un interrupt sul pin che chiama il caricamento se eeprom ma ho un paio di dubbi perchè non so:

1: quanto tempo impiega l'atmel a salvare un valore su eeprom interna
2: quanto è il carico? Cioè, il tempo si calcola T=R*C no?!dove in questo caso R (ditemi se sbaglio) è il microcontrollore...quanto vale dunque la resistenza?!

thank you!

  1. la scrittura su EEPROM interna richiede 3,3 ms
  2. quella formula da il tempo T in secondi ed indica con "C" la capacità espressa in Farad del condensatore, e con "R" la resistenza in Ohm.

stavo facendo delle prove proprio adesso su una cosa del genere, nella formula devi vedere quanta corrente serve al micro per fare quello che sta facendo, non tanto la sua resistenza e quindi vedere se il tempo di scarica del condensatore a tot mA è minore del tempo di scrittura sulla EEPROM... a farla semplice io prenderei un C bello grosso così da non rischiare niente :slight_smile:
dal punto di vista elettrico metterei anche un diodo in modo che il condensatore si scarichi solo sul micro e non sul resto del circuito

comunque stovedendo che ogni volta che programmo via ISP l'atmega328 mi pulisce tutta la EEPROM, sbaglio? questa roba non è bella...

?R:
stavo facendo delle prove proprio adesso su una cosa del genere, nella formula devi vedere quanta corrente serve al micro per fare quello che sta facendo, non tanto la sua resistenza e quindi vedere se il tempo di scarica del condensatore a tot mA è minore del tempo di scrittura sulla EEPROM... a farla semplice io prenderei un C bello grosso così da non rischiare niente :slight_smile:
dal punto di vista elettrico metterei anche un diodo in modo che il condensatore si scarichi solo sul micro e non sul resto del circuito

Concordo. Conviene usare il supercondensatore solo col micro anche per risparmiare la corrente. E' inutile disperderla a giro nel circuito quando alla fine solo il micro deve essere alimentato per quel mezzo secondo necessario a scrivere.

comunque stovedendo che ogni volta che programmo via ISP l'atmega328 mi pulisce tutta la EEPROM, sbaglio? questa roba non è bella...

Sì, resetta tutto. Per evitare, puoi flashare il firmware da terminale usando avrdude

Mi chiedevo, da ignorante: visto che in scarica la corrente circola nel verso opposto, che abbiamo sul pin?

sciorty:
Mi chiedevo, da ignorante: visto che in scarica la corrente circola nel verso opposto, che abbiamo sul pin?

in che senso? è come se avessi una batteria, non succede niente di particolare

leo72:

comunque stovedendo che ogni volta che programmo via ISP l'atmega328 mi pulisce tutta la EEPROM, sbaglio? questa roba non è bella...

Sì, resetta tutto. Per evitare, puoi flashare il firmware da terminale usando avrdude

ma perchè fa sta cosa? così facendo ogni volta che programmo va a scrivere sulla eeprom che ha un numero di scritture limitato...

?R:

leo72:

comunque stovedendo che ogni volta che programmo via ISP l'atmega328 mi pulisce tutta la EEPROM, sbaglio? questa roba non è bella...

Sì, resetta tutto. Per evitare, puoi flashare il firmware da terminale usando avrdude

ma perchè fa sta cosa? così facendo ogni volta che programmo va a scrivere sulla eeprom che ha un numero di scritture limitato...

Sempre più comunque della Flash, pensaci :wink:
Flash interna: 10.000 riscritture
EEPROM interna: 100.000 riscritture

Quindi prima che ti "muoia" la EEPROM, ti è "morta" la Flash :stuck_out_tongue_closed_eyes:

leo72:
Sempre più comunque della Flash, pensaci :wink:
Flash interna: 10.000 riscritture
EEPROM interna: 100.000 riscritture

Quindi prima che ti "muoia" la EEPROM, ti è "morta" la Flash :stuck_out_tongue_closed_eyes:

non so perchè ma ero convito che fosse il contrario :sweat_smile: questa notizia risolve molti problemi che mi stavo ponendo nelle ultime ore :stuck_out_tongue:

Casomai la cancellazione della EEPROM rompe le scatole nel caso nella EEPROM si siano scritti dei dati importanti, che vengono perduti.
Ecco perché ti consigliavo, nel caso, di compilare con l'IDE per crearti il firmware e poi di flasharlo usando avrdude da terminale, per evitare appunto di cancellarli.

Tornando al "perché" della cancellazione totale, non so dirti il motivo. Si era già parlato di questo ma non mi ricordo se era venuta fuori la motivazione.

ricordo anche io ne parlammo approfonditamente,
ricordo anche che il numero di serie arduinico, presente in eeprom, non viene cancellato normalmente dall'ide

per il condensatore, e' una buona idea, usa quelli da 1Farad, che si usano al posto delle coincell, cosi' "aivoglia" di scrivere

Testato:
ricordo anche io ne parlammo approfonditamente,
ricordo anche che il numero di serie arduinico, presente in eeprom, non viene cancellato normalmente dall'ide

Negli ultimi 2 byte della EEPROM ci sarebbe anche il numero di riscritture della Flash effettuate. Tale valore si perde ovviamente nel caso si erasi la memoria senza informare avrdude di mantenere quel contatore. L'IDE lo fa in automatico, ma in pochi lo sanno e la prima volta che brasano il chip cancellano tutto, firma e contatore compresi.

beh se ritrovate quella discussione mettete il link che potrebbe essermi molto utile, grazie :wink:

leo72:
Negli ultimi 2 byte della EEPROM ci sarebbe anche il numero di riscritture della Flash effettuate. Tale valore si perde ovviamente nel caso si erasi la memoria senza informare avrdude di mantenere quel contatore. L'IDE lo fa in automatico, ma in pochi lo sanno e la prima volta che brasano il chip cancellano tutto, firma e contatore compresi.

ma come funziona questo contatore? chi lo incrementa? se io salvo qualcosa in quelle locazioni di memoria posso avere interferenze?

leo72:
Ecco perché ti consigliavo, nel caso, di compilare con l'IDE per crearti il firmware e poi di flasharlo usando avrdude da terminale, per evitare appunto di cancellarli.

Uh quello che serve a me cosi evito di aprire un nuovo topic, posso flashare di mio un atmega 8 prendendo l'hex dell'ide?
mi basta il board.txt(dove lo trovo?) modificato?
posso farlo anche senza bootloader?(uso un quarzo a 16 mhz)

dovrebbe essere tutto nella mia piccola guida,
se hai voglia invece di studiare c'e' quella del menny :slight_smile:

Madwriter:

leo72:
Ecco perché ti consigliavo, nel caso, di compilare con l'IDE per crearti il firmware e poi di flasharlo usando avrdude da terminale, per evitare appunto di cancellarli.

Uh quello che serve a me cosi evito di aprire un nuovo topic, posso flashare di mio un atmega 8 prendendo l'hex dell'ide?
mi basta il board.txt(dove lo trovo?) modificato?
posso farlo anche senza bootloader?(uso un quarzo a 16 mhz)

È stato spiegato più volte la procedure da seguire per sapere dove si trova il file .hex, ma al momento la funzione "search" non funziona e io ho informazioni frammentate e imprecise.

Ci dovrebbe essere una combinazione di tasti da premere o un menu con il quale abitilare la funzione "verbose" dell'ide, il quale mostra tutti i processi lanciati durante la compilazione e la scrittura sul micro.
Trovato il file .hex non ti serve altro che lanciare da console di comando il programma "avrdude" (e questo devi cercarlo nel file system) seguito da una serie di parametri. Mi pare che nelle guide di Menniti ci dovrebbe essere qualcosa di aiuto come pure nei Megatopic. Se non riesci aspetta qualcuno con info più dettagliate.

Anticipato da Testato:
Scusa ho dimenticato la tua guida: :stuck_out_tongue:

Ciao.

MauroTec:

Madwriter:

leo72:
Ecco perché ti consigliavo, nel caso, di compilare con l'IDE per crearti il firmware e poi di flasharlo usando avrdude da terminale, per evitare appunto di cancellarli.

Uh quello che serve a me cosi evito di aprire un nuovo topic, posso flashare di mio un atmega 8 prendendo l'hex dell'ide?
mi basta il board.txt(dove lo trovo?) modificato?
posso farlo anche senza bootloader?(uso un quarzo a 16 mhz)

È stato spiegato più volte la procedure da seguire per sapere dove si trova il file .hex, ma al momento la funzione "search" non funziona e io ho informazioni frammentate e imprecise.

Ci dovrebbe essere una combinazione di tasti da premere o un menu con il quale abitilare la funzione "verbose" dell'ide, il quale mostra tutti i processi lanciati durante la compilazione e la scrittura sul micro.
Trovato il file .hex non ti serve altro che lanciare da console di comando il programma "avrdude" (e questo devi cercarlo nel file system) seguito da una serie di parametri. Mi pare che nelle guide di Menniti ci dovrebbe essere qualcosa di aiuto come pure nei Megatopic. Se non riesci aspetta qualcuno con info più dettagliate.

Anticipato da Testato:
Scusa ho dimenticato la tua guida: :stuck_out_tongue:

Ciao.

io non voglio usare l'ide(che stranamente non mi uploada gli sketch ma uso un programmino molto efficiente che ho trovato in rete, quindi metto atmega8 dalle board compilo e mi prendo l'hex perfetto poi per il pinout devo controllare i pin originali pc5 etc giusto?

?R:
ma come funziona questo contatore? chi lo incrementa? se io salvo qualcosa in quelle locazioni di memoria posso avere interferenze?

E' avrdude che fa lo "sporco lavoro", passando il flag "-y":

Tells avrdude to use the last four bytes of the connected parts' EEPROM memory to track the number of times the device has been
erased. When this option is used and the -e flag is specified to generate a chip erase, the previous counter will be saved
before the chip erase, it is then incremented, and written back after the erase cycle completes. Presumably, the device would
only be erased just before being programmed, and thus, this can be utilized to give an indication of how many erase-rewrite
cycles the part has undergone.

tornando alla domanda di partenza, si il diodo direi che è essenziale, ma da ignorante mi viene una domanda...la caduta di tensione sul diodo potrebbe dare problemi?
In quel caso l'alimentazione credo dovrebbe essere almeno di 6 volt per averne 5 e qualcosa sul pin, ma l'altmel avrà sempre e comunque una gestione I/O digitale e analogica da 0 a 5 V qualunque sia il voltaggio con cui è alimentato giusto?

La tensione massima supportata dall'Atmega328P è di 5,5 Volt. Se hai una tensione maggiore o ti calcoli la caduta del diodo per vedere se rientri oppure intrponi un regolatore di tensione.
Pag. 303 del Datasheet --> http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet.pdf.