Forum: Mikrocontroller und Digitale Elektronik BASCOM-AVR und Var


von Kurt (Gast)


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

von Andi (Gast)


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

von Kurt (Gast)


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

von Andi (Gast)


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

von ---- (Gast)


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).

von Kurt (Gast)


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

von Heinz Ketchup (Gast)


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

von Andi (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.