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?
BOD gesetzt? Das EEPROM scheint mir sensibler auf Unterspannung zu sein als das Flash
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.
Für die Nutzung des EEPROM muß zwingend das BOR aktiviert sein.
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.
Ich stimme den Vorrednern unumwunden zu: BOD Fuses aktivieren. Auch bitte den Takt nicht außerhalb der Spezifikation treiben.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.