PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Werte Speichern bevor Strom weg ist?



darxon69
25.07.2007, 18:11
Hallo Leute.


Ich suche nach einer Möglichkeit im Falle eines Stromausfalls die EInstellungen meines Programms in den EEProm zu schreiben.

Hat der Atmel überhaupt eine Möglichkeit einen Stromausfall zu erkennen?
Wenn ja, kann wie kann ich das in Bascom auswerten. Wie das Sichern dann funktioniert weiß ich. Was muss man tun, damit dann noch genug zeit zum Speichern ist (Pufferkondensatoren?)

Rofo88
25.07.2007, 19:26
Naja nen Spannungsausfall erkennt er aber da ist es zu spät (Brown-Out).

Was Du brauchst ist eine Erkennung das die Versorgungsspannung abnimmt. Dafür kannste den Komperator nehmen der ein absinken erkennt wärend der AVR noch von nem Pufferelko versorgt wird.

siehe auch da:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=288020#288020

Yossarian
25.07.2007, 19:35
Hallo
Nimm von Maxim oder anderen einen Spannungswächter bzw. Brown Out Detektor und laß den einen Interrupt auslösen.

Mit freundlichen Grüßen
Benno

darxon69
26.07.2007, 13:51
Ich habe mir mal den MAX705 angeschaut, Aber wenn ich das richtig gelesen hab, dann macht der ja einen RESET, wenn die Spannung sinkt. Das würde aber bedeuten, daß ich dann keine Zeit mehr habe zum speichern.
Außerdem scheint im Manual des IC ein Fehler drin zu sein.
Wenn ich auf Seite 1 die Schaltung links unten anschaue, dann taucht da das PIN PFI zweimal auf, was meiner meinung nach keinen Sinn macht.

Siehe hier:
http://seti.harvard.edu/~chris/CLcontroller/datasheets/MAX705-MAX813L.pdf

Furtion
26.07.2007, 15:01
Hi,

geht das überhaupt mit dem Pufferelko, denn wenn das Elko direkt an der
Batterie angeschlossen ist, sinkt der Spannungspegel so lange, bis das
IC merkt, AH keine Spannung mehr. Dann ist es aber zu spät, da man nur
ganz wenig Saft in den Elkos hat. Bis der Chip wegen der zu niedrigen
Spannung "abstürzt".


Ich würde vill über ne zuschaltbare Batterie nachdenken, die zugeschaltet
wird, wenn man am nem A/D Wandler ne Spannung von 4V misst* (Wenn
man 5V versorgungspannung hat.) Sind die Daten gespeichert, trennt der
Chip die Verbindung zur NotBatterie und
geht aus.

* die Versorgungspannung sollte darbei gepuffert sein, da das sonst zu
schnell geht

peterfido
26.07.2007, 16:10
Du könntest vor dem Pufferelko eine Diode schalten. Vor dieser Diode greifst du ab, um Spannungsfall zu erkennen.

Yossarian
26.07.2007, 18:08
Hallo
Die Schaltung zeigt nur die Möglichkeiten, wenn Du nach rechts schaust, siehst Du, daß der Max nur ein PFI hat.
Erstens müßtest Du den RESET Ausgang des MAX nicht an den RESET Eingang Deines Kontrollers anschließen und zweitens gibt es PFI und PFO.
Da kannst Du einstellen, bei welcher Spannung der Interrupt ausgelöst werden soll.

Mit freundlichen Grüßen
Benno

kolisson
27.07.2007, 00:11
folgender vorschlag:

1. was peterfido schreibt: die betriebsspannung der atmel über ne diode (schottky) zuführen und über nen elko puffern

2. einen op-verstärker als komparator vor die diode zur überwachung der versorgunsspannung. den ausgang des op auf einen interruptfähigen eingang

3. bei int .. sofort alle daten sichern

wichtig ist, dass alle verbraucher ausser der cpu vor der diode saugen, damit der elko nur für die cpu ist.

kollimann
08.08.2007, 16:45
Hi Hi, ich bin neu in der AVR Sache, und möchte genau das Thema in diesem Beitrag realisieren.


einen op-verstärker als komparator vor die diode zur überwachung der versorgunsspannung. den ausgang des op auf einen interruptfähigen eingang


könnte das bitte jemand etwas näher erläutern?
1. welchen Eingang am Atmega8 nimmt man am besten?
2. wozu soll der OPV dienen?

DANKESCHÖN

stefan_Z
09.08.2007, 05:05
könnte das bitte jemand etwas näher erläutern?
1. welchen Eingang am Atmega8 nimmt man am besten?
2. wozu soll der OPV dienen?


1 - Einen Eingang, der als externer Interrupt beschaltet ist (INT0 oder INT1)
2 - Ich denke mal, dass der OVP Seinen Ausgang auf High schaltet, wenn der Strom runtergeht. Das löst den Interrupt aus und die Daten werden schnell gesichert, bevor Schicht im Schacht ist.

