Forum: Mikrocontroller und Digitale Elektronik PIC EEPROM schreiben, gleichzeitig Spannungsausfall


von Dirk F. (dirkf)


Lesenswert?

Hallo zusammen,
wir verwenden einen PIC 18F4620 um u.a. die Zykluszahl einer Maschine zu 
erfassen und im EEPROM abzuspeichern.
Die Lebensdauer der Maschine beträgt etwa 10 Mio. Takte.
Ich verwende in C den Typ Long (also 32 Bit) und speichere ihn als 4 
Bytes im EEPROM ab. Funtion OK.
Speicherung nur alle 100 Takte, um das EEPROM zu schonen.

Jetzt stelle ich mir die Frage, wass kann passieren, wenn während des 
Speichern der 4 Bytes ein Stromausfall auftritt ?
Mit Stromausfall meine ich auch ein normales Abschalten währende des 
Betriebes.

Kann ich durch Verwenden der BOR Funktion ein feherhaftes Schreiben 
verhindern ?

Überlege auch, mit dem AD-Wandler die Spannung vor dem 
Festspannungsregler 7805 zu erfassen, um so bei einer zu geringen 
Spannung (Anzeichen auf Netzausfall) einfach nicht zu speichern.

Doppeltes Speichern macht ja auch keinen Sinn, da ich j anicht weiß , 
welcher der beiden LONG Werte gülig ist.
Dreifaches Speichern würde gehen. Bein Einschalten würde ich den Wert 
übernehmen, der min. in 2 Speicherorten gleich ist.
Ist mir aber eigentlich zu aufwendig.

Gruß DIrk

von -Gast XIV (Gast)


Lesenswert?

Dirk Faust schrieb:
> Jetzt stelle ich mir die Frage, wass kann passieren, wenn während des
> Speichern der 4 Bytes ein Stromausfall auftritt ?

Nimm einfach einen Elko zum Puffern des PIC. Der schreibt dir sein 
halbes Eprom mit 10uF voll.

Dirk Faust schrieb:
> Kann ich durch Verwenden der BOR Funktion ein feherhaftes Schreiben
> verhindern ?

Nein, wie soll das gehen? Wenn die Zelle 1 geschrieben ist aber Zelle 2 
nicht.

Eine Prüfsumme die erst nach dem Speichern weggeschrieben wird sollte 
reichen.

von -Gast XIV (Gast)


Lesenswert?

Dirk Faust schrieb:
> Speicherung nur alle 100 Takte, um das EEPROM zu schonen.

Dabei fällt mir ein: Wenn du noch Platz im EEPROM. Schreib einfach zwei 
drei Werte abwechselnd. Die müssen dann aufsteigend sein und die EEProm 
Lebensdauer wird min. verdoppelt.

Dirk Faust schrieb:
> Überlege auch, mit dem AD-Wandler die Spannung vor dem
> Festspannungsregler 7805 zu erfassen, um so bei einer zu geringen
> Spannung (Anzeichen auf Netzausfall) einfach nicht zu speichern.

Wenn du schon Hardware ändern kannst dann Puffer den Pic doch einfach. 
Dann kannst du alle 10 000 Cycles schreiben und 1x beim ausschalten.

von Besserwisser (Gast)


Lesenswert?

Du musst die Versorgungsspannung kontrollieren und den Pic mit einem 
Kondensator puffern (der mind. so groß ist, dass die Schreibzeit von 4 
Bytes überbrückt werden).
Bei sinkender Eingangsspannung noch schnell das EEPROM beschreiben und 
dann Schreibsperre, bis die Versorgungsspannung wieder über einem 
sicheren Level ist. Sonst kann es mal schiefgehen.
Habe selbst den Pufferkondensator mit einer Diode entkoppelt, sodaß
andere Verbraucher an der Versorgungsspannung nicht diesen leersaugen.

Wenn Du das EEPROM beschreibst während die Spannung fällt oder der
Brown-Out einsetzt passieren lustige Dinge im EEPROM.
Die alten Werte können gelöscht sein oder es stehen andere Werte 
plötzlich
drinn. Aber nur in den Zellen, die währendessen beschrieben wurden.

