Bonjour,
l'exemple de rtclib 1307nvram permet d'enregistrer des bytes en sram (56 bytes libres)
comment décomposer un unsigned long 4 bytes pour enregistrer dans 4 cases sram et le reconstituer en lisant les 4 adresses ?
la sram 56 bytes disponibles aux adresses 0x08>>0x3F
la fonction writenvram et readnvram adresses 0 a 55 decimal, détail en passant
en fait je n'ai qu'un unsigned long qui change de valeur environ 50x/24h, je dois juste lire lastcount=lastcount+newcount, l'ancienne valeur est écrasée par la nouvelle et l'écrire à la meme adresse de départ. il faut creer un tableau de 4 cases puis écrire chaque case aux adresses contigues,etc.. ? ma logique est en panne
dans l'exemple cité
// Example reading multiple bytes:
uint8_t readData[4] = {0}; // tableau de bytes ? valeur init 0 ?
myrtc.readnvram(readData, 4, 2); // le 2 adresse sram de départ lecture ?
// lit 4 cases et rempli le tableau ?
Serial.println(readData[0], HEX); // print contenu tableau en hexa
Serial.println(readData[1], HEX);
Serial.println(readData[2], HEX);
Serial.println(readData[3], HEX);
Merci pour toute aide
exemple complet
// Example of using the non-volatile RAM storage on the DS1307.
// You can write up to 56 bytes from address 0 to 55.
// Data will be persisted as long as the DS1307 has battery power.
#include <RTClib.h>
RTC_DS1307 myrtc;
void printnvram(uint8_t address) {
Serial.print("Address 0x");
Serial.print(address, HEX);
Serial.print(" = 0x");
Serial.println(myrtc.readnvram(address), HEX);
}
void setup () {
Serial.begin(57600);
if (! myrtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
// Print old RAM contents on startup.
Serial.println("Current NVRAM values:");
for (int i = 0; i < 6; ++i) {
printnvram(i);
}
// Write some bytes to non-volatile RAM storage.
// NOTE: You can only read and write from addresses 0 to 55 (i.e. 56 byte values).
Serial.println("Writing NVRAM values.");
// Example writing one byte at a time:
myrtc.writenvram(0, 0xFE); // adresse reelle physique sram 0x08
myrtc.writenvram(1, 0xED);
// Example writing multiple bytes:
uint8_t writeData[4] = { 0xBE, 0xEF, 0x01, 0x02 };
myrtc.writenvram(2, writeData, 4);
// Read bytes from non-volatile RAM storage.
Serial.println("Reading NVRAM values:");
// Example reading one byte at a time.
Serial.println(myrtc.readnvram(0), HEX);
Serial.println(myrtc.readnvram(1), HEX);
// Example reading multiple bytes:
uint8_t readData[4] = {0}; // tableau de bytes ? valeur init 0 ?
myrtc.readnvram(readData, 4, 2); // le 2 adresse sram de départ lecture ?
// lit 4 cases et rempli le tableau ?
Serial.println(readData[0], HEX); // print contenu case 0 en hexa
Serial.println(readData[1], HEX);
Serial.println(readData[2], HEX);
Serial.println(readData[3], HEX);
}
void loop () {
// Do nothing in the loop.
}