PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sleep von ATMega in Bascom ?



rico65
23.05.2006, 09:15
Kann mir jemand sagen, wie ich den ATMage(168) in den Strom-Spar-Modus (mit Bascom) setze resp. wie der Sleep-Befehl funktioniert und/oder wo ich Infos dazu erhalte.
Der Compiler erkennt jedenfalls den Sleep-Befehl nicht und in der Bascom-Hilfe finde ich auch nichts und der Herr von Robotik-Hardware
will mir auch nicht helfen.
Danke für Hilfe!

Frank
23.05.2006, 09:51
Nicht helfen stimmt nicht so ganz. Robotikhardware hat dich auf den SLEEP Modus und das Datenblatt des AVR wo die Energiesparmodes beschrieben wird aufmerksam gemacht. Die dort beschriebenen Details nochmals ausführlich per Mail zu erläutern kann der Support nun auch nicht leisten, was meinst du was für eine Mailanzahl dort eingeht.
Dafür gibts ja auch das Forum, hier hilfts gleich mehreren.

Du musst in der Bascom Hilfe unter POWERDOWN schaun, dort solltest du fündig werden.

rico65
23.05.2006, 10:16
Du schriebst im Mail wörtlich "Hilfe in Bascom zu SLEEP studieren"...

Sommer
23.05.2006, 11:26
Hi,

also jetzt schluß mit dieser Diskusion!
Leider ist jeder Support zeitlich eingeschränkt, ich verstehe da Frank völlig!
PS: Man muss schon auch selber arbeiten wenn man im Winter nicht frieren will. Man kann den Kunden nur die die Türe zeigen, aufmachen und durchgehen muss er schon selber!

Hier ein Code der das ganze mal zeigt.


'PowerDown-Modus
'----------------------
' LED an PD5
'Taster 1 an INT0/PD2
'Funktion:
'In der Hauptschleife wird bei jedem Durchlauf der Zustand der LED geändert.
'Danach wird der AVR in den PowerDown-Zustand versetzt und damit "stillgelegt".
'Erst Ein externer Interrupt0 (Tastendruck) aktiviert den AVR wieder und das
'Programm wird fortgesetzt. Die Interrupt0-Routine wird in unserem Fall zwar
'als erste Aktion nach dem Interrupt ausgeführt, aber wir tun dort nichts
'weiter, weil es nur um die Demonstration der Reaktion in der Hauptschleife
'geht. Die Reaktion auf den Tastendruck ist übrigens jedes mal anders, da so
'lange Interrupts gefeuert werden, wie die Taste gedrückt ist (keine genau
'zu definierende Zeit). Es kann also sein, daß man die Taste mehrfach drücken
'muß.
'--------------------------------------
$regfile = "m32dat.def"
$crystal = 4000000

On Int0 Onint0 'Interrupt-Routine für Interrupt0 festlegen

Ddrd = &B11111011 'PD5 Ausgang, PD2/INT0 Eingang, Rest egal
Portd.2 = 1 'PullUp von PD2/INT0 aktivieren
Config Int0 = Low Level 'Externe Interrupts bei Low Level feuern (RISING oder FALLING beendet PowerDown nicht!)
Enable Int0 'Externen Interrupt0 einschalten
Enable Interrupts 'Interrupts global

Main:
Portd.5 = Not Portd.5 'LED-Status ändern (von ein nach aus oder von aus nach ein)
Powerdown 'PowerDown-Ende nur durch Reset, Watchdog Reset oder INTx bei Config INTx=LOW LEVEL
'Idle 'Idle-Ende auch bei Config INTx=FALLING u.a.m.
Goto Main
'--------------------------------------
Onint0: 'Wird angesprungen, aber wir tun hier nichts
Return

Viel spaß beim testen.

Bye Ulli