PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stromsparen



guenter1604
13.12.2008, 09:45
Hallo NG,

eine Fernbedienung soll möglichst wenig Strom verbrauchen. Dazu will ich 3 Stufen einbauen:

Stufe1: Vollbetrieb

Stufe2: LEDs runtergedimmt und nur das Wichtigste wird abgearbeitet

Stufe3: Schlafmodus, mur noch die Fernbedienungstasten werden hie und da abgefragt

welche Tricks zum Stromsparen könnte ich einsetzen?
welche Tricks bringen am meisten?
was ist der Sinn des Lebens?

Günter

guenter1604
13.12.2008, 10:23
meine Nachforschungen ergaben bis jetzt folgendes:

-internen RC-Oszillator verwenden
-niedere Frequenz
-niedere Spannung
-ATMega88V statt ATMega88 verwenden
-in Power-down Modus versetzen

zum Power-Down jetzt folgende Frage:

Über einen externen Interrupt kann ich meinen ATMega wieder aufwecken. Da ich aber einige Taster an einigen Eingängen hängen habe schalte ich jeden Eingang über eine Diode an einen extra Interrupteingang, der dadurch bei einem beliebigen Tastendruck heruntergezogen wird.
Geht das auch anders (ohne Dioden) ?

Günter

vohopri
13.12.2008, 10:30
Hallo,

du schreibst nichts über die Anwendung der fb. Eventuell könnte sie dadurch aufwachen, dass man sie in die Hand nimmt und dadurch erschüttert. In diesem Fall könnte sie zwischen den Gebrauchsphasen ganz schlafen gehen.

grüsse,
v.

guenter1604
13.12.2008, 10:34
Hallo vohopri,

sorry, da war ich ein bisschen ungenau:

Der Sleepmodus soll durch irgendeinen Tastendruck beendet werden.

Günter

vohopri
13.12.2008, 10:40
OK,

dann verbraucht das Polling natürlich Energie. Das könnte man mit dem Erschütterungssensor vermeiden.

v.

Besserwessi
13.12.2008, 10:43
Wenn man die Tasten so hat, das ein ext. Interrupt oder Pin Change Interrupt ausgelöst wird, kann man den "Tiefschlafmodus" (Power down) nutzen. Für mehrere tasten wären wohl der PinChange Interrupt die richtige Wahl.

Der Mega88V hat nur Vorteile wenn man wirklich die niedrigere Spannung nutzt. Auch bein Mega88 hilft die niedrigere Spannung, die garantierte minimale Spannung ist aber höher. 3 V, d.h. 2 Batteriezellen ohne Regler wären wohl ein guter Kompromiss, der sogar mit der normalen VErsion noch geht. Wenn man mit 2 NiCd Akkus klarkommen will (doch mehr Stromverbrauch), dann sollte man besser die V Version nehmen.

Für kleinen Stromverbrauch solle man auch offene Eingänge mit millterer Spannung vermeiden. Das ist es besser die internen Pullups zu aktivieren.

guenter1604
13.12.2008, 11:08
Hallo Besserwessi,

PinChange Interrupt hört sich ja cool an, da werd ich mich mal im Manual schlau machen...

Günter

guenter1604
13.12.2008, 11:31
Hallo NG,

genügt ein:

Pcicr = &B00000010

um den Interrupt an den Eingängen PC0 bis PC6 zu aktivieren und mein Problem zu lösen ?

Eine Interruptroutine müsste ich ja garnicht schreiben, denn der Interrupt durch Tastendruck weckt den Kerl ja sowiso und mehr will ich ja garnicht.

Günter

bb_stefan
13.12.2008, 11:53
Hallo NG,
Eine Interruptroutine müsste ich ja garnicht schreiben, denn der Interrupt durch Tastendruck weckt den Kerl ja sowiso und mehr will ich ja garnicht.


Das hängt von der "Aufweck-Politik" des µC ab. Ich kenne Deinen Controller nicht, bei einem MSP430 z.B. ist es aber so, dass ein IRQ den SleepMode beendet, die ISR ausgeführt wird und danach wieder der SleepMode aktiviert wird, wenn man explizit nichts anderes will.
D.h. hier, ein MSP430 würde -ausser kurz aufwachen- gar nichts tun!

guenter1604
13.12.2008, 12:07
Hallo Stefan,

