mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega8 Variablen bei power down in EEPROM speichern


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe einen ATmega8 mit Codevision programmiert. Mit ein paar Tastern 
verstelle ich irgendwelche Werte. Um diese ab zu speichern hatte ich 
schon einmal bei einer anderen Schaltung zusätzliche Taster zum 
abspeichern verbaut. Ist mir aber zu lästig auf speichern zu drücken.

Jetzt kommt mir die Idee ob ich nicht über Registerabfrage die Werte 
automatisch in das EEPROM abspeichern kann, wenn die Spannung 
abgeschaltet wird. Ist das evtl. über MCUCSR (BORF) möglich?

Würd mich freuen wenn jemand da ne Idee hat oder mir einen 
Programmausschnitt zeigen kann.


Danke schon einmal im vorraus
Daniel

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ist das evtl. über MCUCSR (BORF) möglich?

Nein. Du musst deine Versorgungsspannung überwachen und rechtzeitig 
abspeichern. Wie das am besten geht, hängt von deiner Stromversorgung 
ab.

MfG Spess

Autor: DC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das mal so gelöst: ein Elko versorgt den AVR noch einige 
Sekunden mit Strom. Zusätzlich geht die Betriebsspannung vor dem Elko in 
einen Port. Sobald der auf low ist speichert das Programm die Werte ab.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:
> Jetzt kommt mir die Idee ob ich nicht über Registerabfrage die Werte
> automatisch in das EEPROM abspeichern kann, wenn die Spannung
> abgeschaltet wird. Ist das evtl. über MCUCSR (BORF) möglich?

Hallo Daniel,

so nicht - üblicherweise überwacht man schon die Eingangsspannung des 
Netzteils, um früh genug gewarnt zu werden. Die Warnung löst einen 
Interrupt aus, vorzugsweise nicht maskierbar, und die ISR speichert den 
Zustand ab. Das Netzteil muss dafür lang genug die Spannung halten, das 
ist aber i.d.R. kein Problem, notfalls nimmt man ein paar grössere 
Elkos.

Gruss Reinhard

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade,

dann muss ich also eine externe Beschaltung da dran bauen?

Dann kann ich vermutlich genau so gut einen Taster zum abspeichern 
verbauen.
Bei den letzten Schaltungen hing die yC Schaltung an 12V Auto Akkus. Die 
5V für den Controller habe ich dann über nen 78L05 und einigen 
Kondensatoren, vdr und dioden gemacht.

Gibt es zufällig irgendwo ein Tutorial oder vorhandenen Thread, wo man 
das nachlesen kann?

Daniel

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennst du die Suchfunktion?

Dann versuch es mal mit: +eeprom +stromausfall

=> 99 Treffer

Viel Spass beim lesen ;)

avr

Autor: Daniel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
OK,

müsste das dann in etwa so aussehen?
Wenn der Pin dann auf Low geht muss eine ISR aufgerufen werde.