von Ich (Gast)


Lesenswert?

Du könntest doch ein anderes Byte im EEPROM setzen, bevor du schreibst 
und nach dem Schreiben wieder löschen. Danach wird die Sicherungskopie 
der Nutzdaten aktualisiert. Ist das Kontroll-Byte beim Einschalten 
gesetzt, sind die Daten Müll und du lädst das Backup wieder.

von DerDaOben (Gast)


Lesenswert?

Das letzte mal habe ich den PIC auch über einen C gepuffert. Über das 
LVDS Bit habe ich dann das Schreiben in den EEPROM eingeleitet (LVDS 
ziemlich genau eingestellt). Hatte bis jetzt keine Probleme damit. 
Selbst in rauher Umgebung (Kälte und C's vertragen sich nicht gar so 
tolle).

von Sam .. (sam1994)


Lesenswert?

Bei PIC kenn ich mich zwar mich nicht aus, aber bei meinem Mega brauchte 
ich 1mF pro Byte zum speichern im EEProm, obwohl ich alles andere 
ausgeschaltet habe.

von Severino R. (severino)


Lesenswert?

Samuel K. schrieb:
> Bei PIC kenn ich mich zwar mich nicht aus, aber bei meinem Mega brauchte
> ich 1mF pro Byte zum speichern im EEProm, obwohl ich alles andere
> ausgeschaltet habe.

1mF??? Schreibt der Mega mit einem Laser, oder gar mechanisch?

SCNR

von Dirk F. (dirkf)


Lesenswert?

Hallo, erst mal Danke für die vielen Hinweise.
Die Sache mit dem Pufferkondensator nützt aber nichts, wenn ich den 
Spannungsaufall nicht rechtzeitig erkenne !
Ich muss also irgendwie die Netzfrequenz erfassen oder die 
Versorgungsspannung analog am PIC.

Was hat es denn mit dem   LVDS Bit auf sich (Low voltage detection) ? 
Hab ich noch nie gehört.
Bitte mal kurze Info, was das ist.

Ansonsten tendiere ich zu der Lösung von Ich(Gast).
Gruß Dirk

von Stefan B. (stefan) Benutzerseite


Lesenswert?


von DerDaOben (Gast)


Lesenswert?

Datenblatt:
http://www.grifo.com/PRESS/DOC/Microchip/PIC18F4620.pdf

Seite 243

Funktioniert bei mir immer zuverlässig. Must aber ziemlich genau 
einstellen  (HLVDL3:HLVDL0).

von Dirk F. (dirkf)


Lesenswert?

HAllo an alle,
nochmals Danke für dir zahlreichen Hinweise.

Also ich werde es folgendermaßem machen:

Jede 100 Takte der Maschine ( also etwa alle 100 Sekunden worst case)
werde ich den Long Zähler auf 3 Speicherstellen (3 x 4 Byte) 
abspeichern.

Beim Einschalten vergleiche ich dann Stelle 1 und 2, bei gleichteit 
nehme ich Stelle 1, bei ungleichheit lade ich die remanente Varriable 
aus Specherstelle 3.
So spare ich zusätzlichen Hardwareaufwand für das Erfassen der 
Versorgungsspannung.


Gruß Dirk

von -Gast XIV (Gast)


Lesenswert?

Dirk Faust schrieb:
> Jede 100 Takte der Maschine ( also etwa alle 100 Sekunden worst case)
> werde ich den Long Zähler auf 3 Speicherstellen (3 x 4 Byte)
> abspeichern.

Kann man machen, es reicht aber ein Flag.

Wenn Platz ist würde ich empfehlen das im EEprom an verschiedenen 
Stellen zu speichern.

von Sam .. (sam1994)


Lesenswert?

Severino R. schrieb:
> 1mF??? Schreibt der Mega mit einem Laser, oder gar mechanisch

Weiß auch nicht warum. Ich konnte es mir auch nicht erklären. Aber so 
groß ist 1mF auch nicht (Bauteilgröße), deswegen hab ich ihn dann 
einfach genommen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.