Schaltung
![]() |
Die Schaltung besteht aus einem PIC16F628, einer 4-MHz
Taktquelle,
vier Tasten und der IR-LED mit Treiber.
Die Tasten sind an den Port B angeschlossen, und die LED an den Port A. 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 Kurzschlußstrom 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.
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 muß 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.
Programmlisting
|
list p=16f628
;************************************************************** ;* ;* ---------------------------------- ;* PORTA: 0 - ;* 1 RC-5 Output ;* 2 - ;* 3 - ;* 4 - ;* ;* PORTB: 0 > ;* 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.