uso abusivo bit registro

dato un rtc 8bit, che all'indirizzo 03h gestisce il giorno della settimana, e per fare questo usa solo bit 0-1-2

posso usare ad esempio il bit3 a mio piacimento, andandoci a scrivere 1 o 0 ?

quando da lunedi' passa a martedi' l'rtc va a modificare solo i bit occupati 0-1-2 oppure deve per forza riscrivere da 0 a 7 ? se e' cosi' alla mezzanotte perdo il mio bel dato

grazie dell'eventuale illuminato parere

Table2-pg81.png

Probabilmente l'RTC ignorerà i bit "di troppo", ma puoi provare... non si rompe niente XD

Senza sapere quale RTC usi non é possibile dare una risposta.

Non Ti bastano il RAM che ha il RTC? Forse un altro modello ne ha di piú?

Seno potresti usare il FM3316-G o il FM33256-G che sono un RTC con 2 o 8kByte RAM, 3V e SPI. (da RS)
Il FM3164 hva a 5V e I2C ma non so dove ordinarlo.
http://www.ramtron.com/products/integrated/processor-companion.aspx

Ciao Uwe

Altrimenti puoi mettere sotto batteria di backup anche il 328 ed hai risolto i problemi :stuck_out_tongue:

Io penso che ti riscriva tutto il dato. Ne sono quasi convinto, ma l'unico modo per saperlo è provare... :slight_smile:

scusate non avevo messo il modello, ds3231, che purtroppo a differenza del classico ds1307 non ha la NVRam

stavo quindi pensando a questo trucchetto, visto che e' interessante come concetto. io pure temo che vada a riscrivere titto e 8 i bit.

logicamente posso usare la eeprom del 328, mi chiedevo pero' se si rovina ad avere infinite letture al secondo, perche' questo dato viene letto ad ogni ciclo, e quindi credo sia meglio leggerlo dall'RTC, che prevede un buffer appositamente per essere letto in contnuazione, rispetto ad una eeprom alla quale si deve accedere e leggere.

l'altra idea che mi viene in mente e' mettere il dato nella eeprom e farlo copiare in ram del micro all'accensione, in modo da fare poi la lettura dalla RAM,

terzo problema, il tempo, leggere una variabile dalla eeprom comporta molto tempo credo (quanti ms ?) che mi bloccherebbero il mio gia' delicato sketch.

La EEPROM interna è garantita per 100.000 scritture.
Mettiamo 100 scritture al secondo (considera che una scrittura richiede 3,3 ms) dopo 1000 secondi hai fottuto le celle di EEPROM su cui scrivi.

In lettura esattamente non so, il datasheet parla solo di 4 cicli macchina di attesa prima di effettuare la lettura ma non ho trovato il tempo richiesto.

fortunatamente il dato viene scritto una volta ogni sei mesi, quindi in scrittura no problem, ma in lettura ? io credo che se anche non e' specificato, leggere la eeprom in continua, a 16MHz, non gli faccia bene, nessuno lo ha mai fatto ?

Testato:
ma in lettura ? io credo che se anche non e' specificato, leggere la eeprom in continua, a 16MHz, non gli faccia bene, nessuno lo ha mai fatto ?

Il degrado della EEPROM, e della FLASH, è solo in scrittura/cancellazione, in lettura non ci sono limiti salvo il tempo d'accesso che è maggiore rispetto alla ram.
In pratica puoi leggere alla massima velocità possibile la EEPROM, ma anche la FLASH, in continuazione per i prossimi 40 anni (mtbf) senza problemi prima di un possibile guasto generico al micro che lo mette fuori uso impedendoti di leggere la memoria, però nessuno ti garantisce l'integrità dei dati per più di 20 anni :slight_smile:

grazie mille Astro per il chiarimento, non e' un chiarimento banale, ho approfonditamente cercato nel forum e su internet e davvero non ho trovato una info chiara in tal senso.

A questo punto approfitto sempre sullo stesso tema, anche per quanto riguarda la microSD che si usa nella ethernetshield non ci sono limiti in lettura ? Il discorso si estende a tutti i tipi di memoria ?

