PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmvariablen wärend Programmablauf ändern und speichern



mat-sche
03.06.2007, 20:03
Servus @ ALL,

auch nun wieder sind Gedanken, Hinweise oder Codeschnipsel eine gute Hilfe!

Folgendes möchte ich realisieren:

ich baue mir gerade eine Menüsteuerung auf, in der mir ein Helligkeitswert angezeigt wird. Bei einem bestimmten Wertebereich sollen bestimmte Aktionen erfolgen. Die Grundwerte will ich in den Code mit einbauen und später über einen Menüpunkt ändern können und diese dann als neuen Ausgangspunkt abspeichern.

Hat jemand eine Idee wie ich an die Sache rangehen könnte? Oder hat jemand so etwas schon einmal gemacht?

Danke und Gruß MAT

p_mork
03.06.2007, 20:13
Hallo mat-sche

wenn Du willst, dass Variablen auch ohne Strom ihren Wert behalten, dann muss Du diese in ein EEPROM speichern, am besten in das interne des AVRs. Such mal in der Bascom-Hilfe nach EEPROM, da steht alles was Du wissten musst.

MfG Mark

mat-sche
03.06.2007, 20:49
Hallo p_mork,

danke für Deinen Hinweis. Daran habe ich auch schon gedacht, nur die herangehensweise ist mir noch unklar.
Wie kann ich eine Variable in Echtzeit aus dem eeprom holen, sie anzeigen lassen und dann über z.Bsp. zwei Tasten erhöhen oder verkleinern.
Da brauche ich die Hilfe.

Jemand einen Gedankenblitz?

MAT

Jaecko
03.06.2007, 23:10
Die Variable X lässt sich einfach mit
DIM [Variablenname] as ERAM [Typ]
definieren.
z.B. DIM abc as ERAM Byte.
Mit abc = 5 wird die Variable zugewiesen (würd ich aber nur beim Abschalten machen; EEProm ist ja nicht unendlich oft wiederbeschreibbar).

Auslesen geht dann einfach mit x = abc o.ä.

Also Prinzip etwa:



'Programmstart

Dim Speichern as Bit
DIM abc as ERAM Byte
Dim x as Byte

x = abc
Do
'Taste Abfragen
If Taste = 1 Then INCR x
If Taste = 2 Then DECR x

If Speichern = 1 Then
abc = x
Speichern = 0
EndIf
Loop


Also die Variable wird in eine Ram-Variable geholt; mit den Tasten entsprechend verändert und auf Wunsch ("Speichern = 1", z.B. beim abschalten oder manuell) gespeichert.

Ratber
04.06.2007, 18:58
Und wer es gerne Automatisch haben möchte der kann es mit einem kleinen Trick machen ohne das EEProm unnötig oft zu beschreiben.

Folgender Grundgedanke:

Für gewöhnlich besitzt ein Gerät eine stabilisierte Versorgung.
Also Klassisch Trafo->Gleichrichter->Pufferelko->Spannungsregler.
Wird der Trafo abgeschaltet dann wird dem Controller ja nicht sofort die Energie entzogen denn der Pufferelko hält die Schaltung noch eine weile am laufen.

Und hier greift meine Methode der Sicherung.

Wird der Trafo vom netz getrennt dann wird der Pufferelko nicht mehr geladen und versogt mit seiner Ladung die Schaltung.
Das heißt .seine Spannung sinkt stetig.
Dieses ist leicht zu messen (Ein AD-Eingang nebst Spannungsteiler reicht dafür schon.Alternativ geht auch ein Schmittrigger der dann einen Digitaleingang des Controllers ansteuert.(zb. per INT)
Sinkt also die Spannung des Elkos unter ein wählbares Niveau dann kann dieser reagieren und die gewünschten Variablen ins EEProm retten.
Dieser Vorgang dauert normalerweise nur einige Millisekunden so das die gängigsten Netzteilaufbauten den Spannungsregler lange genug mit ausreichender Spannung versorgen bis alles geschrieben ist.

Die Formel zur Überbrückung T=(U1-U2)*C/I dürfte vermutlich bekannt sein.

Gegebenenfalls wird der Pufferelko größer bemessen und/oder die Spannung vor dem Regler etwas erhöht bzw. würde vieleicht ein Low-Drop Regler schon für genug Zeitfenster sorgen.
Kann sich jeder nach gutdünken,Situation und Sinn aussuchen.
Auch die Speicherung in ein externes EEprom ist machbar.

So mache ich es seit längerem bei Geräten die ihren Status behalten sollen.

Natürlich geht es auch ganz Tranparent wenn man seine Daten bei jeder Änderung in ein Externes EEprom schreibt und dabei ein Modell wählt das 1 Million Schreibzyklen verträgt.
Das alleine sollte schon für sehr lange reichen.

Ich hoffe mal das Prinzip ist deutlich geworden.

mat-sche
06.06.2007, 18:20
Hallo jaecko und Ratber,

danke für die Tips und den Codeschnipsel!
@ Jaecko: Werde mich gleich mal ranmachen und den Code ausprobieren

@ Ratber: eine sehr interessante Idee, die mehr als gut ist! Warum immer jede Einstellung in das EEprom schieben! Wenn Du das schon öffters angewendet hast, hättest Du nicht mal nen Code für mich parat? *liebfrag*

Bis dahin werde ich versuchen mein Menü erst einmal zum laufen zu bekommen!

Gruß MAT

Yossarian
06.06.2007, 18:24
Hallo
Für solche Sachen gibt es schon fertige ICs, z.B. MAX705.

Mit freundlichen Grüßen
Benno

mat-sche
06.06.2007, 18:59
Hallo yossarian,
hast du diesen schon verbaut und nen beispiel dafür?

MAT

Ratber
06.06.2007, 19:30
Hallo
Für solche Sachen gibt es schon fertige ICs, z.B. MAX705.

Yo,nen Watchdog geht natürlich auch aber nur für die Erkennung ob der Saft abgedreht wurde ist das einwenig oversized.
Ich begnüge mich mit nem freien AD- oder Komparatoreingang.




Wenn Du das schon öffters angewendet hast, hättest Du nicht mal nen Code für mich parat? *liebfrag*

Wofür nen Codeschnipsel ?
Das ist so simpel das es beißt. :D

Ganz einfache Variante: (Mehr Pseudocode)







Gosub Datenrestaurierung

Do
.......
X = Getadc(0)
If X < 900 then goto Datenrettung
......
Loop

:Datenrestaurierung
Readeeprom (Variablenname),(Adresse im Eeprom)
Readeeprom (Variablenname),(Adresse im Eeprom)
Readeeprom (Variablenname),(Adresse im Eeprom)
...usw.
Return


:datenrettung
Writeeeprom (Variablenname),(Adresse im Eeprom)
Writeeeprom (Variablenname),(Adresse im Eeprom)
Writeeeprom (Variablenname),(Adresse im Eeprom)
....usw.
END



Natürlich kann man das noch entsprechend verfeinern (Auch mit obigem Watchdog) indem man 2-5x misst und Mittelt bevor man sichert.

usw.

)