Forum: Mikrocontroller und Digitale Elektronik Probleme mit EEPROM


von Andy (Gast)


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

von ... .. (docean) Benutzerseite


Lesenswert?

BornOut Fuse aktiv?

Ich meine wenn der AVR einfach stirbt während eines Schreibvorganges 
kann es passiern das er wilr im EEPROM schreibt...

von Jey B. (jeybee)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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 ;-)

von Jey B. (jeybee)


Lesenswert?

@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?

von Karl H. (kbuchegg)


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.

von Jey B. (jeybee)


Lesenswert?

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

Villeicht tuts ein grösserer Kondensator als Backupspannungsquelle MIT 
eingeschaltetem BrownOut.

von Karl H. (kbuchegg)


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

von Jey B. (jeybee)


Lesenswert?

Nun denn, wie gesagt, grösserer Cap als Backup

von Andy (Gast)


Lesenswert?

Danke für die zahlreichen Tipps.
Also BO hab ich auf 1,8V und die 500ms müssten eigentlich für 25 Bytes 
auch reichen, oder?

von Jey B. (jeybee)


Lesenswert?

Andy, hast du mal versucht, einen grösseren Kondensator als 
Speisspannungsbuffer zu verwenden? währ halt villeicht nicht schlecht, 
wenn der 800ms bis 1000ms strom liefern kann. Somit hast du sicherlich 
saubere Daten.

von spess53 (Gast)


Lesenswert?

Hi

Wie sieht denn deine Abschalterkennung genau aus?

MfG Spess

von Andy (Gast)


Lesenswert?

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

von spess53 (Gast)


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

von Andy (Gast)


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??

von Micha H. (mlh) Benutzerseite


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.

von Peter D. (peda)


Lesenswert?

Andy schrieb:
> Kann es sein, dass die 1.8V BOD zu wenig sind??

Wer weiß?
Das hängt üblicher Weise vom unbekannten Chip und dessen unbekannter 
Taktfrequenz ab.


Peter

von Andy (Gast)


Lesenswert?

Sorry, hab ich ganz vergessen: ATMega328p bei 20MHz

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> ATMega328p bei 20MHz
Läuft der bei 1,8V überhaupt noch (sinnvoll)?
Laut DB:
1
Speed Grade:
2
0 - 4 MHz@1.8 - 5.5V, 
3
0 - 10 MHz@2.7 - 5.5.V, 
4
0 - 20 MHz @ 4.5 - 5.5V
Du wirst wohl den Brown-Out-Pegel etwas höher setzen müssen...  :-o

von Jey B. (jeybee)


Lesenswert?

Dadurch muss jedoch auch die Kapazität des Bufferkondensators erhoeht 
werden, da der ja viel laengeer den Pegel ueber 4.5V halten muss.

von Andy (Gast)


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??

von Harald (Gast)


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.

von Andy (Gast)


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.

von Harald (Gast)


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.

von Andy (Gast)


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.

von Andy (Gast)


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

von Andy (Gast)


Lesenswert?

Hat jemand vielleicht eine Info für mich??
Besten Dank!

lg

von oszi40 (Gast)


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.

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.