Autor: Daniel P. (polzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum speicherst du nicht einfach direkt nach der Eingabe in den EEPROM?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im yC Forum habe ich nur 2 Threads gefunden (-;

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte gedacht, dass man das evtl. einfach software technisch hinbekommen 
könnte. Naja anscheinend doch nicht.
Die Werte verstelle ich durch mehrfaches drücken des jeweiligen Tasters. 
Dann müsste ich nach jedem Tastendruck abspeichern. Hatte mir das 
softwaremässig einfach vorgestellt und schonend für das EEPROM.

Autor: Sebastian R. (sebr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werde in Zukunft dieses Hardware technisch berücksichtigen.

Danke für die Hilfe.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Daniel,

wieso jedesmal speichern?

z.B. dimmst du eine LED (Tasten + -).

7 x + -> es wird zu hell -> 2 x - -> wieder zu dunkel -> 1 x + -> OK

bei jedem Tastendruck wird ein Zähler auf z.B. 5 Sekunden
gesetzt/zurückgesetzt und erst wenn dieser abgelaufen ist
wird gespeichert.

Einstellung geht nur verloren wenn in diesen 5 Sekunden Nachlaufzeit
die Spannung weggeht.

avr

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Warum speicherst du nicht einfach direkt nach der Eingabe in den EEPROM?

Ist zwar in den letzten Jahren besser geworden, aber EEPROM-Zellen haben 
nur eine begrenzte Anzahl von Schreibzyklen.

>Wenn der Pin dann auf Low geht muss eine ISR aufgerufen werde.

Besser vor IC2 abgreifen. Eine Diode vor die Kondensatoren. Mit einem 
Spannungsteiler die Rohspannung auf den Analogkomperator geben. Der löst 
unterhalb einer bestimmten Spannung den Interrupt zum Speichern aus.

MfG Spess

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Ulf Rolf (roolf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:
> Die Werte verstelle ich durch mehrfaches drücken des jeweiligen Tasters.
> Dann müsste ich nach jedem Tastendruck abspeichern. Hatte mir das
> softwaremässig einfach vorgestellt und schonend für das EEPROM.

1. Man könnte zur Schonung des EEPROMs auch N Sekunden nach dem letzten 
Tastendruck schreiben.

2. Manche Taster garantieren weniger Schaltzyklen als ein EEPROM.

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
battery powered cmos ram... ;)

du kannst aber z.b. eine wear leveling funktion bauen, etwa daß du jedem 
datenblock eine nummer zuweist und diese beim speichern (an die nächste 
adresse) immer um eins erhöhst. der µC kann dann beim start das gesamte 
eeprom nach der höchsten nummer absuchen (oder nach dem "bruch" in der 
stetigkeit schauen wenn dieser zähler übergelaufen ist) und den 
zugehörigen datenblock übernehmen. beim speichern wird dann hinter 
diesen aktuellen block geschrieben und wenn man hinten beim eeprom 
angekommen ist fängt man von vorne wieder an.

eine weitere möglichkeit wäre einen externes eeprom z.b. via I2C. wenn 
man dieses irgendwann "geschafft" hat fliegts raus, neues rein und 
weiter gehts.

Autor: X- Rocka (x-rocka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Spannungsüberwachung mit dem internen ADC macht Sinn.
Einfach ständig 12V und 5V messen, und ab gewisser Schwelle einmal 
speichern.

Ansonsten: bei Interrupt beachten, dass der ATmega8 nur 2 ext Interrupt 
Eingänge hat! (oder? mir war so...)

X

Autor: Stefan V. (vollmars)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

also wenn ich mal nachrechne:

100000 Programmierungen nach ATmega8 Datenblatt,
10 Programmierungen je Tag gibt 10000 Tage, das sollte genug sein.
Die Werte werden ja Händisch eingegeben, nicht irgendwie zyklisch.
Wer jetzt sagt: Ich ändere doch öfter als 10 mal am Tag Wert xyz.
Der kann sich ja mal folgendes überlegen:
5 sec pro Wertänderung macht 500000 Sekunden, also fast 6 Tage 
ununterbrochen Tastentippen, das ist echte Fleißarbeit.

Ich denke in den meisten Anwendungen wird die begrenzte Lebensdauer
des EEPROMs keine Rolle spielen. Einfache Maßnahmen, wie verzögertes 
abspeichern, reichen da völlig aus.

BTW: Ich hab mal versucht das Flash eines älteren AVR zu zerschießen, 
der war mit 1000 Prog.Zyklen spezifiziert - ist mir auch nach über 5000 
Zyklen nicht gelungen.

Gruß Stefan

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

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:

> softwaremässig einfach vorgestellt und schonend für das EEPROM.

Schon mal nachgerechnet, wie lang du ununterbrochen Tasten drücken 
musst, bis du an der garantierten Lebensdauer des EEPROM angelangt bist? 
Und wenn die Garantie abgelaufen ist, bedeutet das noch lange nicht, 
dass das EEPROM sofort ausfällt.

IMHO braucht man sich bei händischen Eingaben in ein Gerät und 
sofortigem Ablegen im EEPROM so gut wie nie Gedanken über die 
Lebensdauer des EEPROM zu machen.

Edit: zu langsam. Stefan hat schon nachgerechnet.

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die dinger gehen ja auch nicht kaputt wie eine glühlampe. das kommt mehr 
einem altern gleich und äußert sich dahingehend, daß die zum 
programmieren nötige zeit ansteigt oder der inhalt früher verloren geht 
als spezifiziert.

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.