Schaltung
Die Schaltung besteht aus einem PIC16F628, vier Tasten, einem
Schalter (optional) und der IR-LED mit Treiber. Die Tasten sind an den Port B angeschlossen, und die LED an den Port A. Die nicht eingezeichneten Pins RA0, RA2..RA5 sollten im Interesse eines minimalen Stromverbrauchs mit Vss verbunden werden. Zur Stromversorgung kann man z.B. 3 in Reihe geschaltete
AAA-Zellen
benutzen. 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. Der Schalter am Pin 6 dient der Umschaltung zwischen zwei
Anwendungsfällen. Ist der Schalter offen (oder schlichtweg nicht
vorhanden), dann werden die wichtigsten vier Codes für ein
Phillips-TV-Gerät erzeugt. Ist der Schalter aber geschlossen, dann
werden anstelle der Lautstärkenkommandos die Codes für die
Programmtasten "0" und "9" gesendet. Damit eignet sich die
Fernbedienung ideal als Sender
für diesen RC5-Empfänger. |
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.
PICs sind zwar keine Stromfresser, aber auch eine Dauerstromaufnahme
von wenigen Milliampere leert jede Batterie in wenigen Tagen.
Zur Senkung der Stromaufnahme gibt es prinzipiell drei
Möglichkeiten:
Nutzung des Sleep-Mode
In einer Fernbedienung hat ein PIC die meiste Zeit gar nichts zu tun,
das Gerät wird ja nicht pausenlos benutzt. Da kann man den PIC in
der arbeitsfreien Zeit schlafen legen. Dazu gibt es einen
'power-down-mode',
in dem der PIC die Arbeit einstellt, und dann weniger als 10 µA
verbraucht.
Beim Druck auf eine Fernbedienungstaste muss der PIC
natürlich
wieder aufwachen.
Ein PIC kann auf drei verschiedenen Weisen geweckt werden:
Man könnte auch 16 Taster als Matrix
zwischen die Pins RB0..3 und RB4..7 anordnen. Dann verbindet die
gedrückte
Taste eines der Pins RB0..RB3 mit einem der Pins RB4..RB7. Da RB0..3 in
diesem Beispiel Low-Pegel ausgeben, wird der PIC aus dem Schlaf
geweckt.
Nun kann der PIC analysieren, welche der 16 Tasten gedrückt wurde,
und einen von 16 möglichen IR-Befehlen aussenden. Die weiter unten
vorgestellt Software unterstützt zunächst aber nur 4 Tasten.
freie Pins
Freie Input-Pins können zu einem erhöhten Stromverbrauch
führen, da sie unkontrolliert zwischen high und low schwingen
können. Um den Stromverbrauch im Sleep-Mode zu minimieren sollte
man freie Input-Pins also mit Vdd und Vss verbinden, oder zu offenen
Output-Pins machen. Die freien Pins des PortB liegen durch interne
Pull-up-Widerstände fest auf High-Pegel. Wer diese Schaltung
wirklich dauerhaft verwenden will, sollte aber die freine Pins des
PortA (RA0, RA2..RA5) z..B. mit Vss verbinden.
Programmlisting
list
p=16f628 ;************************************************************** ;* ;* ---------------------------------- ;* PORTA: 0 - ;* 1 RC-5 Output ;* 2 - ;* 3 - ;* 4 - ;* ;* PORTB: 0 < 0: 0/9 1: leise/laut ;* 1 > ;* 2 > ;* 3 > ;* 4 < Taste 4 ;* 5 < Taste 5 ;* 6 < Taste 6 ;* 7 < Taste 7 ;* ;************************************************************** ; ; Senden von RC-5-codes an philips/marantz geräte ; ; An RB4..7 liegen 4 Tasten nach Masse ; beim Drücken einer Taste wird ein der Taste ; fest zugeordneter RC-5-code gesendet ; ; output: RA1 ; ; Takt 4 MHz ; ; ; RC5-code hatt 5 Adressenbits (A0-A4) und 7 Commandobits (C0-C6) ; und ist wie folgt als 14-bit code aufgebaut: ; 1. startbit=1 ; 2. invertiertes C6 ; 3. Toggelbit: wechselt seinen wert von code zu code ; 4. A4 ; 5. A3 ; 6. A2 ; 7. A1 ; 8. A0 ; 9. C5 ; 10. C4 ; 11. C3 ; 12. C2 ; 13. C1 ; 14. C0 ; ; ; ;**************************************************************************** #include <P16f628.INC> ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES ; Configuration festlegen:
toggel
Equ
0x20
; zählt ir-Sendungen, bit 0 ist toggelbit #define
IrOut PORTA, 1 ;****************************************************************************
Init ; 16F628 alle
Comparatoreingänge auf
Digital umschalten ; interrupt on change an PortB RB4..7
; pull-up ein Main
btfss
PORTB,4 ;****************************************************************************
;****************************************************************************
;Startbit
;invertiertes
C6
;Toggelbit
;A4,3,2,1,0
btfsc
gr,3
btfsc
gr,2
btfsc
gr,1
btfsc
gr,0 ;C5,4,3,2,1,0
btfsc
co,5
btfsc
co,4
btfsc
co,3
btfsc
co,2
btfsc
co,1
btfsc
co,0 return ;****************************************************************************
;****************************************************************************
;****************************************************************************
movlw
D'175' ;****************************************************************************
;31
Zyklen
aus
Pause und Puls return end |
In diesem Programm werden alle Pulse des RC-5-Protokolls durch Warteschleifen erzeugt. Man kann dafür aber auch das PWM-Modul benutzen. Wie das geht, wird hier erläutert.