ich habe einen Arduino MEGA2560 als Datensmmler 24/7 laufen.
Alle 15 Sek. werden die gesammelten Daten von einem PC via Ethernet Shield abgeholt.
Das alles läuft problemlos.
Bei den gesammelten Daten sind aber auch Werte dabei die Tagsüber aufsummiert werden.
Nach einem Reset oder Neustart des Arduinos sind diese Messwerte erst mal weg und fangen wieder bei 0 an.
Weil das System aber noch lebt und fast täglich kleine Änderungen oder Ergänzungen vorgenommen werden,
sind nach jedem Upload der neuen Programmversion die aufsummierten Werte immer weg.
Gibt es eine Möglichkeit per Software den Upload eines neuen Programms erst mal abzufangen und noch ein Paar Byte im EEPROM zu sichern?
Ich will nicht ständig auf das EEPROM schreiben weil das 5760 Schreibvorgänge/Tag bedeutet und in einem halben sind dann die EEPROM-Speicherzellen "durchgebrannt".
Die Lösung die ich jetzt sehe ist ein Taster auf einen Binäreingang den ich vor jedem Upload betätige um dadurch die relevanten Daten im EEPROM zu sichern. Nach dem Upload/Neustart hole ich dann die Daten aus dem EEPROM und rechne damit weiter.
Gibt es eine Möglichkeit den Taster zu umgehen und ein automatisches schreiben vor einem Programmupload zu erzeugen?
peter_de:
Ich will nicht ständig auf das EEPROM schreiben weil das 5760 Schreibvorgänge/Tag bedeutet und in einem halben sind dann die EEPROM-Speicherzellen "durchgebrannt".
Falls Dir 56 Bytes zum Speichern der Daten reichen: Ein DS1307 RTC-Uhrenmodul hat 56 Bytes beliebig oft beschreibbaren RAM-Speicher drauf, der von der Stützbatterie ebenso gepuffert wird wie die Uhrzeit.
Du könntest also per I2C beliebig oft bis zu 56 Bytes in eine DS1307 speichern und die Daten würden Dir nach dem Reset wegen der Batteriepufferung sofort wieder zur Verfügung stehen.
Die Idee ist schon mal nicht schlecht
56 Byte reichen erst mal, ich brauche derzeit 8 Byte ( 2 x float ).
Weil die Aufgabe für den MEGA aber noch nicht den Endstand erreicht hat kann künftig noch was dazu kommen.
Bei einem Reset wird zuerst der Controller angehalten und dann wenn der Reset wieder auf Normalpegel zurückkehrt wird Resetvektor (Adresse der Resetroutine aka Bootloader) angesprungen. Es ist nicht möglich irgentwas vorher zu machen / abzuspeichern. Als Alternatve bleibt nur die Daten kontinuierlich abzuspeichern. EEprom sind dazu nicht ideal. Zum ersten weil ein Speichern (pro Page-Block, Größe hängt vom EEpromtyp ab) 5 bis 10mS dauert und weil zweitens die Anzahl der Schreibzyklen begrenzt ist.
Alternatven wie bereits gesagt:
Gepufferte RAM wie zb derRTC DS1307
FRAM die schnell wie RAM sind, aber die Daten ohne Spannungsversorgung nicht verlieren.
Serielle RAM der 23Cxx Serie wenn das System immer Spannung hat. Diese RAM sind Pinkompatibel mit einigen EEPROMs oder einigen FRAMs (8poliges SMD Gehäuse mit I2C oder SPI interface).
Der Start des SerialMonitors verursacht bei mir keinen Reset mehr. Das habe ich schon unterbunden weil es genervt hat.
Um einen Upload zu ermöglichen und dafür den Reset freizugeben muss ich derzeit eine Brücke auf einem Breadboard umstecken.
Es hat sich daher angeboten auch gleich einen Taster auf das Breadboard zu stecken um die Daten ins EEPROM zu schreiben.
Sichern und rücklesen der relevanten Daten funktioniert inzwischen auch schon.
Bei der Gelegenheit ist mir auch aufgefallen, dass ich noch einige Min- und Maxwerte über den Tagesverlauf gebildet habe die jetzt auch im EEPROM gesichert werden.
Die Version mit dem DS1307 ist deshalb auch schon weggefallen. Es sind inzwischen 60 Byte die gesichert werden (15 x float).
Zu den seriellen RAMs der 23Cxx Serie habe ich leider kein Datenblatt oder eine Bezugsquelle gefunden.
Vielleicht kann mir jemand einen Link dazu posten.