Noch eine Idee:
Könnte man nicht einfach nur den VCC vom AVR mit nen Kondensator puffern und mit nem Interrupt den High-Pegel der VCC überwachen? Bei Wechsel auf Low wird dann der Interrupt gezündet, während der AVR noch vom Elko zehrt...
Was sagen die Profis?

enterprise30
09.08.2007, 08:14
Guggst Du auch da:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=26606&highlight=

stefan_Z
09.08.2007, 08:19
Guggst Du auch da:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=26606&highlight=

hehe, wusste ichs doch: Die Idee war nicht von mir, die hatte ich irgendwo schonmal gelesen ;-)
Aber dürfte die einfachste sein... Und wenn man eh noch Pins frei hat... perfecto!

Rugbywinne
16.08.2007, 15:19
Hallo zusammen,
genau diese Problem mit der Stomversorgung habe ich bei einem Projekt wie folgt gelöst:
Vorgabe:
- Netzbetriebenes System mit Mega32.
- Bei Stromausfall müssen Betriebsdaten im EEPROM gesichert werden

Lösung:
- Wie schon an anderer Stelle beschrieben kommt ein Elko zur Pufferung der Prozessorspannung zum Einsatz.
- Eine Diode sorgt dafür, dass nur der Prozessor gepuffert wird.

Wenn das Main-Programm regelmäßig und immer durchlaufen wird, muss nicht unbedingt ein Interrupt verwendet werden. Dann kann jeder (Eingangs)-Pin verwendet werden.

Es ist nicht unbedingt ein Operationsverstärker notwendig, es reicht ein einfacher Transistor (mit Kollektorwiderstand), der die Spannung VOR der Diode (über einen Spannungsteiler) überwacht. Ein Kondensator zwischen Emitter und Basis macht die Schaltung unempfindlich gegen kurze Unterbrechungen und mögliches Netzbrummen.

Batterielösung
Bei dem Problem der absinkenden Batteriespannung könnte einer der internen AD-Eingang in regelmäßigen Abständen die Spannung der Batterie messen.
Wird ein bestimmter Wert unterschritten, wird ins EEPROM gesichert.
Bauteilaufwand: maximal 2 Widerstände

Test der richtigen EEPROMSpeicherung
Voraussetzung ist, dass die EEPROM-Sicherung vor dem "Abschalten" des Prozessors vollständig abgeschlossen ist.

Deshalb sollte am Ende der EEPROM-Sicherung z.B. eine Displayausgabe erfolgen oder eine LED aufleuchten.
Wenn diese klappt sind auch die EEPROMdaten richtig gesichert. Sicherheitshalber kann vor dieser letzten Ausgabe eine Pause gesetzt werden, dann hat man etwas mehr Sicherheit.

Kommt die letzte Ausgabe nicht muss der Kondensator vergrößert werden.
Außerdem sollten zu diesem Zeitpunkt alle anderen Ports bzw. Funktionen des Controllers soweit eingestellt sein, dass nicht unnötig Strom aus dem Kondensator gezogen wird.

Beste Grüße

kolisson
16.08.2007, 23:42
danke Rugbywinne

genauso hätte ich mir das vorgestellt... bisher rein theoretisch.
aber du bestätigst das ja hier.

hier nun die masterfrage, die seit einem jahr mit mir rumtrage:

der atmel hat SRAM.
da sind nur die variablen drin während er läuft und die speichern solange er strom hat.

der atmel hat sogennates flash ... da kommen die programme rein, wenn ich das richtig sehe. das sind dann wohl auch die speicher, die man nur blockweise beschreiben kann.

dass eeprom... nun die frage: geht das da byteweise ?


gruss kolisson

stefan_Z
17.08.2007, 00:00
Ja, in Bytes isses angelegt.

kolisson
17.08.2007, 00:15
na dann verstehe ich endlich, warum der pucki auch eeprom hat.
ich danke euch stark... und werde jetzt über meine neue energiesparlampe schreiben...



auf meiner seite ... ihr wisst welche ?


die lampe für alle, die nicht 220volt brauchen, die, die auf 12 volt leben, und licht brauchen

ich werde berichten von der liason einer unbedeutenden leuchtdiode mit der unbedeutenden elektronischen schaltung von herrn Haug.

und wir werden grosses licht haben

Rugbywinne
17.08.2007, 06:15
Hallo kolisson
hier ein Vorschlag zur Programmierung

' Definition der EEPROMvariablen
$eeprom
Dim Epromvariable1 As Eram Word ' Word ist nur als Beispiel
Dim Epromvariable1 As Eram Word
$data

' definition der Ramvariablen
Dim Ramvariable1 as Word
Dim Ramvariable1 as Word

...

' Wird zur Datensicherung ausgeführt
Writetoeeprom:
Epromvariable1 = Ramvariable1
Epromvariable2 = Ramvariable2
Return

...


' Wird zum Programmstart ausgeführt
Readeeprom:
Ramvariable1 = Epromvariable1
Ramvariable2 = Epromvariable2
Return

Aber das hast Du bestimmt schon selbst rausgefunden.

Wenn Du Schaltungsfragen hast, melde Dich.

Welches ist denn Deine Seite ?

Gruß
Rugbywinne