Atmel Attiny problem Speicherung von Schalterstellung

OP #4384978
Lesenswert?

Hallo Ritter.
Ich habe folgendes Problem mit einer Schaltung, die ich mit einem 
Drehschalter und einem uC (ARtiny4313) entworfen habe. Allgemein geht es 
darum Netz auf einer klemme mit dem Drehschalter zu schalten. Ich habe 
einen Schaltermodus implementiert, der gespeicherte Schalterstellungen 
benötigt, um zu funktionieren.

Diese Schalterstellungen habe ich jedoch nicht im EEPROM gespeichert 
sondern in Form von Variablen im Flash. Jetzt kann es vorkommen, dass 
beim Schalten meiner Last am Netzausgang der uC irgendwie aus welchem 
Grund auch immer, für 1 s kein strom hat, und verliert dann 
dementsprechend den gespeicherten Wert. Ohne Last funktioniert alles 
einwandfrei..Relais schaltet, kein Stromausfall oder desgleichen.

Was für Lösungen gibt es es für dieses Problem?
Externe Versorgung des uC?(Batterie) oder Softwaretechnisch?
#4384985
Lesenswert?

Faisal A. schrieb:

> Diese Schalterstellungen habe ich jedoch nicht im EEPROM gespeichert

warum nicht?

> Was für Lösungen gibt es es für dieses Problem?

genau dafür hat Atmel seinen Prozessoren das EEPROM spendiert. Damit man 
dort Werte speichern kann, die auch einen Stromausfall überleben.
Was immer du also an Werten benötigst, um während des erneuten 
Hochfahrens des Programms wieder denselben Zustand zu erreichen, der 
vorher vorgeherrscht hat, diese Werte gehören ins EEPROM.

Dazu gehört natürlich auch, dass du den Teil, warum der µC unmotiviert 
stromlos ist, zusätzlich abstellst.
#4384988
Lesenswert?

Faisal A. schrieb:

> sondern in Form von Variablen im Flash.

Das ist ein Widersprich in sich.
Auf einem AVR jat man keine Variablen im Flash. Das Flash ist aus Sicht 
des Programms konstant, bekommt seine Werte während der Programmierung 
und das wars.

(Bootloader mal aussen vorgelassen. Aber wer über den für den Bootloader 
vorgesehenen Mechanismus ins Flash schreiben kann, müsste nicht soetwas 
hier fragen)
OP #4384991
Lesenswert?

Karl H. schrieb:
> Faisal A. schrieb:
>
>> Diese Schalterstellungen habe ich jedoch nicht im EEPROM gespeichert
>
> warum nicht?
>
>> Was für Lösungen gibt es es für dieses Problem?
>
> genau dafür hat Atmel seinen Prozessoren das EEPROM spendiert. Damit man
> dort Werte speichern kann, die auch einen Stromausfall überleben.


Hmm. Gibt es da bestimmt Befehle, um Bytes in den EEPROM zu schreiben 
bzw, auszulesen.
#4385110
Lesenswert?

Faisal A. schrieb:
> Jetzt kann es vorkommen, dass
> beim Schalten meiner Last am Netzausgang der uC irgendwie aus welchem
> Grund auch immer, für 1 s kein strom hat, und verliert dann
> dementsprechend den gespeicherten Wert.

Da würde ich ansetzen.
Ist der Stromausfall gewollt oder notwendig?
Wenn ja, dann kann man den MC in Powerdown setzen, dann hält ein 100µF 
mehrere Sekunden.
OP #4385463
Lesenswert?

Peter D. schrieb:
> Faisal A. schrieb:
>> Jetzt kann es vorkommen, dass
>> beim Schalten meiner Last am Netzausgang der uC irgendwie aus welchem
>> Grund auch immer, für 1 s kein strom hat, und verliert dann
>> dementsprechend den gespeicherten Wert.
>
> Da würde ich ansetzen.
> Ist der Stromausfall gewollt oder notwendig?
> Wenn ja, dann kann man den MC in Powerdown setzen, dann hält ein 100µF
> mehrere Sekunden.

Danke Peter für die Antwort. ich werde aber jetzt wohl die vorherigen 
Schalterstellungen im EEPROM speichern. Die Platine steht nämlich so 
schon, und ich kann den net noch mit einem 100uF bestücken. Dieser 
Fehler ist ungewoll.
Leider habe ich das ganze bisher nicht mit der eigentlich Pumpe, auf die 
geschaltet wird getestet. Auf Lampen und so weiter ist nie ein Fehler 
aufgetreten. Das Problem hängt mit der Pumpe zusammen.
#4385592
Lesenswert?

Faisal A. schrieb:

> Danke Peter für die Antwort. ich werde aber jetzt wohl die vorherigen
> Schalterstellungen im EEPROM speichern.

Würde ich so und so auf jeden Fall machen. Es gibt ja auch 
Stromausfälle, die nicht in deinen Bereich fallen und gegen die du 
nichts machen kannst.

> geschaltet wird getestet. Auf Lampen und so weiter ist nie ein Fehler
> aufgetreten. Das Problem hängt mit der Pumpe zusammen.