so wie ich das verstanden habe beendet ein Interrupt den Power-Down Mode und der ATMega88 macht an der Stelle nach !Sleep weiter und muss bei Bedarf erneut mit !Sleep eingeschläfert werden.

Günter

Besserwessi
13.12.2008, 12:16
Um den Pinchange zu aktivieren muß man aber auch noch die genauen Bits im Register PCMSK0/1/2 angeben.
Ganz auf eine ISR kann man so wie ich das sehe nicht verzichten, denn das I Bit muß gesetzt sein. Damit wird die ISR dann auch wirklich aufgerufen, und es muß wengstens eine leere Routine da sein. In ASM kann das sogar ein einfaches RETI an der stelle des normalen Interrupt Vekors sein. In BASIC wohl ein RETURN mit passenden Header dazu.

guenter1604
13.12.2008, 12:25
Hallo Besserwessi,

wie heißen die Befehle in Bascom?

Enable Pcint1
On Pcint1 MeinInterrupt

MeinInterrupt:
Return

oder soll ich endgülig auf Assembler umsteigen ;-)

Günter

Besserwessi
13.12.2008, 14:31
Die Bascom Befehle sehen schon gut aus. Ich kenne BASCOM aber nicht wirklich gut. Eventulel macht das Enable PCINT auch gleich das Pcicr = &B00000010 mit.

Auf ASM würde ich nicht unbedingt empfehlen, eher schon C.

guenter1604
13.12.2008, 17:53
Hallo Besserwessi,

die ASM-Leute sagen aber C und Basic währe was für Warmduscher ;-)

Die sind aber von dem vielen Kaltduschen recht verkrampft.

Günter

Besserwessi
13.12.2008, 19:14
Ich bin sonst eher einer von den ASM Leuten. Basic wäre nicht schlimm, aber BASCOM ist nicht mal das.

felack
17.12.2008, 16:06
Hallo guenter1604,



im Anhang findest Du ein Programm, das ich benutze, um mit drei Tasten das Radio für eine bestimmte Zeit abzuschalten (Werbung, Nachrichten usw.). Die Schaltung läuft mit 3 Micro-Alkalinebatterien bereits mehrere Monate ohne Batteriewechsel. Stromverbrauch im Powerdownmodus liegt unter 1 µA. An der Stelle der Unterprogramme Eineminute, Fünfminuten und Zehnminuten müsstest Du dann die RC5-Befehle senden. Wie das geht ist beim Befehl "RC5SEND" in der Bascom-Hilfe beschrieben. Das Programm nutzt sowohl Powerdown als auch den Watchdogtimer. Den Watchdogtimer kannst Du verwenden um die Fernbedienung mit den gedimmten LEDs zu benutzen. Bei weiteren Fragen bitte melden.



felack

guenter1604
17.12.2008, 17:58
Hallo felack,

welchen Zweck hat:

Pause_64: 'MCU für 64 ms ausschalten

Reset Watchdog
Enable Watchdog
Powerdown
Disable Watchdog

du legst den Controller schlafen, zuvor schaltest du den Watchdog ein?

guenter1604
17.12.2008, 22:35
Hallo NG,

der Code gibt jetzt bei Tastendruch den Command 12 aus. Wird nicht gedrückt, geht der Controller schlafen.



$regfile = "m8def.dat"
$crystal = 3686400

Dim Togbit As Byte , Command As Byte , Address As Byte

Enable Interrupts
Enable Int0
On Int0 Meininterrupt

Config Int0 = Low Level
Config Portd.2 = Input
Portd.2 = 1

Command = 12
Togbit = 0
Address = 0
Do
Powerdown
Loop

Meininterrupt:
Rc5send Togbit , Address , Command
Return


Günter

felack
18.12.2008, 14:19
Hallo Günter,

Der Werbeblocker schaltet den Lautsprecher für 1,5,oder 10 Minuten aus. Diese Zeit wird mit dem Watchdogtimer erzeugt. Da der Mikrocontroller sonst nichts zu tun hat, wird der abgeschaltet und nach 64 ms vom Watchdog wieder aktiviert. Dann überprüft er, ob die Zeit abgelaufen ist (a=1) und wenn nicht legt er sich wieder schlafen. Im Powerdown mit Watchdog braucht der Mikrocontroller etwa 7 µA an Strom.

felack