mikrocontroller.net

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


Autor: Dirk F. (dirkf)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: -Gast XIV (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: -Gast XIV (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Besserwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: DerDaOben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk F. (dirkf)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: DerDaOben (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Dirk F. (dirkf)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: -Gast XIV (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.