Probleme mit EEPROM

Gast #1756442
Lesenswert?

Hallo,
Ich habe ein Problem mit meiner Elektronik. Ich habe ein Programm 
geschrieben, dass beim Ausschalten noch schnell Daten ins EEPROM 
schreibt. D.h. das Programm erkennt (über Vcc am AD-Pin) ein Abschalten 
der Betriebsspannung (über C gepuffert) und schreibt dann aktuelle Daten 
ins EEPROM (ca. 25 Byte) --> Zeit dafür ca. 500ms. Funktioniert auch 
wunderbar - nur kommt es manchmal vor, dass die gespeicherten Daten 
nicht stimmen, d.h. es stehen irgendwelche (unsinnigen) Daten im EEPROM. 
Woran kann das liegen?
Danke schon im Voraus für eure Antworten!

lg
Andy
#1756455
Lesenswert?

Wenn du das so arangieren willst, musst du auf JEDEN fall das BrownOut 
Bit deaktivieren, da der Controller sich sonst während dem Ausschalten 
und somit während dem Schreiben ins EEprom ständig selber resettet.

Geht es eigentlich um den Internen EEprom des AVRs? Oder schreibst du 
dein Zeug auf ein externe EEprom?
Wenn extern, dann kann es sein, dass dieses "früher" ausschaltet als der 
AVR und somit nicht alles richtig mitbekommt.



Greez Jey
Moderator (Firma: Titel) Persönliche Seite #1756456
Lesenswert?

Das haben andere auch schon beobachtet:
Beitrag "Falsche Werte im EEPROM"
Beitrag "EEprom Schreib / Lese Problem ?"

Ursache:
Bei einem Powerfail kippen zuerst die Adressbits des 
EEPROM-Adresspointer weg (in Richtung 0), aber die Ladungspumpe zum 
Löschen des EEPROMs lebt noch wesentlich länger. Und so können en 
passant x-beliebige EEPROM-Zellen ein wenig "angelöscht" werden...

Abhilfe: BurnOut, ich meine BrownOut einschalten ;-)
#1756462
Lesenswert?

Jey Bee schrieb:
> @Lothar:  Warum den BO einschalten? wenn der eingeschaltet wird ist es
> ja bei Andys schaltung so, dass der Controller sich während dem
> schreiben resettet, oder verstehe ich das falsch?

Immer noch besser, als wenn Teile des µC ihre Arbeit schon eingestellt 
haben und andere Teile noch arbeiten. Das Verhalten wird in diesen 
Fällen dann nämlich zur reinen Lotterie.

Da ist es mir immer noch lieber, die Brown Out Detection schaltet den 
ganzen Chip auf einmal ab.
#1756470
Lesenswert?

Jey Bee schrieb:
> Nunja, das löst aber noch immer nicht Andys problem, oder?
> Bei ihm MUESSEN die Daten ja ins EEprom....

Was willst du tun, wenn die Zeit dazu nicht reicht?

Wenn die gesicherten 500ms bei eingeschalteter BrownOut nicht reichen, 
dann muss er sehen wie er
* entweder die Zeit hochtreibt
* oder die Datenmenge reduziert. Es spricht ja nichts dagegen, Werte
  die sich nur selten ändern sofort ins EEPROM zu schreiben anstatt
  bis zum letztmöglichen Zeitpunkt zu warten
Gast #1756570
Lesenswert?

Hi

>Also, ich messe die Spannung über einen Spannungsteiler am AD-Pin.

Das habe ich mir schon gedacht gedacht.

Es ist aber u.U. günstiger vor den Pufferkondensator eine Diode zu 
schalten und die 'Rohspannung' davor zu detektieren. Ist aber vom 
(unbekannten) Schaltungsaufbau abhängig.

MfG Spess
Gast #1756571
Lesenswert?

Was mir noch aufgefallen ist: Die Daten gehen meistens dann verloren, 
wenn während des Ausschaltvorgangs wieder eingeschaltet wird. D.h. der 
Controller könnte gerade beim Ausschalten sein und dann kommt aber 
wieder sofort eine Betriebsspannung und er schaltet sofort wieder ein. 
Kann es sein, dass die 1.8V BOD zu wenig sind??
Persönliche Seite #1756588
Lesenswert?

Andy schrieb:
> Was mir noch aufgefallen ist

