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
Gast
#1883698
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.
Gast
#1883708
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.
Gast
#1883714
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.
Gast
#1883733
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.
Gast
#1883749
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).
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.
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
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
Gast
#1884947
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).
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
Gast
#1886677
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.
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
Bitte melde dich an, um einen Beitrag zu schreiben.