Tja. induktive Lasten, wie zb Motoren, erfordern nun mal besondere 
Vorkehrungen.
#4385801
Lesenswert?

Faisal A. schrieb:
> Das Problem hängt mit der Pumpe zusammen.

Dann fürchte ich, das mit dem EEPROM wird nicht funktionieren. Du 
versuchst, die Wirkung zu bekämpfen, statt die Ursache zu suchen.
Quasi wie die Bürger von Schilda, die Licht in Säcken in das Rathaus 
tragen, statt Fenster einzubauen.

Den EEPROM gibt es nicht zum Nulltarif, das Löschen und Schreiben dauert 
mehrere ms und mag es gar nicht, wenn dabei der Strom ausfällt.
Gast #4385824
Lesenswert?

Peter D. schrieb:
> Den EEPROM gibt es nicht zum Nulltarif, das Löschen und Schreiben dauert
> mehrere ms und mag es gar nicht, wenn dabei der Strom ausfällt.

Na und? Schalter einlesen, ins EEProm schreiben, dann Pumpe schalten.

Merke: Nachdenken hilft oft beim Programmieren.

Georg
Gast #4385842
Lesenswert?

Georg,

man bedenke die maximale Anzahl von Schreibzyklen.
Deshalb schreibt Peter (PeDa) nur vom kontrollierten beschreiben des 
Eeprom beim Power Off.
Man kann aber auch noch den Datensatz als Datenblock sehen, denn man 
nach 100.000 Schreibzyklen an eine andere Adresse im Eeprom verlegt.
Damit erhöhen sich die Schreibzyklen des Datenblock drastisch.

Alles bezogen auf den attiny4313

0: 1 Byte für Eeprommarker (0x55) -- initialisiert
1: 1 Byte für Eeprommarker (0xAA) -- initialisiert
2: 1 Byte für Eepromblockadresse
// evtl. nachfolgend noch Kopien der Eepromblockadresse
3: leer
:
15: leer
--- Datenblock ---
+3  Byte für die Anzahl der Schreibzyklen des Datensatz (100000).
// mit nur +2 Byte kann man bis 2¹⁶ = 65536 Schreibzyklen Zählen
+13 Byte für den Datensatz
--- --- --- --- ---

Dieser wandert nach 100.000 Schreibzyklen um 16 Byte weiter nach unten.

Wir erhalten dann abgerundet Schreibzyklen des Datenblocks:
(256 / 16 - 1) * 100.000 = 1,5 Mio Schreibzyklen

Georg schrieb:
> Peter D. schrieb:
>> Den EEPROM gibt es nicht zum Nulltarif, das Löschen und Schreiben dauert
>> mehrere ms und mag es gar nicht, wenn dabei der Strom ausfällt.
>
> Na und? Schalter einlesen, ins EEProm schreiben, dann Pumpe schalten.
>
> Merke: Nachdenken hilft oft beim Programmieren.
>
> Georg
Gast #4385853
Lesenswert?

Faisal A. schrieb:
> Diese Schalterstellungen habe ich jedoch nicht im EEPROM gespeichert
> sondern in Form von Variablen im Flash. Jetzt kann es vorkommen, dass
> ... , und verliert dann dementsprechend den gespeicherten Wert.

Wie kriegst du es hin, dass Daten aus dem Flash verloren gehen, aber das 
Programm hinterher noch da ist?
Gast #4386125
Lesenswert?

Karl M. schrieb:
> Deshalb schreibt Peter (PeDa) nur vom kontrollierten beschreiben des
> Eeprom beim Power Off.

Wo hast du das gelesen?

Aber selbst wenn das so wäre, so eine Lösung ist sinnlos ohne eine 
kurzfristige Notstromversorgung, die sicherstellt, dass man das EEProm 
auch noch sicher beschreiben kann. Ohne das, nur mit Software, die beim 
Abschalten versucht zu speichern, ist das der sicherste Weg zum 
Datenverlust.

Faisal A. schrieb:
> Die Platine steht nämlich so
> schon, und ich kann den net noch mit einem 100uF bestücken. Dieser
> Fehler ist ungewoll.

Was du meinst dass Peter meint geht also sowieso nicht. Die Formulierung 
vom ungewollten Fehler finde ich aber nett, die könnte von Microsoft 
stammen mit seinen unexpected errors.

Georg
OP #4388015
Lesenswert?

Also ich lass gerade meine Schaltung laufen. Habe erstmal die Software 
umprogrammiert und EEPROM Funktionen eingebaut.Dank EEprom update, werde 
ich wohl eh nicht die 100000 Schreibzyklen ereichen.

Das Problem ist, dass ich halt eine induktive Last habe. Es entstehen 
Schwingungen, obwohl mein RElais nicht wirklich so schnell schaltet. 
Außerdem fließen nur 47mA(11watt Pumpe) durch die Last.

Ich hab mir überlegt, einen Snubber jetzt zu verwenden. Das wird wohl 
bei meinem REDesign mit einfließen. Ich bin mir jetzt noch nicht sicher, 
inwieweit mein Software von dieser Störung betroffen ist. Ich habe 
nämlich auch einen Timer laufen . Wenn wirklich alle Variablen resetet 
werden, dann ist das gar nicht cool.

Grüße

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren