mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik bites kippen um im eeprom


Autor: Trax Xavier (trax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ein kleines Problem mit meinem ATmega644 und zwar wen ich ihn 
länger (über nacht) aus lasse kippen mir immer wieder mahl bits im 
eeprom um!
Der sitzt auf so einem AVR-NET-IO Board als Netzteil ist da ein eher 
Reuiges Steinzeit Trafo Netzteil (aber schon mit einem recht tutem gabs 
das problem, zudem hat die platime ja e'h nen eigenen gleichtichter, 
elko und linearregler).
Ne idee woran das liegen kann?
oder gibts wo ein code sample das mir paritätzdaten fürs eeprom 
errechnet speichert und im flipp fall wiederherstellt?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Habe ein kleines Problem mit meinem ATmega644 und zwar wen ich ihn
>länger (über nacht) aus lasse kippen mir immer wieder mahl bits im
>eeprom um!

brown out eingeschaltet?

Oliver

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>lasse kippen mir immer wieder mahl bits
>Reuiges Steinzeit Trafo Netzteil
>recht tutem gabs das problem
>e'h nen eigenen gleichtichter
>paritätzdaten
>flipp fall wiederherstellt

Mann, wie sieht denn der Programmcode aus, so ähnlich? Oder ist da ein 
"beknateter Combiler" am Werk, der alles in lesbare Form "pringt".

Es wird immer kolportiert, daß über die Einstellungen zum brown-out 
alles machbar ist. Forsch doch mal in dieser Richtung.

Autor: Trax Xavier (trax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>brown out eingeschaltet?
emm... nö
wäre aber besser oder?

Prog code ist der SmartWebserver aus der Codesammlung

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wäre aber besser oder?

Wenn Atmel das schon von sich aus so ins Datenblatt schreibt, könnte es 
einen Grund dafür geben :-)

brwon out ist bei AVR-eeprom-Nutzung ein Muss. Ohne geht es nicht.

Oliver

Autor: Chris D. (myfairtux) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brown-out wurde ja schon genannt.

Ich zurre das aber trotzdem immer schön mit CRC fest und nehme 
"Best-3-of-5". Zum Schluß dann noch den EEPROM-Zeiger auf eine 
ungenutzte Stelle versetzen.

Also:

1.) Brown-Out
2.) CRC bilden
3.) Mehrfach speichern und dann die Mehrheit gewinnen lassen
4.) EEPROM-Zeiger auf ungenutzte Zelle zeigen lassen

Dann kann man sich auch recht gut auf die Daten verlassen :-)

Chris

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dann kann man sich auch recht gut auf die Daten verlassen :-)

Du hast doch sicherlich auch gemessene statistische Daten, die 
nachweisen, wie oft Maßnahme 2.) und 3.) fehlerhafte Daten korrigieren. 
Also, wie häufig kommt das vor?

Oliver

Autor: Chris D. (myfairtux) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver wrote:
>>Dann kann man sich auch recht gut auf die Daten verlassen :-)
>
> Du hast doch sicherlich auch gemessene statistische Daten, die
> nachweisen, wie oft Maßnahme 2.) und 3.) fehlerhafte Daten korrigieren.
> Also, wie häufig kommt das vor?
>
> Oliver

Naja, ich habe hier meine, zugegebenermaßen geringe, Erfahrung. 
Wirkliche statistische Daten gibt es bei mir (leider) nicht.

Meine AVRs müssen in recht stark verseuchten Umgebungen 
(Industriemaschinen) zurechtkommen und nicht immer kann für eine 
korrekte Schirmung und Abblockung der Eingänge/Stromversorgung gesorgt 
werden.

Zu 2.): Ja, es kommt durchaus schon vor, dass die CRC eines Blocks 
angesprochen hat, weil ein Bit gekippt war. Da ist man froh, wenn man 
noch Sicherheitskopien (bei mir vier) hat, auf die man zurückgreifen 
kann.
Bei entsprechenden Updates der Steuerungen hat man über ein bis zwei 
Jahre hinweg immer mal wieder so etwas im Fehlerspeicher (ja, der ist 
auch mit CRC im EEPROM ;-)

Noch zu 3.) CRC ist schön, hilft mir aber nicht so viel. Denn die 
Erkennung eines Fehlers ist eine schöne Sache. Die Anlage benötigt aber 
die Daten.
Was auch oft vergessen wird: Redundanz ist gerade beim Schreiben des 
EEPROMS wichtig. Was mache ich, wenn mir der AVR beim Schreiben des 
Blocks abschmiert? Mit den Backups habe ich zumindest die alten Werte in 
korrekter Form.
Ist natürlich auch eine Frage der Menge der Daten, schon klar.

Genau deswegen hat man immer zwei Sicherungskopien. Murphy schlägt 
nämlich immer dann zu, wenn gerade das Backup gefahren wird und nimmt 
(in meinem Fall) beide Festplatten mit ins Nirvana.
Da freut man sich dann ehrlich über die dritte im Bankschließfach ;-)

