Forum: Mikrocontroller und Digitale Elektronik Atmega1284p Eeprom verändert einen Wert


von Johnny S. (sgt_johnny)


Lesenswert?

Ich habe ein Problem mit dem Atmega1284p.


Es gibt diverse Geräte welche mit dem Atmega1284p als Prozessor laufen. 
Im Konfigurationsmodus wird die Konfiguration (88byte Daten + 2byte 
Flag) ins Eeprom geschrieben und der Inhalt des EEprom verifiziert. Beim 
normalen Start der Geräte werden die beiden Byte Flags ausgewertet 
(diese müssen beide 0x01) enthalten damit das Gerät als "Konfiguriert" 
gilt. Sind diese Flags gültig, werden die 88byte ausgelesen und per CRC 
übeprüft. Ist der CRC Falsch, oder sind die Flags nicht gesetzt wird 
eine Fehlermeldung angezeigt (per LED).

Nun habe ich das Problem das die Geräte im Betrieb die "Konfiguration" 
verlieren, was sich durch blinken der LED's zeigt. Dies passiert 
willkürlich und in keinem belegbaren Muster.

In der Software gibt es bis auf den Konfigurationsmodus nur LESE 
Zugriffe auf das EEPROM. Der Konfigurationsmodus ist nur auf spezielle 
Weise erreichbar, die Chance das die Geräte diesen "unabsichtliche" 
betreten ist sehr unwarscheindlich, vorallem da vor dem schreiben die 
gesetzen Werte auf korrektheit geprüft werden.

Ein spezieller Modus darf das Gerät auf unkonfigruiert setzen, hierzu 
wird 00 in die Flag-Bytes geschrieben.

Einie tests ergaben, das es es jeweils nur die Flags "zerstört", die 
Datenbytes (Adresse 0x10 aufwärts) sind Einwandfrei, nur die Flags in 
0x08, 0x09 werden zerstört was bedeuted das diese 0xFF aufweisen. Der 
"ResetModus" kann auch nicht die Ursache sein, da dieser 0x00 schreiben 
würde.

Hat jemand eine Idee wie so etwas zu Stande kommen kann?

von Joachim B. (jar)


Lesenswert?

BOD gesetzt?

Das EEPROM scheint mir sensibler auf Unterspannung zu sein als das Flash

von Stefan F. (Gast)


Lesenswert?

Ja, würde ich auch sagen.

Das interne EEprom verliert oft sogar die Daten, wenn man nur lesend 
darauf zugreift und dabei die Spannungsversorgung einbricht.

von Peter D. (peda)


Lesenswert?

Für die Nutzung des EEPROM muß zwingend das BOR aktiviert sein.

von Gerhard O. (gerhard_)


Lesenswert?

Vielleicht geht die Versorgungsspannung zu langsam hoch oder nieder und 
der Brownout ist nicht konfiguriert. Versuch das mal um zu sehen ob sich 
da was ändert. Das wäre das erste wonach ich ausschauen würde. Lies auch 
das Datenblatt diesbezüglich. Langsame Stromversorgung hat nicht das 
erste Mal einigen Leuten Probleme bereitet.

Ich arbeite viel mit dem 1284 und kann Dein Problem mit dem EEPROM nicht 
nachvollziehen. Ist 100% zuverläßig. Brownout ist bei mir allerdings 
immer konfiguriert und eingeschaltet.

Notfalls hilft ein externer uC Supervisor wie ein MCP120.

von Einer K. (Gast)


Lesenswert?

Ich stimme den Vorrednern unumwunden zu:
BOD Fuses aktivieren.

Auch bitte den Takt nicht außerhalb der Spezifikation treiben.

von Andreas B. (bitverdreher)


Lesenswert?

Auch wenn es noch nicht vom jedem gesagt wurde:

Arduino Fanboy D. schrieb:
> Ich stimme den Vorrednern unumwunden zu:
> BOD Fuses aktivieren.

Ich bin gerade auch darauf reingefallen. Mit langsamen Anstieg der 
Speisespannung und ohne BOD verliert man reproduzierbar die EEprom Werte 
schon beim Einlesen am Anfang des Programms (hier Tiny841).

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Auch wenn der Thread schon sehr alt ist:

Einen externen Supervisor oder Reset-IC braucht man bei den AVRs nicht, 
denn genau dazu ist die BOD ja da. Man muß sie eben nur einschalten.

Ich hatte beim AVR auch erst ein einziges Mal Probleme mit korrupten 
EEPROM-Daten und das war ein logischer Fehler im Programm (Signaturbytes 
als Erkennungszeichen für ein frisch initialisiertes/leeres EEPROM am 
Anfang des Löschzyklus geschrieben und nicht am Ende, das gab dann 
Probleme wenn dieses Löschen durch einen Reset oder Abschalten 
unterbrochen wurde weil dann Datenreste im EEPROM zurückblieben). 
Niemals durch Probleme mit der Betriebsspannung.

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