PIC-Lernbeispiel: IR-Fernbedienung mit PWM

für Philips-Geräte
(in Arbeit)

zurück zu Lernbeispiele , PIC-Prozessoren , Elektronik , Homepage


wenn ein Gerät über einen langen Zeitraum von einer Batterie versorgt werden muss, dann ist Stromsparen angesagt.
Die Grundlagen der Infrarot-Fernbedienungen sind an anderer Stelle erörtert worden. In einem anderen Lernbeispiel haben wir auch schon eine Fernbedienung aufgebaut. Dort wurden die Impulse komplett per Software erzeugt. Man kann dazu aber auch das CCP-Modul des 16F628 benutzen - genauergesagt den PWM-(Pulsweitenmodulation)-Ausgang.


Schaltung
Stromlaufplan der Fernbedienung Die Schaltung besteht aus einem PIC16F628, einer 4-MHz Taktquelle, diversen Tasten und der IR-LED.
Die Tasten sind an den Port B angeschlossen, und die LED an den Port A  Die Widerstände R3..R5 schützen RB0..RB2 vor Kurzschluss, falls mehrere Tasten gleichzeitig gedrückt werden.

Da der PWM-Ausgang des 16F628 identisch mit RB3 ist, müssen wir die IR-LED mit RB3 ansteuern. Mit den verbliebenen Pins des PortB lassen sich 12 Tasten ansteuern. Wer mehr Tasten benötigt, kann natürlich die unbenutzten Pins des Port A einbeziehen

Zur Stromversorgung kann man z.B. 3 in Reihe geschaltete AAA-Zellen benutzen.
Wer einen 16LF629 hat kann diesen im LP_Mode brennen, und mit nur 2 AA-Zellen betreiben.

Falls die Reichweite der Fernbedienung nicht ausreichend sein sollte, kann R2 weiter verringert werden. Aufgrund des gepulsten Betriebs sind Werte bis hinab zu 10 Ohm unkritisch. In mit AAA-Zellen gespeisten Fernbedienungen wird oft gar kein Vorwiderstand benutzt, da der Kurzschlussstrom der AAA-Zellen kleiner ist als der Peak-Strom der LED. Die Verwendung eines Widerstandes empfehle ich aber dringend, da schon die im Elko gespeicherte Energie die LED zerstören könnte.

Zum Aufbau eignet sich z.B. die 16F84-Testplatine. oder die 16F84-Minitestplatine.

Bitte darauf achten, das beim Brennen LV-Programming-Enable nicht aktiv ist.



Strom sparen

Natürlich muss bei einem batteriebetriebenen Gerät der Stromverbrauch minimiert werden. Deshalb verwende ich wieder einen 4-MHz-Takt, wodurch ich den PIC mit dem stromsparenden aber ausreichend schnellen XT-Mode betreiben kann.

Zwischen der Übertragzung von IR-Befehlen schicke ich den PIC mit dem SLEEP-Kommando in den power-down-Mode

Ich wecke in diesem Beispiel den PIC durch einen 'Interrupt durch Pegelwechsel an RB4..RB7', den die gedrückte Taste auslöst. Dazu verbindet die Taste eines der Pins RB0..RB2 mit einem der Pins RB4..RB7. Die Pins RB0..RB2 führen während des Schlafs Low-Pegel, während die Pins RB4..RB7 mit internen pull-up-Widerstaänden auf high-Pegel gehalten werden. Beim Tastendruck ändert sich der Pegel an einem der Pins RB4..RB7 von high auf low, woraufhin das Interrupt-Flag gesetzt wird.



PWM

Das auszusendende IR-Licht ist pulsmoduliert. RC-5-Code benutzt dazu eine Modulationsfrequenz von 36 kHz bei einer Pulsweite von 6,944 µs und Pausen von 20,8332 µs zwischen den Pausen. Das lässt sich mit einem 4 MHz-PIC-Takt nicht genau einhalten, aber Pulse von 7 µs und Pausen von 21 µs werden genau genug sein. Die damit enstehende Periode von 28 µs ergibt eine Modulationsfrequenz von 35,7 kHz, was von der RC-5-Norm um weniger als 1% abweicht.

Zur Einstellung der Periode wird der Vorteiler des Timer2 auf ein Teiverhältnis von 1:1 eingestellt. Dadurch wird der Timer1 mit 1 MHz getaktet. Um eine Periode von 28 µs zu erreichen, stellt man das Periodenregister PR2 auf den Wert 27 ein.

Immer zu Beginn einer Periode wird der Ausgang RB3 auf High-Pegel geschaltet, die LED leuchtet. Um sie nach 7 µs auszuschalten muss man das Register CCPR1L auf den Wert 6 einstellen. Erreicht der Timer1 diesen Wert, dann wird RB3 auf low geschaltet, und die LED geht aus.

Nu kann man die IR-Impulse ein- and ausschalten, indem man das Port RB3 mit TRISB,3 ein- oder ausschaltet.
 



Programmablauf Der PIC verbringt also die meiste Zeit im Schlaf.


Programmlisting

noch nicht fertig

zurück zu Lernbeispiele , PIC-Prozessoren , Elektronik , Homepage
Autor: sprut
erstellt : 21.02.2003
letzte Änderung: