PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mega128 EEPROM Fehler



Skragan
18.03.2009, 09:42
Hallo User,

bei einer Hardware macht ein EEPROM Probleme. Nach ungefähr 3000 Betriebsstunden mit schätzungsweise 3000-5000 Schreibzyklen und ungefähr doppelt so vielen Lesezyklen verliert das EEPROM seine Inhalte bzw. hat einfach Quatsch drin. Es werden regelmäßig die selben Speicherstellen beschrieben. Hat da jemand eine Idee, woran es liegen könnte ?

Danke für Hilfe !

Ceos
18.03.2009, 09:56
spannungsversorgung stabil, keine unterspannung die zu lese oder schreibfehlern führen kann, dauerbetrieb oder ein und ausschalten ?!

ich kenn mich nur soweit aus , dass manchmal probleme auftauchen wenn die spannung zu niedrig ist, wenn ich mal nen wackligen draht hab aufm steckbrett z.B. gehen auch schonmal die ersten 2-3 bytes flöten weil er mehrmals versucht zu lesen oder zu schreiben

eventuell ein paar details mehr zur schaltung und der verwendung (also gut abgeblockte versorgung, bzw. dauerbetrieb oder "ständiges" an/aus)

Skragan
18.03.2009, 10:51
Betrieb am Bordnetz (24V), Spannungsversorgung über Schaltwandler gut abgeblockt und gepuffert: ~2500µF an 24V mit Überspannungsschutz, Schaltwandler auf 5V, 220µF und vor dem Prozessor nochmal Tiefpass 5R/200nF Kerko. Da kann (eigentlich) nichts mehr passieren. Betrieb dauerhaft (also mehrere Stunden für gewöhnlich), Spannungseinbrüche nur im Bereich, daß die Spannungsversorgung für den Controller gewährleistet ist.

Einzige Möglichkeit: Was passiert während eines nicht abgeschlossenen Schreibzyklus, wenn der BrownOut kommt ?

Alle Betriebsdaten werden bei Programmstart ins RAM geladen und nur auf Tastendruck verändert. Jede Stunde werden lediglich 2 words ins EEPROM geschrieben, eine Abspeicherung aller Betriebsdaten erfolgt nur auf Tastendruck, während dessen ein Verlust der Betriebsspannung nicht erfolgt. Der Fehler verändert aber nicht nur die beiden words, sondern auch andere Speicherstellen sind betroffen.

Besserwessi
18.03.2009, 21:05
Ein passend konfigurierter Brownout-detektor sollte die meisten EEPROM Probleme lösen.
Ein Problem könte sein, das der brownout detektor wohl AVcc kontrolliert, das EEPROM vermutlich aber von Vcc gespeist wird. Wenn da keine gute Verbindung ist, könnte es sein, das Vcc zu schlecht wird, bevor AVcc zu niedrig ist.

Bei einem nicht abgeschlossenen Schreibzyklus könnten ein paar zusätzliche Bits gesetzt sein. So weit ich weiss, wird erst das byte gelöscht (alle bits gesetzt), und dann der eigentliche Wert reingeschrieben.

Wenn man ganz sicher gehen will, müßte man die Versorgung gut puffern, und vor dem EEPROM schreiben die Spannung von Hand testen.

Skragan
23.03.2009, 17:33
Wäre es möglich, daß bei einem Schreibprozess via BASCOM (also z.B. RAM in ERAM Variable) ein Interrupt dazwischenkommt ? Oder schaltet BASCOM automatisch den Interrupt aus ?

thewulf00
23.03.2009, 18:31
Während des Schreibvorgangs per ISP ist der Resetpin auf LOW, so dass kein Programm ausgeführt werden kann. Das dient dazu, den IC in den Programmiermodus zu bringen.

Skragan
24.03.2009, 08:59
Ja, das ist klar. Ich meinte einen EEPROM Schreibvorgang, wenn das Programm selbst eine Variable in das EEPROM schreibt ;)

Ceos
24.03.2009, 09:11
theoretisch unmöglich, er setzt zum schreiben sogar 4 zyklen lang die main clock ausser betrieb um derartiges zu vermeiden!

aber du kannst doch einfach mit cli() und sei() deine eeprom write methode umgeben um es herauszufinden ... sonst wie gesagt einfach mal versuchshalber nen ganz dicken elko mit ner vorgeschalteten diode damit der strom vom elko auch NUR in den controller geht

alternativ, kannst du ja die daten doppelt speichern(2 relativ weit voneinander entfernte addressen), mit ner CRC und nach dem auslesen die daten auf gültigkeit überprüfen und falls notwendig neu schreiben oder nen fehler ausgeben!

Skragan
24.03.2009, 09:30
Es sieht im Moment so aus wie in Bild 1, Du schlägst also Bild 2 vor ?

Ceos
24.03.2009, 10:53
ja , genauso stell cih mir das vor, wenn von aussen die versorgung einbricht, kann die peripherie den strom nicht aus dem elko beziehen, ALLERDRINGS würd ich AVCC ebenfalls hinter die diode packen, denn einige der atmels sind intern verbunden, also VCC und AVCC verbunden

PS: ob ne schottky da so nen unterschied macht ? der spannungsabfall von 0.7V bleibt doch gleich oder ?

ausserdem wirds je nach anliegender schaltung nochmal etwas komplliziert, wenn du z.B. ausgangpins hast müsste man noch überprüfen ob die peripherie da nicht auch strom ziehen könnte und dann wirds umständlich, denn dann geht nur pullup per µC und pulldown per wiederstand wenn du eine diode einsetzten solltest

Skragan
24.03.2009, 10:55
AVcc kann ich leider nicht hinter die Diode legen, weil ich die 5V als externe Referenz verwende :(

Ceos
24.03.2009, 11:00
in deiner schaltung ist AREF aber nur abgeblockt!

sonst leg AREF auch hinter die diode

kontrollier einfach mal deinen atmel, ob AVCC und VCC verbunden sein, wenn nicht ists doch kein problem

Skragan
24.03.2009, 12:00
Der Aref Pin ist lediglich nochmal separat abgeblockt, der hat aber mit der AVcc Referenz nur in sofern zu tun, als das dort die Spannung intern draufgeschaltet wird. Die von mir verwendete Referenz ist AVcc, also die +5V Betriebsspannung.

Das Problem, wenn beide (AVcc und Vcc) über eine Diode angeschlossen werden, ist, daß die A/D Eingänge bei 4,7V dann schon "voll" sind - und in der Hardware kann ich (zumindest nicht kurzfristig) die Eingänge auch noch hinter die Diode legen.