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
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
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.
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
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
Kennst du die Suchfunktion? Dann versuch es mal mit: +eeprom +stromausfall => 99 Treffer Viel Spass beim lesen ;) avr
OK, müsste das dann in etwa so aussehen? Wenn der Pin dann auf Low geht muss eine ISR aufgerufen werde.
Warum speicherst du nicht einfach direkt nach der Eingabe in den EEPROM?
Im yC Forum habe ich nur 2 Threads gefunden (-;
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.
Werde in Zukunft dieses Hardware technisch berücksichtigen. Danke für die Hilfe.
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
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
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.
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.
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
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
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.
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.
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.