Hardware Reference
In-Depth Information
detektieren können. Der im Beispielgerät eingesetzte Mikrocontroller PIC18F4550
verfügt über insgesamt sieben verschiedene Leistungszustände, die der Anwender
mithilfe der Firmware auswählen kann [DataSheet: Tabelle 3.1]. Der Stromver-
brauch des Mikrocontrollers hängt maßgeblich davon ab, mit welcher Frequenz
CPU und Peripheriemodule getaktet werden. Die normale Betriebsart, in der CPU
und Peripherie vom Primäroszillator getaktet werden, nennt sich PRI_RUN. In die-
ser Betriebsart muss der Mikrocontroller arbeiten, wenn die USB-Schnittstelle
funktionieren soll.
In dieser Betriebsart wird kein Strom gespart. Anstelle des Primäroszillators können
wahlweise zwei andere Taktquellen verwendet werden. Entweder kommt der Takt
aus dem Timer1 Oszillator des Derivats oder aus einem internen Oszillator. Beide
Alternativen führen zu Stromeinsparungen infolge geringerer Taktrate. Diese
Betriebsarten sind SEC_RUN bzw. RC_RUN. Eine weitere Einsparung ergibt sich,
wenn die CPU nicht getaktet wird, sondern nur die Peripheriemodule. Das sind die
Stromsparbetriebsarten PRI_IDLE, SEC_IDLE oder RC_IDLE. Alle die bisher auf-
geführten Möglichkeiten sind ungeeignet, die von USB 2.0 vorgegebene Forderung
zu erfüllen, den Stromverbrauch auf maximal 500
`
A zu begrenzen. Das gelingt nur
in der Betriebsart SLEEP, in welcher weder CPU noch Peripherie mit Taktsignalen
versorgt werden. Wenn daher der Zustand „Suspended“ eingenommen werden soll,
muss der PIC18F4550 in den Stromsparzustand SLEEP gebracht werden. Zuvor
muss aber per Software dafür gesorgt werden, dass keine Komponente der einge-
setzten Hardware im statischen Zustand, der durch SLEEP verursacht wird, Strom
aufnimmt. Für das Beispielgerät gilt, dass alle LEDs und alle Relais ausgeschaltet
werden müssen, bevor CPU und Peripherie schlafen gehen. USB-Busaktivität muss
den Mikrocontroller wieder aufwecken. Dazu muss der entsprechende Interrupt
aktiviert werden, bevor der Stromsparzustand SLEEP eingenommen worden ist. Im
folgenden Listing wird deutlich, wie der Zustand „Suspended“ erreicht wird. In der
Hauptprogrammschleife MainLoop der Firmware wird gleich zu Beginn überprüft,
ob Busaktivität vorhanden ist. Wenn nicht, wird nach MainLoop_suspend ver-
zweigt.AndieserStellewirddasUSB-ModulvonPIC18F4550indenZustand
„Suspended“ gebracht. Der Schaltzustand aller LEDs und Relais wird gemerkt,
damit er beim Aufwachen rekonstruiert werden kann. Darauf werden alle LEDs
und Relais abgeschaltet. Dann wird dafür gesorgt, dass der Interrupt zum Aufwe-
cken aktiviert ist, und danach wird der Stromspar-Zustand „SLEEP“ veranlasst.
Nach dem Aufwachen wird das Programm mit dem Befehl nach dem sleep-Kom-
mando fortgesetzt, nachdem zuvor die zugehörige Interrupt Service Routine durch-
laufen wurde.

