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
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
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
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
> 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).
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
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.