www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BASCOM-AVR und Var


Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ,

habe eine Frage zu Variablen in BASCOM (Mega48).

Bleibt eine mit "Dim N As Byte" deklarierte Var
auch bei Power-down erhalten?
Muss man besondere Maßnahmen ergreifen wenn mit WD aufgeweckt wird?

Gruss Kurt

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei allen Sleep-Modes, Idle, ADC-Noise, Standby und Power-Down, bleibt
das SRAM und der aktuelle Status aller Register erhalten.
Wenn Du Watch-Dog benutz wird innerhalb max. 2 Sekunden ohne WD-Reset
sowieso der AVR Resettet, also neu gestartet und initiallisiert.

Gruß
Andi

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @Andy,

danke für die Antwort.

"also neu gestartet und initiallisiert" hier werden doch alle Var neu
angelegt, auch überschrieben?

Ich möcht alle z.B 10 sekunden was berechnen (einfach weitermachen)
aber zwischendurch "keinen" Strom verbrauchen.
Dazu reicht es wenn einige Variablen noch vorhanden sind.

Vielleicht könnte ich diese ja im Ram irgendwo parken (fällt mir gerade
ein) und dann holen.

Einen anderen Mechanismus ausser WD um eine  "Zeit"  zu erzeugen
kenn ich nicht (AVR im Power-down-Modus).

Gruss Kurt

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So weit ich das beurteilen kann gehen bei einem Reset durch Watch-Dog
oder von aussen ALLE Daten in Registern und im SRAM verloren.
Heißt ja nicht umsonst Reset (Zurücksetzen).
Aber ich werde es selbst gleich mal probieren. Setze eine Variable an
eine bestimmte Stelle im RAM die ich vorher Prüfe und den µC was
anderes machen/anzeigen lasse.
Aus dem Power-Down kommt der AVR nur durch Impuls an Int0 oder Int1
wieder raus oder durch Überlauf oder Compare von Timer2.
Dazu muß man an Pin T2 einen langsammen Quarz (Uhrenquarz 32KHz)
anschließen.
Mit einem großen Vorteiler für Timer2 und hohen Counter (1024 x 256)
kommst Du bei 32KHz an T2 auf ca. 8 Sekunden.

 32000  1024  256 = 0,1220703125 je Sekunde.
 1 / 0,1220703125 = 8,192 Sekunden.

Gruß
Andi

Autor: ---- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> So weit ich das beurteilen kann gehen bei einem Reset durch Watch-Dog
oder von aussen ALLE Daten in Registern und im SRAM verloren.

Nein, ein Reset initialisiert die Register auf Defaultwerte/Resetwerte
und springt nur den Resetvektor an und  - mehr nicht. Das RAM bleibt
(zunächst) unangetastet. Was mit den Registern (R0..R31) beim AVR
passiert weiß ich nicht - AVR kenn ich nicht.
Wenn dein Startupcode dann den kompletten RAM initialisiert (d.h. mit
Werten vorbelegt, was z.B. von einem ANSI-C-Compiler automatisch für
alle Variablen passiert; bei Bascom wird das ähnlich sein), dann werden
natürlich auch 'alte' Rechenergebnisse überschrieben.

Prinzipiell: Schaffe dir Platz im RAM, der nicht automatisch vom
Compiler initialisiert wird. Dann mußt du dich aber selbst darum
kümmern, daß nach dem regulären, ersten Einschalten in den RAM-Zellen
gescheite Werte stehen.
-> Mach's so wie Andi es vorgeschlagen hat.

----, (QuadDash).

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @Andy , @QuadDash

Wenn ein Takt mit 32768 Hz so sparsam ist wie ein Power-down (10 sek)
dann kann man ihn ja weiterlaufen lassen (hatte schon mal deswegen hier
nachgefragt).
Das bringt eine genaue Zeit aber mit seriell wird es schwierig
(hierfür müsste man auf den inneren RC-umschalten und diesen auch
immermal zwischendurch abgleichen (mit den 32.. vergleichen).

Wenn BASCOM die Var nicht anrührt, oder deklarierte Variablen und
Strings nicht vorbesetzt könnten auch hier Werte erhalten bleiben.

Werd es ausprobieren.

Danke für die Anregungen

Kurt

Autor: Heinz Ketchup (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Bascom kann man am Start des Programmes
die Anweisung $NORAMCLEAR einfügen.
Das wird das RAM nach dem Reset
nicht durch den Bascom-Code auf Null gesetzt.

Heinz

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@QuadDash: Ja, hast recht.
Der SRAM bleibt bei einem Reset erhalten.
Habe vor meiner RAM-initiallisierung eine kleine Routine gemacht, die
mir den LCD-Buffer in das EEPROM kopiert.
Beim Einschalten des AVR ist da wirres Zeugs.
Nach Reset ist da tatsächlich noch das, was vorher zuletzt auf dem LCD
angezeigt wurde.
Somit ist es schon mal technisch machbar, ein paar Zellen, Word oder
Long, auf Gültigkeit zu prüfen und wenn das Init des SRAM zu umgehen.

Wie sieht es in BASCOM mit DIM Var aus?
Wird durch die Definition der Variablen deren physikalischer Inhalt im
RAM sofort gelöscht?
Oder gibt es Peek und Poke im BASCOM?

Gruß
Andi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.