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
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.
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.
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.
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.
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.