mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit EEPROM


Autor: Andy (Gast)
Datum:

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

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BornOut Fuse aktiv?

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

Autor: Jey Bee (jeybee)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Jey Bee (jeybee)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Jey Bee (jeybee)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Jey Bee (jeybee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun denn, wie gesagt, grösserer Cap als Backup

Autor: Andy (Gast)
Datum:

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

Autor: Jey Bee (jeybee)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie sieht denn deine Abschalterkennung genau aus?

MfG Spess

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich messe die Spannung über einen Spannungsteiler am AD-Pin.

Autor: spess53 (Gast)
Datum:

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

Autor: Andy (Gast)
Datum:

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

Autor: Micha H. (mlh) Benutzerseite
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, hab ich ganz vergessen: ATMega328p bei 20MHz

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Jey Bee (jeybee)
Datum:

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

Autor: Andy (Gast)
Datum:

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

Autor: Harald (Gast)
Datum:

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

Autor: Andy (Gast)
Datum:

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

Autor: Harald (Gast)
Datum:

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

Autor: Andy (Gast)
Datum:

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

Autor: Andy (Gast)
Datum:

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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand vielleicht eine Info für mich??
Besten Dank!

lg

Autor: oszi40 (Gast)
Datum:

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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.