- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Variablen "im" Atmega 32speichern (verfügbar nach

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.06.2004
    Beiträge
    38

    Variablen "im" Atmega 32speichern (verfügbar nach

    Anzeige

    Powerstation Test
    Hallo!

    Ich müsste zwei Variablen zwischenspeichern - geht das irgendwie mit AVR mitteln?
    also zwischenspeichern = Strom weg und er behält trotzdem die veränderten Werte -> Also wie kann man beim Atmega32 aus dem Programmcode auf nichtflüchtigen speicher zugreifen?

    Gruß und Danke

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Hallo Jericho_one,

    die AVRs haben einen eingebauten EEPROM-Speicher, dieser behält seine Werte auch ohne Strom. Wie man den benutzt kannst Du auf http://www.mikrocontroller.net/artic...utorial#EEPROM erfahren.

    MfG Mark

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Das geht wie p_mork auch schreibt.

    Allerdings solltest du beachten, das das EEPROM nur bis zu 100.000 mal mit neuen Werten beschrieben werden kann.
    Du solltest also deine Variablen wenn möglich nur 1x pro Einschalt bzw. Ausschaltvorgang abspeichern.
    Wenn Du ständig während des Programmablaufs ins EEPROM einspeicherst wird der Bereich bald hinüber sein.

    Ein möglicher Lösungsansatz:
    Ich würd den AVR mit einem Kondensator (z.B.Goldcap) puffern und einen Eingang als Power down Kontrolle nutzen.

    Wird der Strom für die Schaltung abgeschaltet läuft der AVR über den Goldcap weiter und eine Power down Routine wird aufgerufen, die Dir deine Variablen ins EEPROM speichert.

    Die Spannung am Goldcap sollte während des Speichervorganges nicht zu sehr einbrechen, sonst könnte es Probleme mit dem Abspeichervorgang geben.

    Beim Start deines Controllers werden deine Werte wieder aus dem EEPROM geholt und ins Ram zurückgeschrieben.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.06.2004
    Beiträge
    38
    Danke soweit - werd mir das mal anschauen - gerade das mit dem Kondensator - da 100.000 schreibzugriffe ja doch nicht sooo wahnsnnig viel ist, wenn ich meine Variablen im laufenden Betrieb schreib!

    Danke für den Tip )
    Gruß

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    ist das mit dem eeprom nicht ein mythos? ja mit 100.000 mal stehts drin, aber wenn du under 120.000 mal das machst gehts ja auch noch nur die speicherzeit hält halt dann nicht mehr 20 jahre oder so?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Du musst die Variablen ja nicht ständig ins EEPROM schreiben. Per BOD (Brown Out Detection)-Interrupt kannst Du das auf den Ausschaltfall beschränken.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Das geht?

    Dazu müsste der BOD maskierbar sein und sichergestellt sein, daß die VCC lange genug ausreichend hoch ist, um den EEPROM zu schreiben und nicht einen inkonsistenden Zustand zu hinterlassen, weil zB dauern der BOD triggert.

    In einer Anwendung bin ich dieses Problem folgendermassen angegangen, wie auch von wkrug vorgeschlagen:

    Die Spannungsversorgung sieht so aus:

    Netzteil -- X -- Linearregler -- Diode -- Goldcap -- µC

    Der Punkt X wird über einen NPN invertiert (ich nehme ein Kanal eines ULN2803) und mit einem INT-Port des µC verbunden. INT ist IN + PullUp.

    Wenn das Netzteil Spannung liefert, funzt die Schaltung ganz normal und treibt Motoren oder weiß der Teufel was.

    Wird das Netzteil ausgeschaltet, steigt die Spannung am X-Port. Das erkennt man, deaktiviert alle Hardware und legt sich in den SLEEP-Mode schlafen. Der LOW-Level am INT, ausgelöst wenn das Netzteil wieder Saft liefert, weckt den µC auf (das geht leider nur mit LOW). Da der NPN beim Schlafen sperrt, fliesst über den PullUp kein Leckstrom.

    Mit dieser Strategie schaffe ich mit einem ATmega88 bis zu 8 Stunden bei VCC=4.5V hinter der Diode und C=1F des Goldcap.

    Mit einem ATmega88V (geht bis 1.8V) dürfte sich die Zeut deutlich verlängern.

    Falls die Zeit kürzer ist und du nicht in den SLEEP gehen willst/brauchst, dann man den SLEEP und die Invertierung des X-Signals sparen, wodurch der Zusatzaufwand im Layout durch eine einzige Leitung -- evtl mit Begrenzerdiode und Widerstand -- besteht (kleiner NPN + Basiswiderstand ist aber kaum mehr Aufwand als Z-Diode + Widerstand).

    Den EEPROM brauch man in diesem Fall nicht zu bemühen. Er wird nur dazu verwendet, Benutzereinstellungen/Konfigurationen zu speichern.
    Disclaimer: none. Sue me.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Da habe ich wohl etwas verwirrend geschrieben. Geht natürlich nicht mit dem Internen BOD. Man muss dafür eine externe Schaltung verwenden, die dann einen Interrupt im AVR triggert.

    Prinzip entspricht dem, was Sprinter geschrieben hat. Vcc des AVR ist gepuffert (für BOD nicht zwingend mit Goldcap). Beim BOD von Vcc wird der Interrupt getriggert und die Werte im EEPROM gesichert. Nach einem Reset initialisiert die Applikation die Variablen dann aus dem EEPROM.

Berechtigungen

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

12V Akku bauen