Or ora mi e' venuta una domanda, probabilmente banale ma e' bello sviscerarla, visto che abbiamo una flash, ma non la si puo' usare per memorizzare un dato ? lo sketch la va ad occupare tutta anche se non del tutto usata ? Non mi posso ricreare uno spazietto in flash dove tengo conservato questo misero 1/0 ?

In teoria potresti farlo, l'Atmega permette la scrittura in runtime nella flash. Ma la flash ha ancora meno cicli di scrittura della EEPROM, siamo a soli 10.000.

PS:
tutte le Flash si degradano, anche quelle delle pennette o delle SD, chiaramente.

Testato:
A questo punto approfitto sempre sullo stesso tema, anche per quanto riguarda la microSD che si usa nella ethernetshield non ci sono limiti in lettura ? Il discorso si estende a tutti i tipi di memoria ?

La questione del massimo di cicli di scrittura nel pennette, schedine SD e SSDisk sono un po diverse. Li esiste un controller che gestisce la scrittura. Anche se scrivi sempre lo stesso file fisicamente viene modificato il posto nella memoria dove viene scritto e percui abbassato di molto la scrittura sulla singola cella di memoria con un allungamento notevole del numero di scrittura media.

La tutte i tipi di memoria (eccetto quelle al nucleo di ferite) possono essere lette infinite volte. Su quelle al nucleo di ferrite che non si usano piú da tantissimi anni, una lettura distrugge il dato di memoria che deve essere riscritto dopo la lettura per mantenerlo.

Ciao Uwe

uwefed:
La questione del massimo di cicli di scrittura nel pennette, schedine SD e SSDisk sono un po diverse. Li esiste un controller che gestisce la scrittura. Anche se scrivi sempre lo stesso file fisicamente viene modificato il posto nella memoria dove viene scritto e percui abbassato di molto la scrittura sulla singola cella di memoria con un allungamento notevole del numero di scrittura media.

Esatto, inoltre la flash delle SD e similari ha un endurance, riferita al singolo blocco da 512 byte, maggiore di quella usata nei micro, vale solo per i produttori seri come Sandisk e soci, per la robaccia cinese l'endurance è ridicola, poche migliaia di cicli.
Sandisk dichiara una endurance tipica di 300.000 cicli per ogni singolo blocco, valore che diventa anche molti milioni se l'unità di memoria viene solo scritta parzialmente grazie alla strategia implementata dal controller di usare tutti i blocchi di memoria consecutivamente invece di riscrivere sempre dall'inizio.

Grazie a tutti.

Sulla prima domanda, uso del registro, cosa ne pensate, astro ed uwe, viene aggiornato intero byte o i soli bit interessati ?

Testato:
Sulla prima domanda, uso del registro, cosa ne pensate, astro ed uwe, viene aggiornato intero byte o i soli bit interessati ?

Non è possibile rispondere a questa domanda, dipende da come il costruttore ha deciso di gestire quel registro, puoi solo provare a scrivere i bit e vedere cosa succede quando il registro viene aggiornato dal RTC.
Ritengo molto probabile che venga riscritto completamente con il nuovo valore ogni volta che viene aggiornato e non solamente i primi tre bit, c'è pure la possibilità che siano indirizzati fisicamente solo i primi tre bit, il che impedirebbe di utilizzare gli altri, oppure che i rimanenti bit siano condivisi da un altro registro o vengono usati come flag interni dal RTC stesso.

Potresti usare un trucco.
Scrivere nei registri di impostazione di uno dei 2 allarmi del micro, senza attivarlo, per vedere se ti mantiene i dati.
Basta che tu imposti un allarme tipo 00:00:00 per OFF oppure 00:00:01 per ON per lo stato del tuo flag. Prova, dovrebbe andare.

Ho acquistato un RTC su futuraelettronica, questo monta anche un piccolo PIC( a quanto ho sembra fa da buffer o da interfaccia I2C !).
vorrei sapere se qualcuno lo ha già usato e che sketch ha usato per farlo funzionare, usando le librerie che ho trovato mi da problemi di compilazione? :%

Magari se metti il link... :wink:

leo72:
Magari se metti il link... :wink:

Ti si è già esaurita la sfera di cristallo ? :grin:

No, quella ce l'ha Uwe XD