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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Johnny S. (sgt_johnny)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
BOD gesetzt?

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

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Für die Nutzung des EEPROM muß zwingend das BOR aktiviert sein.

von Gerhard O. (gerhard_)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Ich stimme den Vorrednern unumwunden zu:
BOD Fuses aktivieren.

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

von Andreas B. (bitverdreher)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

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]
  • [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.