Sämtliche Multimedia-Geräte können heutzutage über eine Fernbedienung gesteuert werden. Die verbreiteste Übertragung der Fernbedienungs-Codes erfolgt mittels Infrarot-Licht. Grund dafür ist die zuverlässige Bedienung und die extrem billige Produktion (billige ICs, wenige passive Komponenten). Die Fernbedienung sendet über eine IR-Diode den durchzuführenden Befehl. Dieser wird vom Multimedia-Gerät durchgeführt, wobei er zuvor über einen IR-Empfänger dekodiert wurde.
Bit-Kodierung:
|
Trägerfrequenz:
|
Für ein besseres Verständnis analysierte ich einige Ausgangssignale von meinen vorhandenen Fernbedienungen. Im unteren Abschnitt kann man die Logic-Analyzer Aufnahmen mit den theoretischen Zeiten vergleichen.
Das Signal in der 1. Reihe stellt den RC5-Code von Philips dar. Der High-Pegel steht für eine getaktete Ausgabe des IR-Lichtes, während dem Low-Pegel erfolgt keine IR-Licht-Ausgabe. Die Signale in den Reihen 2 bis 5 haben negierte Pegel. Also wird beim Low-Pegel IR-Licht mit der modulierten Frequenz detektiert.
Das Signal in Reihe 2 wurde von einem Logic-Analyzer aufgenommen und für die weitere Verarbeitung in eine .csv-Datei exportiert. Die ersten 3 Pulsfolgen stammen vom ersten Tastendruck und die 3 Pulsfolgen am Ende von einem erneutem Tastendruck. Die weiteren Signale stellen immer einen vergrößerten Ausschnitt dar.
Das Signal in Reihe 3 stellt die wiederholten Ausgaben einer gedrückten Taste dar. Die gemessene Wiederholungs-Zeit (repetition-time) ist 113,68ms.
Das Signal in Reihe 4 repräsentiert folgende Bits: 11 1 01000 000000 (Drücken und Festhalten der Taste 0)
Das Signal in Reihe 5 repräsentiert folgende Bits: 11 0 01000 000000 (nach erneutem Drücken auf die Taste 0 - geändertes Toggle-Bit)
Fernbedienungsempfänger:
Damit ich für meine zukünftigen Projekte die Möglichkeit der "Fernbedienbarkeit" habe baute ich auf Basis des Atmel AT90USBKey eine Empfänger-Domonstration auf. Als IR-Empfänger wurde der SFH 5110 verwendet. Dieser wurde mit Gnd und +5V verbunden und der IR-Ausgang über einen Spannungsteiler an den AT90USB1287 Mikrokontroller. Der Spannungsteiler ist nötig, da der uC mit 3,3V betrieben wird und somit sollten die Logik-Pegel diese Spannung auch nicht überschreiten. Damit das Signal leicht verarbeitet werden kann wurde ein PCI-Eingang verwendet (Pin Change Interrupt).
Die Firmware ist so aufgebaut, dass bei einem Pegelwechsel des IR-Signals ein Interrupt ausgeführt wird. In diesem wird die Zeit eines 16-bit Timers gespeichert und überprüft ob sie mit dem RC5 Zeitverhalten übereinstimmt. Für die Dekodierung wurde eine kleine Zustandsmaschine verwendet wo je nach Zustand eine Aktion durchgeführt wird. Wurde ein komplettes Kommando empfangen, so wird dieses gespeichert und dem Hauptprogramm mit einem Flag mitgeteilt. Das Hauptprogram gibt die neu empfangenen Kommandos mit den empfangenen Bits auf ein LC-Display aus.
Attachment | Size |
---|---|
IR codes.pdf | 51.86 KB |
IR Receiver - Source | 16.73 KB |