Zu 4.) Da hatte ich mal Probleme mit AVRs, die oft ein und ausgeschaltet 
wurden. Irgendwie zerschoss es immer die Stelle, auf die der Zeiger nach 
der letzten Operation gezeigt hatte - warum auch immer.
Nach Verlegung des Zeigers ganz ans Ende war Ruhe.
Seitdem baue ich das ein - schaden kann es wohl nicht.

Seit ich diese Punkte beachte, gab es keinen einzigen (teuren) Ausfall 
wegen falscher EEPROM-Daten mehr. Letztlich zählt bei mir das.

Chris

Autor: Trax Xavier (trax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HAbe mal broun out an gemacht,
wie kannn ich den "EEPROM-Zeiger auf ungenutzte Zelle zeigen lassen
"?
Ich mache die zugriffe mit eeprom_read_byte, oder _word oder so.

Ich brauche die ganzen 2K oder zumindest das meiste mit 1K keine chanse, 
die ganzen labels/LCD screans/roules meines webservers sind etwas 
platzhungrig,
512 byte für redundanz könnte ich entberen wens da nen fertigen code 
gäbe.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> und zwar wen ich ihn länger (über nacht) aus lasse
> kippen mir immer wieder mahl bits im eeprom um!
Das "Umkippen" ist ein uralter AVR-Fehler, und zwar kippen dir nur Bits 
in Richtung '1' um (vereinfacht gesagt: die werden gelöscht). Das 
passiert aber nicht im ausgeschalteten Zustand, sondern genau beim 
Ausschalten (die Ladungspumpe wird eingeschaltet und der EEPROM-Zeiger 
kippt um). Nur merkst du es erst beim nächsten Wiedereinschalten.

Abhilfe wie gesagt: Brown-Out einschalten.

> wie kannn ich den "EEPROM-Zeiger auf ungenutzte Zelle zeigen lassen"?
Das hilft nichts. Denn genau dieser Zeiger geht als erstes in die 
Binsen, wenn die Spannung wegbricht.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Zu 2.): Ja, es kommt durchaus schon vor, dass die CRC eines Blocks
>angesprochen hat, weil ein Bit gekippt war. Da ist man froh, wenn man
>noch Sicherheitskopien (bei mir vier) hat, auf die man zurückgreifen
>kann.
>Bei entsprechenden Updates der Steuerungen hat man über ein bis zwei
>Jahre hinweg immer mal wieder so etwas im Fehlerspeicher (ja, der ist
>auch mit CRC im EEPROM ;-)

Danke für die Info.

Oliver

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Gefahr besteht, daß Daten gerade geschrieben werden, wenn die 
Betriebsspannung wegbricht, muß man die Spannung überwachen, genug 
Leistung für das Wegspeichern einiger Bytes in einem Kondensator puffern 
und das Schreiben von Daten unterbinden, wenn die Spannung nicht mehr 
reicht. Dann kann man auch davon ausgehen, daß die geschriebenen Daten 
richtig sind. Bei Schaltungen, die von einem Netztrafo versorgt werden, 
kann man auch die Impulse der Wechselspannung mitzählen. Hören sie auf, 
muß das EEPROM-Schreiben gezielt abgebrochen werden, also das 
angefangene Speichern gegebenenfalls beenden und dann den Controller 
anhalten oder was auch immer.

Autor: Chris D. (myfairtux) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller wrote:

>> wie kannn ich den "EEPROM-Zeiger auf ungenutzte Zelle zeigen lassen"?
> Das hilft nichts. Denn genau dieser Zeiger geht als erstes in die
> Binsen, wenn die Spannung wegbricht.

Wie oben geschrieben: meine Erfahrungen sehen da anders aus.
Wenn der Controller abschmiert, ist die Zelle, auf die der Zeiger zeigt, 
besonders gefährdet.

Wenn die Spannung komplett wegbricht, tut einem eh nix mehr weh ;-)

Chris

Autor: Chris D. (myfairtux) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Travel Rec. wrote:
> Wenn die Gefahr besteht, daß Daten gerade geschrieben werden, wenn die
> Betriebsspannung wegbricht, muß man die Spannung überwachen, genug
> Leistung für das Wegspeichern einiger Bytes in einem Kondensator puffern
> und das Schreiben von Daten unterbinden, wenn die Spannung nicht mehr
> reicht. Dann kann man auch davon ausgehen, daß die geschriebenen Daten
> richtig sind. Bei Schaltungen, die von einem Netztrafo versorgt werden,
> kann man auch die Impulse der Wechselspannung mitzählen. Hören sie auf,
> muß das EEPROM-Schreiben gezielt abgebrochen werden, also das
> angefangene Speichern gegebenenfalls beenden und dann den Controller
> anhalten oder was auch immer.


Alles richtig. Das hilft einem aber nur nix, wenn der Controller direkt 
mit abstürzt. Und eine halb geschriebene Konfiguration hilft zumindest 
in meinen Fällen nicht viel. Da ist die alte dann besser.

Ein "Dann kann man auch davon ausgehen" reicht zumindest bei mir nicht - 
ich muss mich darauf verlassen können und das war bisher öfter nicht der 
Fall.

Chris

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.