- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Programmvariablen wärend Programmablauf ändern und speichern

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381

    Programmvariablen wärend Programmablauf ändern und speichern

    Anzeige

    Powerstation Test
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    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

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    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:
    Code:
    '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.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    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.
    Gruß
    Ratber

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    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

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    06.11.2006
    Beiträge
    1.078
    Hallo
    Für solche Sachen gibt es schon fertige ICs, z.B. MAX705.

    Mit freundlichen Grüßen
    Benno
    Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
    Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    Hallo yossarian,
    hast du diesen schon verbaut und nen beispiel dafür?

    MAT

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    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.

    Ganz einfache Variante: (Mehr Pseudocode)





    Code:
    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.

    )
    Gruß
    Ratber

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests