Forum: Mikrocontroller und Digitale Elektronik Atmel Attiny problem Speicherung von Schalterstellung


von Faisal A. (faisaltu)


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?

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von Karl H. (kbuchegg)


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)

von Faisal A. (faisaltu)


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.

von Karl H. (kbuchegg)


Lesenswert?

Faisal A. schrieb:

> Hmm. Gibt es da bestimmt Befehle, um Bytes in den EEPROM zu schreiben
> bzw, auszulesen.

Ja gibt es.
Aber das hängt von der unbekannten Programmiersprache ab, wie das 
konkret in genau dieser Programmiersprache zu erreichen ist.

von Faisal A. (faisaltu)


Lesenswert?

Karl H. schrieb:
> Faisal A. schrieb:
>
>> Hmm. Gibt es da bestimmt Befehle, um Bytes in den EEPROM zu schreiben
>> bzw, auszulesen.
>
> Ja gibt es.
> Aber das hängt von der unbekannten Programmiersprache ab, wie das
> konkret in genau dieser Programmiersprache zu erreichen ist.

Dayum shit..vergessen zu erwähnen. Ich hab das ganze in C  geschrieben.

von Karl H. (kbuchegg)


Lesenswert?


von Peter D. (peda)


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.

: Bearbeitet durch User
von Faisal A. (faisaltu)


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.

von Karl H. (kbuchegg)


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.

von Peter D. (peda)


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.

von Georg (Gast)


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

von Karl M. (Gast)


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

von Wolfgang (Gast)


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?

von Georg (Gast)


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

von neuer PIC Freund (Gast)


Lesenswert?

F-RAM Technik könnte helfen. 10^13 Schreibzyklen und kein write-delay 
hören sich interessant an.

An und für sich würde ich allerdings auch die Ursache bekämpfen.

von Faisal A. (faisaltu)


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

von REDesign (Gast)


Lesenswert?

Kannst Du bitte einem unwissenden erklären, was ein REDesign ist?

von Faisal A. (faisaltu)


Lesenswert?

REDesign schrieb:
> Kannst Du bitte einem unwissenden erklären, was ein REDesign ist?

Vielleicht unglücklich ausgeschrieben:

RE-Design

von Georg (Gast)


Lesenswert?

REDesign schrieb:
> Kannst Du bitte einem unwissenden erklären, was ein REDesign ist?

Das kann man natürlich nur verstehen, wenn man gebildet ist (lateinisch 
re) oder was von Technik versteht (englisch redesign).

Georg

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.