EEPROM defekt?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • EEPROM defekt?

      Moin!
      In meinem Programm kann ich einige Optionen verändern und im EEPROM abspeichern. Beim Programmstart werden dann die aus dem EEPROM gespeicherten Optionen geladen .
      Das hat plötzlich nicht mehr funktioniert. Das Programm startete undefiniert und stürzte ab. Meine Tests haben ergeben, daß sich das EEPROM alle Variablen "merken" konnte- bis auf eine: Die wichtigste.
      Ich habe daraufhin eine neue EEPROM-Variable definiert [dim neu as eram byte] und mit der Startoption verknüpft. Jetzt gehts wieder! Die Voraussetzung dafür ist aber zwingend, daß die alte Eram-variable als
      "toter dummy" in der Variablen-Definition bestehen bleibt. Es ist als hätte das EEPROM an einer bestimmten Stelle ein Leck bekommen und die alte Eram Variable ist der Korken, der das Leck abdichtet.
      Hat jemand für mich eine fachliche Erklärung dafür?
    • Eeprom Daten können falsch sein. Ich baue immer eine Plausibilitätsprüfung ein damit mein Programm bei erkennbar falschen Werten nichts "dummes tut". Den Grund dafür habe ich bisher nicht herausfinden können. Wichtig ist das die Versorgungsspannung beim Zugriff stabil bleibt. Das macht es unsicher beim Stromausfall noch schnell wichtige Daten zu sichern. Und gefährlich bei Einschalten als erstes Daten zu lesen da die Spannung sich noch aufbaut.
      Dann sollte ( so wie ich das Datenblatt verstehe ) das erste Byte nicht benützt werden.
      Dann vertragen sie nur eine gewisse Anzahl an Änderungen. Als Zählervariable sind sie schnell defekt im normalen Betrieb sollte es eigendlich kein Problem sein.

      Eine Frage in die Runde : Wäre es besser den Flash als Ablagespeicher zu benützen?
    • Pluto25 schrieb:

      Als Zählervariable sind sie schnell defekt im normalen Betrieb sollte es eigendlich kein Problem sein.
      und genau das scheint hier auch passiert zu sein. Im Programm ist über eine timer- isr ein backup von einer Zählervariable
      jede Millisek. gemacht worden. Also sollte man das Speicher-Intervall deutlich vergrößern?
      Habe übrigens eben den uC getauscht und die alte eram- zählervariable wieder aktiviert. Funktioniert.
      Beim anderen uC scheint also etwas im EEPROM zerschossen zu sein.
    • Der interne EEPROM ist m.M. nach für eher seltenes schreiben geeignet, z.B. Konfigurationsdaten welche man selten ändert. Für sichere Daten ist ein externer (I2C-)EEPROM besser geeignet, bei diesen werden 10x mehr schreib/lösch zyklen garantiert (100.000 zu 1.000.000).
      Stimmt, die Spannungsversorgung sollte während des EEPROM-Zugriffes stabil sein. Ich füge in die Initialisierungsphase des µC immer eine Wartezeit (wait) ein und frage erst danach den EEPROM nach Daten ab. Habe da noch nie Schwierigkeiten gehabt.

      @Pluto25: Kannst du mir mal die Stelle im Datenblatt genauer definieren, wo steht dass das erste Byte nicht benutzt werden sollte? Das interessiert mich jetzt, habs wohl immer übersehen.
    • @ichbinsmoin: Also wenn Du jede Millisekunde ins EEPROM grschrieben hast, dann ist der Fehler gefunden. Das darf man mit dem EEPROM auf keinen Fall machen, weil es nicht für so viele Schreiboperationen gebaut ist. Das steht im Datenblatt (welchen Controller benutzt Du?) und in der BASCOM-Hilfe unter ‚Memory Usage‘ und unter DIM
      avrhelp.mcselec.com/index.html?dim.htm
      Du musst die Schreibzyklen wesentlich verringern.
      Das Benutzen des ersten Bytes des EEPROMs kann man traditionell damit verhindern, dass man eine erste EEPROM-Variable dimensioniert, die man NICHT benutzt. Früher war das nötig und empfohlen - ich weiß nicht, ob es wirklich immer noch nötig ist.
    • stefanhamburg schrieb:

      ichbinsmoin: Also wenn Du jede Millisekunde ins EEPROM grschrieben hast, dann ist der Fehler gefunden.
      Ok, verstanden! Wieder was dazu gelernt...

      oscar schrieb:

      Für sichere Daten ist ein externer (I2C-)EEPROM besser geeignet

      das hört sich gut an. wollte heute sowieso eine Reichelt-Bestellung machen. Hast Du für mich eine EEPROM Bezeichnung, die sich bei Dir bewährt hat, am liebsten im 8-DIP Gehäuse?
    • Du kannst beruhigt den EEPROM Deines Mikrocontrollers benutzen. Der ist nicht „unsicher“. Nur eben nicht in einer Schleife beschreiben und - um auf Nummer Sicher zu gehen - die erste Adresse als unbenutze Dummyvariable dimensionieren.

      Ansonsten könnte das etwas sein:
      m.reichelt.de/EEPROM-seriell-M…2Bi2c%2Bdil&trstct=pos_15
      Aber warum extern?
    • ichbinsmoin schrieb:

      Wenn mir nach ein paar Wochen das EEPROM abraucht, weil es sich zu oft beschrieben fühlt, wäre das sehr ärgerlich.
      das externe hält nur 10x so lang, wurde ja erwähnt. Du musst deine Speicherstrategie optimieren, dann hält das interne auch ein Leben lang. Schreiben ins eprom, nur wenn sich der Wert verändert hat. Schreiben ins eprom, nur wenn durch Abschalten ein Datenverlust droht.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • ichbinsmoin schrieb:

      ja, habe ich jetzt gemacht. nun wird das EEPROM nur ca. alle 10min beschrieben. Ob das für ein "Leben lang " reicht?
      Deine Strategie stimmt nicht!

      Man legt einer Speicherzelle an, welche auf eine andere Speicherzelle verweist.
      Auf die verwiesene Speicherzelle werden deine Daten geschrieben.
      Nach dem Schreiben liest du den Wert. Wenn der nicht stimmt, dann ist die Zelle defekt und du erhöhst du den Zeiger auf die nächste Speicherzelle schreibst den neuen Zeigerwert und schreibst den Wert nochmal.
      Code first, think later - Natural programmer :D
    • Eine andere Möglichkeit wäre ein DS1307 (RTC- Clock). Ich weiß, die Ganggenauigkeit des Uhrenchips ist nicht sooo genau, aber der Chip hat einen batteriegepufferten Speicherbereich, der nach meinem Wissen so ziemlich unbegrenzt beschrieben werden kann. Die Pufferbatterie hält Jahre und könnte auch so eingebaut werden, dass sie austauschbar wäre.

      Gruß Christian
      Wenn das die Lösung ist, möchte ich mein Problem wieder haben.
    • gut, daß wir nochmal drüber gesprochen haben.

      also six1 ich hab das noch nicht so ganz verstanden.

      dim x as eram byte
      dim y as byte
      do
      if y <>x then
      x=y
      end if
      loop

      so hatte ich das bisher gemacht. Veränderungen bei y können aber öfter mal vorkommen.
      Wie muss es nun richtig sein? Sagen wir mal für 20 Jahre Eprom Ruhe :D
    • Normalerweise brauchst du eine Datensicherung doch nur, wenn dein ram keinen Strom mehr hat und die Daten vergessen würde. Also musst du die Daten kurz vor dem Stromabschalten sichern. So hast du automatisch die minimale Speicherrate für dein eram, weniger geht nicht. Das wurde hier im Forum schon mal durchgekaut, jetzt könntest du dich auch mal dran versuchen :D
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Wenn Du die Werte wegen Stromausfall behalten musst, dann ist das etwas anderes und lässt sich simpel lösen. Dazu wird der MC mit einem größeren Elko (ab ca. 470uF) mit einer Diode entkoppelt gesichert. Ein Widestandszweig wird vom Analogkomperator überwacht und löst einen Interrupt aus, wenn dort der Wert gegen 0V geht. Dann wird angenommen das die Stromversorgung weg ist und wichtige Werte in den EEPROM gesichert.
      Es gibt sicher auch den Weg via Pin Change und andere Ansätze. Der beschriebene funktioniert bei mir super.
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • tschoeatsch schrieb:

      Normalerweise brauchst du eine Datensicherung doch nur, wenn dein ram keinen Strom mehr hat und die Daten vergessen würde.
      stimmt! Wenn aber abrupt die Spannungsversorgung des uC wegbricht, kann ja nicht mehr die EPROM Speicheroperation ausgeführt werden.
      Ich bräuchte dann noch 1s . Der Denkanstoss von Monkye fehlte mir die ganze Zeit. Mit der Lösung habe ich alle Fliegen mit einer Klappe:
      Keine weiteren externen Speicherbausteine und minimalen Speicherstress fürs EPROM.

      monkye schrieb:

      Ein Widestandszweig wird vom Analogkomperator überwacht und löst einen Interrupt aus
      Das habe ich noch nicht so ganz hardware-technisch verstanden. Kann man nicht die Spannung am ADC wie auf dem Bild überwachen?
      Dateien