PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu "Idle" Befehl



spaceduck
01.04.2006, 22:13
Hallo,

ist es möglich mit Hilfe des Idle Befehls (oder Powerdown) den Prozessor für eine bestimmte Zeit abzuschalten? Will heißen, er soll automatisch nach x min. wieder "aufwachen" und nicht durch ext. Signal wie Interrupt o.ä.

Danke schon mal...

skillii
02.04.2006, 12:57
Ich glaube du kannst den µC auch mittels Timer-Interrupt wieder "aufwecken" !

Welchen Controller hast du denn?

spaceduck
02.04.2006, 15:45
ich hab den Mega8. Er soll aller 60min eine Messung machen und sich dann wieder "schlafenlegen".

skillii
02.04.2006, 16:04
Im Datenblatt steht folgendes, falls du dass nicht eh schon gelesen hast:


When the SM2..0 bits are written to 000, the SLEEP instruction makes the MCU enter
Idle mode, stopping the CPU but allowing SPI, USART, Analog Comparator, ADC, Twowire
Serial Interface, Timer/Counters, Watchdog, and the interrupt system to continue
operating. This sleep mode basically halts clkCPU and clkFLASH, while allowing the other
clocks to run.
Idle mode enables the MCU to wake up from external triggered interrupts as well as
internal ones like the Timer Overflow and USART Transmit Complete interrupts. If
wake-up from the Analog Comparator interrupt is not required, the Analog Comparator
can be powered down by setting the ACD bit in the Analog Comparator Control and Status
Register – ACSR. This will reduce power consumption in Idle mode. If the ADC is
enabled, a conversion starts automatically when this mode is entered.


Also du brauchst wahrscheinlich einen Timer der in regelmäßigen Abständen einen Interrupt auslöst. Dann wirst du die Messung machen und den Controller wieder "schlafenlegen".
60 min wirst du mit dem Timer nicht schaffen, also wirst du den Controller z.B.: im Sekundentakt aufwecken und eine Variable hochzählen müssen, damit du weißt wenn eine Stunde vergangen ist.

spaceduck
03.04.2006, 17:12
Hallo skillii,

danke für deine Antwort. Trotzdem nicht so ganz das was mir vorschwebt.
Den Controller jede sek "aufwecken" bringt sicher nicht die gewünschte Energieeinsparung (Batterie) die ich mir vorstelle.

Trotzdem danke!

Windi
04.04.2006, 19:03
Ich habe einen Powerdown-Modus mit dem Watchdog-Timer realisiert.
Die längste Zeit die der Prozessor (Tiny13V) so "schlafen" kann sind 8 Sekunden. Bringt aber einiges an Stromersparniss. Der Leerlaufstrom bei Powerdown liegt im Mikroampere-Bereich.

EDIT: Hab grad im Datenblatt vom Mega8 nachgesehen. Die maximale Powerdown-Zeit per Watchdog liegt bei etwas über 2 Sekunden.

spaceduck
06.04.2006, 06:39
kannst Du mal den Code posten?

danke

Windi
06.04.2006, 15:08
Bitteschön, hier ist das Programm.

Beim Mega8 hat das WDTCR-Register des Watchdogs allerdings nicht die gleiche Funktionalität. Hier musst Du vermutlich noch das MCUCR-Register verwenden.
Ich habe leider keinen Mega8 da sonst könnte ich es ausprobieren.



' Prozessor in den Schlaf schicken und per Watchdog aufwecken
' µC: ATtiny13
'
' ==================================================

$regfile = "ATtiny13.DAT"
$crystal = 128000
Config Portb = &B00011000
Portb = &B11100111
Stop Adc
Stop Ac

'Watchdog definieren: 8 Sekunden, Interrupt auslösen, kein Reset
Wdtcr = &B11110001

'Interrupts freigeben
Enable Interrupts


Dim A As Byte

Do
Gosub Blinken
Loop



Blinken:
For A = 1 To 100
Portb.3 = 1
Waitms 20
Portb.3 = 0
Waitms 20
Next A

'Watchdog-Timer zurücksetzen
Reset Watchdog

'Prozessor schlafen schicken
Powerdown
'Das Programm läuft nach Ablauf der WD-Zeit hier weiter

Return

End