Ach, wir haben hier wieder einmal ein Ratespiel. Wie wär's, wenn Du 
gleich Deinen Aufbau richtig beschreibst? Ein Schaltplan und eine 
Analyse, wann genau Daten verloren gehen?
Bei mir und vielen anderen funktioniert das Schreiben beim Ausschalten, 
also stimmt bei Dir was nicht. Beschreib's genau und keiner muß mehr 
raten.
Gast #1756770
Lesenswert?

@Lothar: Das ist aber komisch - in meinem Datenblatt vom 328p steht: 
0-20MHz @ 1.8V-5.5V aber auf dem aktuellen sind dein Angaben zu finden. 
Soll das etwa heißen, ich betreibe den Atmel außerhalb der 
Spezifikation??
Gast #1756781
Lesenswert?

>Das ist aber komisch - in meinem Datenblatt vom 328p steht:
0-20MHz @ 1.8V-5.5V

Sind das die Angaben von der ersten Feature-Seite des Datenblattes? Da 
muss man natürlich etwas genauer studieren.

Ich habe den Thread nicht Satz für Satz durchgelesen, aber pufferst Du 
mit deinem Kondensator etwa die VCC-Seite? Bei einem solchen Spielchen 
puffert man die Versorgungsseite VOR dem Stabi bzw. Buck-Converter. 
Damit erreicht man stabile Verhältnisse während der Abschaltphase (den 
Brownout kann man lassen wo er in jeder Betriebsart sinnvoll ist), 
außerdem haben einge AVRs Probleme beim Schreiben in das interne EEPROM 
bei instabiler VCC während des Schreibens.
Gast #1756791
Lesenswert?

Stimmt. Hinten stehts dann anders drinnen (20MHz nur bei 4,5-5,5V). Kann 
es (außer vielleicht dem Problem mit dem EEPROM) noch zu anderen 
Störungen/Defekten kommen, wenn ich den Atmel mit 20MHz @ 3,3V treibe. 
Und glaubt ihr, dass die Störung vom EEPROM wirklich von der zu hohen 
Taktrate kommen kann??

Ich buffere natürlich die Spannung auf der Seite vor dem Linearregler.
Gast #1756796
Lesenswert?

20MHz @ 3.3V ist undefiniert, und das ist im wahrsten Sinne des Wortes 
zu verstehen. Da kann man auch nichts schönreden.
Nach der Klärung dieses Baustelle würde ich auf jeden Fall per Scope 
beobachten, wie sich die Versorgungsspannung im Moment des Ausschaltens 
som verhält. Gibt es kurz vor Schluss noch unliebsame Effekte? Du 
sagtest ganz am Anfang, du würdest die VCC per AD-Kanal messen? Wie 
willst Du da den nahenden Ausfall erkennen? Das ist doch ein Widerspruch 
in sich! Du müsstest auf jeden Fall die Spannung vor dem Stabi messen.

Kleiner Wink am Rande:
Ich denke, die Leute vor mir sind auch schon etwas genervt, da kein 
Schaltplan und keine genaue Strategie deinerseits veröffentlich wurde.
Gast #1756842
Lesenswert?

Tut mir Leid, ich habe nur gerade nicht die Möglichkeit den Schaltplan 
online zu stellen. Im Wesentlichen betreibe ich den Atmel nur über einen 
LM2936 (3,3V) an 48V. Messen tue ich die 48V über einen Spannungsteiler 
mit einem AD-Pin. Wenn die Spannung unter 46V (ungefähr) fällt, schalte 
ich die Last. Dies geschieht, indem ich ein PWM-Signal auf 0% DutyCycle 
stelle.
Das wars eigentlich.
Gast #1757970
Lesenswert?

Hallo,
eine Frage hätte ich noch: Kann es sein, dass das BOD-Level 1,8V 
eventuell für EEPROM-Schreibzugriffe schon zu gering ist, und dass ich 
2,7V auswählen muss? Würde das einen Sinn machen? Ich habe nämlich mit 
den 2,7V bessere Ergebnisse erzielt! Nur, ist das plausibel??

lg
Gast #1758545
Lesenswert?

Mach doch mal die Gegenprobe: schreibe zum Test so viele Zahlen wie Du 
kannst in den Speicher und prüfe dann wieviel gesund angekommen sind. 
Damit könntest Du den brauchbaren Bereich eingrenzen.
Wenn natürlich zwischendurch wieder eingeschaltet wird, bekommt Dein 
System einen Reset? Dann ist das alte Programm PENG weg.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren