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
BornOut Fuse aktiv? Ich meine wenn der AVR einfach stirbt während eines Schreibvorganges kann es passiern das er wilr im EEPROM schreibt...
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
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?
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
> 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
Dadurch muss jedoch auch die Kapazität des Bufferkondensators erhoeht werden, da der ja viel laengeer den Pegel ueber 4.5V halten muss.
@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.
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.