Schaltbild Funktion Demoprogramm
Für Mikroprozessoranwendungen, die im Batteriebetrieb arbeiten sollen, ist die Stromaufnahme im Betrieb aber besonders auch im ausgeschalteten Zustand von großer Bedeutung. Zum Ein- und Ausschalten der Stromversorgung gibt es mehrere Möglichkeiten.
Gut:
Die komplette Schaltung wird über einen manuellen Ausschalter von der Batterie
getrennt; während die Stromaufnahme im Betrieb vom verwendeten Prozessor
und den angeschlossenen Verbrauchern abhängt, läßt sie sich
im abgeschalteten Zustand auf Null reduzieren. Nachteil: ein vergessenes Ausschalten
oder Überlast können die Batterie schnell entladen.
Besser:
Eleganter wäre es, zum Ein- und Ausschalten der Schaltung ein Flip-Flop
zu verwenden und über einen entprellten Taster hin- und herzuschalten.
Überlast oder Timeout können das Flip-Flop gezielt zurückzusetzen
und damit das Gerät ausschalten. Verwendt man CMOS-Schaltkreise, ist die
Batterieentladung bei ausgeschaltetem Gerät zu vernachlässigen; eine
brauchbare Lösung. Nachteil: zusätzlicher Bauteilbedarf.
Optimal:
Prozessoren der Atmel-Serie AT90Sxxxx (ab 2kB Flash-EPROM) oder auch ATmega103
(128KB Flash-EPROM, 4KB RAM,...) eignen sich für stromsparenden Betrieb
im unteren bis mittleren Leistungsbereich. Neben dem Zustand 'idle', der die
Stromaufnahme stark senkt und von jedem auftretenden Interrupt beendet wird,
bieten sie auch 'power down' an. Mit 'power down' wird der Quarzoszillator gestoppt,
und alle internen Funktionseinheiten (I/O, RAM,...) werden eingefroren. Lediglich
der interne Watchdog (verbraucht ca. 50µA, wenn aktiv) und ein pegelgetriggerter
externer Interrupt können den Prozessor wieder aufwecken. Hier wird eine
Schaltung nebst Programm gezeigt, die mit nur zwei zusätzlichen Bauteilen
den Prozessor über seinen /INT0-Eingang mittels Taster ein- und ausschalten
kann: ein Widerstand 10k und ein Kondensator 100nF. Im ausgeschalteten Zustand
liegt die Stromaufnahme im nA-Bereich - internes RAM wird nicht verändert,
I/O-Leitungen können ihren Zustand beibehalten ! zum
Seitenanfang
Beispielhafte Realisierung der 'optimalen' Lösung:
Das Schaltbild zeigt die einfache Grundschaltung des AT90S2313; R2 und LED1
werden vom Demoprogramm angesteuert. Für die Ein-/Ausschaltfunktion sind
neben dem Taster SW1 lediglich R1 und C1 erforderlich.
Funktion:
Nach Anlegen der Versorgungsspannung wird der Prozessor initialisiert und geht
in den Zustand 'power down'. Im Ruhezustand wird /INT0 über einen prozessorinternen
Pullup-Widerstand (ca. 100k) auf '1'-Pegel gehalten. Drücken des Taster
SW1 zieht den Eingang /INT0 über R1 gegen GND und legt /INT0 auf '0'-Pegel,
der zum Aufwecken des Prozessors erforderlich ist. Öffnen des Tasters liefert
an /INT0 wieder den Ruhepegel. C1 filtert das Prellen des Tasters. Ausgehend
vom schlafenden Prozessor sind folgende vier Zustände des Tasters zu unterscheiden:
Im Demoprogramm werden nach 'reset:' und in der 'int0:'-Routine die Routinen 'c_laden:' bzw. 'c_entladen:' aufgerufen. Diese laden C1 aktiv auf den Pegel auf, der zur Auslösung des Interrupts geführt hat. Die Eingangs-Hysterese von /INT0 wird hiermit zusätzlich vergrößert. Das Demoprogramm zeigt zum einen, wie sich ein Programm selbst beenden kann - nach 20 x Blinken legt sich der Prozessor schlafen - und zum anderen, wie 'sleep'-Befehle im normalen Programmablauf verwendet werden können. Die Routine 'wait10:' wartet mittels 'sleep' auf Interrupts vom T0. Aufpassen: 'sleep' darf nur ausgeführt werden, wenn /INT0-enable noch aktiv ist, anderfalls gäbe es keinen Interrupt mehr, der den Prozessor aufwecken könnte.
Das Demoprogramm läuft auch auf einem AT90S1200; wird der interne Oszillator aktiviert, ist kein externer Quarzoszillator notwendig. Das Quellprogramm ist für IAR-Assembler geschrieben. AVRASM von Atmel erfordert ein paar Änderungen. Die Assembler findet man hier zum download. Zum schnellen Probieren kann auch avr_on.hex verwendet werden. Wie man den AT90S2313 effizient programmiert wird hier gezeigt.
Fragen, Tipps, Kontakt:
zum Seitenanfang zurück zur Übersicht