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...
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...
Ich glaube du kannst den µC auch mittels Timer-Interrupt wieder "aufwecken" !
Welchen Controller hast du denn?
ich hab den Mega8. Er soll aller 60min eine Messung machen und sich dann wieder "schlafenlegen".
Im Datenblatt steht folgendes, falls du dass nicht eh schon gelesen hast:
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".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.
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.
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!
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.
kannst Du mal den Code posten?
danke
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.
Code:' 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
Lesezeichen