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
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
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 ;-)
@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?
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.
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.
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
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.
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
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??
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.
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
@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??
>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.
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.
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.
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.
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
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.