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?
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
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)
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.
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.
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.
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
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.
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.
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.
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
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
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?
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
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.
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
Kannst Du bitte einem unwissenden erklären, was ein REDesign ist?
REDesign schrieb: > Kannst Du bitte einem unwissenden erklären, was ein REDesign ist? Vielleicht unglücklich ausgeschrieben: RE-Design
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.