-         

Ergebnis 1 bis 6 von 6

Thema: Variablen im Flash speichern

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263

    Variablen im Flash speichern

    Anzeige

    Moin,
    Ich möchte mit Bascom über einen Taster eine Variable hoch zählen lassen.
    Je höher die Variable desto höher die PWM. Somit kann man dann mit einem Taster die Gesch. einstellen.
    Wenn man das Modellfahrzeug nun ausschaltet soll die alte Gesch. Einstellung allerdings gespeichert werden. Ich muss die Variable also irgendwo im Flash speichern?
    Wie mache ich das?

    Ich Arbeite mit einem Aittny26

    Aruss

    Alex

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Ich muss die Variable also irgendwo im Flash speichern?
    Wie mache ich das?
    ERAM-Variablen definieren:
    Dim MyEVar As Eram Byte

    Dann kann man sie normal nutzen:
    MyEVar = 22

    Man sollte Schreibzugriffe auf das ERAM begrenzt halten (möglichst selten).

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Hallo,
    Danke.
    Neu beschrieben wir die Variable ja nur wenn manuell die Fahrgeschnwindigkeit verändert werden.
    Also nicht sehr oft.
    Werds gleich mal testen.

    Edit: Die Variable die ich speichern möchte ist vom Typ Single, da ich mit dieser Variable bis 400 hochzählen möchte und mit Dezimalzahlen multiplizieren muss.

    Was mache ich jetzt?

    Gruss

    Alex

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Ort
    Potsdam
    Beiträge
    190
    Speicher nur das ab was Du wirklich brauchst - in dem Fall würde eine Wordvariable reichen (Dim A as Eram Word)
    An Deiner Stelle würde ich die Werte der Single nach dem Starten eher neu berechnen lassen, mal davon abgesehen das ich kein Freund von letztgenannter Datenform bin weil sie enorm viel Resourcen und Rechenarbeit in Anspruch nimmt.
    Was das Abspeichern beim Ausschalten angeht könntest Du die Stromversorgung des µC über eine Diode und einen zusätzlichen Kondensator entkoppeln und einen Interrupteingang belegen der an der Stromversorgung (vor der Diode) hängt und beim Abschalten die Speicherroutine aufruft bevor die BOD beim Controller den Reset einleitet.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.10.2006
    Ort
    Kohlenpott
    Alter
    30
    Beiträge
    263
    Moin,
    Mit Word werde ich es mal probieren!
    Duhast recht, Singlefirsst unheimlich viel an Speicherplatz.

    Ein Problem habe ich noch:

    Ich muss der Variable doch einen Anfangswert zuweisen.

    Wenn ich es so mache:

    Dim MyEVar As Eram Word
    MyEVar = 22

    Do
    ...
    Loop

    Dann wird ja bei jedem neuen Einschalten der Wert der Variable wieder auf 22 gesetzt.
    Dabei soll er den alten Wert initialisieren.

    Wenn ich den Wert von MyEvar bloß abfrage zählt es nicht zu den max. 100.000 Zyklen die das EEPROM Aushält?

    Gruss

    Alex

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Ort
    Potsdam
    Beiträge
    190
    Die EEpromvariable solltest Du nur auslesen oder schreiben, aber nicht zum arbeiten im laufenden Programm nutzen.
    Schreib doch einfach:

    Dim A as Eram Word
    Dim B as SRAM Word (sinngemäß - hab schon ne Weile net mehr mit Bascom geproggt und weiß den genauen Befehl grad nicht)
    Dim C as SRAM Byte
    Enable Interrupts
    Config Int0 = Falling
    On Int0 Speichern

    B = A
    C=0

    Do
    ...
    Loop

    Speichern:
    A = B 'Arbeitsvariable im EEprom ablegen (wird automatisch gespeichert)
    Do 'warten bis die BOD am µC wegen Unterpannung den Reset einleitet
    nop
    Loop
    Return

    Damit übergibst Du den Wert der Eepromspeicherzellen in eine SRAM-Zelle und kannst den µC runde 100.000 mal ein und ausschalten. Gegebenfalls kannste ja auch eine Prüfschleife einbauen die nach dem zwei-von-drei Verfahren geht und die Gleichheit der Speicherinhalte kontrolliert und im Falle des Falles einfach auf die nächsten zur Verfügung stehenden Zellen zurückgreift.
    Hunderttausendmal ein und Ausschalten muss man aber erst mal schaffen.
    Übrigens ist der SRAM auch "minimal" schneller als der ERAM. Letztgenannter braucht nämlich runde 1 bis 4ms um ausgelesen zu werden. Der SRAM arbeitet dagegen im Takt des µC's und kann bei 20Mhz in nicht mal ner halben Mikrosekunde angesprochen werden - also über 2000 mal flotter.

    Was mir grad noch auffällt ist die Tatsache das sich der µC bei Spannungsschwankungen in meiner oben getippselten Variante festhängen kann. Also muss sichergestellt werden das die INT-Routine die anliegende Versorgungsspannung überwacht und im Falle einer simplen Störung der Stromversorgung einfach wieder zurück ins Hauptprogramm springt.

Berechtigungen

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