Forum: Mikrocontroller und Digitale Elektronik Wiederherstellung von ORC1A-Wert nach Reset


von Eugen.S (Gast)


Lesenswert?

Guten Abend,

ich brauche einen Rat von euch. Zunächst paar Informationen zur HW und 
Vorhaben.

HW: Ich benutze eine AVR AT90USB162.

Vorhaben: Ich habe einen LED Dimmer mit HW PWM programmiert. Dieser 
läuft auch soweit, wie ich es mir vorgestellt habe.

Problem: Wenn ich den Controller resete, wird der Wert im OCR1A 
zurückgesetzt, da ich diesen auf 0 setze beim initialisieren, damit ich 
einen definierten Zustand habe. Ich möchte aber gerne den zuletzt 
eingestellten Zustand/Wert wieder laden.

Ansatz 1: Ich könnte den letzten Wert im Flash wo anders 
zwischenspeichern und beim initialisieren den OCR1A damit überschreiben. 
Könnte es da Probleme geben, die ich gerade nicht sehe?

Ansatz 2: Ich habe gelesen, dass so etwas auch im EEPROM gespeichert 
werden kann. Ist das ein besseres Vorgehen?

Oder gibt es noch andere Optionen, die ich mir anschauen könnte/sollte?

Danke!

von Georg A. (georga)


Lesenswert?

Gehts nur um einen Reset oder gleich eine "ganze" Stromunterbrechung?

Das EEPROM ist für sowas deutlich besser geeignet, weil man einzelne 
Bytes beschreiben kann (Flash nur Pages), das EEPROM hält auch mehr 
Schreibzyklen aus.

Wenn es nur um einen Reset geht, könnte man sich auch was mit dem SRAM 
überlegen. Gibt ja Flags, wo man den Reset-Grund auslesen kann. Wenn das 
kein Powerup/Brownout war, und ein Magic-Wert im SRAM stimmt, kann man 
einen anderen Wert hernehmen (oder so...).

von Eugen.S (Gast)


Lesenswert?

Mir geht es um die Wiederherstellung nach Spannungsunterbrechung.

von Frank (Gast)


Lesenswert?

Dann wirst du um das wirkliche speichern nicht rum kommen. Da steht ja 
das meiste schon vom Vorredner da.
Man kann den uC ausreichend puffern mit C's und misst die 
Versorgungsspannung. Sobald die zusammenbricht wird noch der letzte wert 
ins EEPROM geschrieben. Dann sind es nicht so viele Schreibzyklen...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Leider hat der AT90USB162 noch keinen BrownOut Interrupt, so das ein 
Schreiben im Powerdown Vorgang einige externe Hardware erfordern würde. 
Lustigerweise behauptet Atmel, das das Flash in diesem MC genauso viele 
Schreibzyklen verträgt wie das EEPROM, nämlich 100.000. Bleiben wir also 
beim EEPROM aus den o.a. Gründen.
Wenn du pro Tag also einmal den OCR Wert speicherst, würde das eine 
Zelle in etwa 100.000 Tagen, bzw. 273 Jahren auslutschen.
Glücklicherweise gibt es aber nicht nur eine EEPROM Zelle, sondern 512, 
die du mittels eines geeigneten Algorithmus auch hintereinander belegen 
könntest, bspw. indem du den alten gespeicherten Wert auf 00 setzt und 
in der nächsten Zelle deinen neuen Wert schreibst. Das verdoppelt zwar 
die Benutzung pro Zelle, verteilt das aber dann auf alle vorhandenen.
Beim Starten sucht dann der MC nach der ersten Zelle, in der nicht 00 
steht und lädt diesen Wert ins OCR.

Externe EEPROM wie der 24C02 oder der 93C46 sind übrigens meistens auf 
1.000.000 Schreibzyklen spezifiziert, so das es evtl. auch sinnvoll sein 
kann, so etwas zu verwenden.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.