erstellt  20.10.2011
Infrarot Fernbedienung
Infrarotlicht ist ein Licht mit einer bestimmten Wellenlänge außerhalb des für Menschen sichtbaren Bereich.
Dieses Licht wird von fast allen Lichtquellen erzeugt, allerdings meist im zusammenspiel mit anderen Wellenbereichen,
welches das meiste Licht damit sichtbar macht.
Weil reines Infrarot aber vom Menschen nicht zu sehen ist und nur dass von Infrarot Dioden ausgesendet wird, wird in vielen Fällen zu dem Infrarotlicht noch ein sichtbares
Licht ausgesendet, ein sogenanntes Pilot Licht dass meist nur dazu dient das Unsichtbare Licht sichtbar zu machen.
Bei Fernbedienungen ist es allerdings nicht so. Also erscheint dieses Licht für uns unsichtbar.
Die meisten CCD Chips  , also die Empfängerchips in Fotoapparate ,Videokameras, Handys usw. können diese Infrarot Strahlen (Licht) aber erkennen,
und damit auch sichtbar machen.
Hält man beispielsweise eine Infrarot-Fernbedienung vor einer Kamera kann man vorausgesetzt diese Kamera hat einen Monitor , damit die Infrarotstrahlung auch sehen.
Das bietet sich beispielsweise an um zu überprüfen ob eine Fernbedienung überhaupt sendet, allerdings können wir damit nicht die korrekte Funktion prüfen. 

Infrarot Fernbedienungen benutzen oft  ein RC5 Standard Protokoll welches vom Atmega Prozessor mit einen speziellen Befehl ausgewertet werden kann.
Mit dem Atmega lässt sich so ganz komfortable eine Infrarot Empfänger aufbauen, das Herzstück bildet  ein Infrarot Fotoempfänger SFH 5110
zu beziehen beispielsweise über
Reichelt  oder auch alternative Typen mit der Bezeichnung TSOP1136 , TSOP1736 oder SFH506-36.
Der Infrarot Empfänger besitzt drei Anschlüsse, Plus , GND und einen Digitalen Ausgang der das schon ausgewertete Infrarot Signal in Digitaler Form zur Verfügung stellt.
Die Datenübertragung wird in Form eines 14 Bit langen sogenannten Bi - Phasichen Signal übertragen
 ( Bi Phasisch bedeutet in dem hier vorliegendem Fall  das zur  Auswertung eines Bit immer eine Kombination aus 0 und 1 benötigt wird.)

Um also eine 1 zu erkennen wird eine Kombination von Null und Eins benötigt.
0,889 ms Null und anschließend 0,889 ms Eins bedeutet also eine 1
0,889 ms Eins mit anschließend 0,889 ms Null bedeutet demnach eine 0







Die Bits haben im einzelnen folgende Funktionen:
1.Bit und 2. Bit  sind sogenannte Startbits damit der Empfänger weiß wann er anfangen soll das Signal  auszuwerten,
bei diesem Protokoll sind diese immer 11 (eins,eins).

Das nächste Bit ist ein sogenanntes Toggelbit es wechselt seinen Zustand bei jedem folgenden Signal,
somit kann festgestellt werden, ob ein Signal wiederholt wurde oder nicht.
Es kann so unterschieden werden ob beim Sender beispielsweise eine Taste dauerhaft festgehalten oder aber wiederholt gedrückt wurde.

Dann folgen 5 Systembits, zuständig für die Auswahl der Empfangenen Geräte ( siehe Tabelle ).
Anschließend folgen noch 6 Kommandobits mit den die Kommandos für beispielsweise Lautstärke , Kontrast, Programmauswahl usw. erfolgen.
Durch diese 6 Kommandobits ergeben sich durch Kombination 64 vershiedene Kommandos.
In der Tabelle unten , sehen wir ein vollständiges Signal, es wird die Geräteadresse 5  angesprochen und das  Komando 53(Dezimal) oder 35 (Hex.)   übergeben .
Copyright by ms

Systembits
Adresse Gerät




0
Video
TV1
1

TV2
2

Teletext
3


5

VCR1
6

VCR2
8

Sat-Receiver
9

Kamera
10

Sat Receiver 2
12

Video - CD
13

Camcorder
17
Audio
Tuner
18

CD
20

Phono
21

Recorder1



1. Bit
2. Bit
3. Bit
4. Bit
5. Bit
6. Bit
7. Bit
8. Bit
9. Bit
10. Bit
11. Bit
12. Bit
13. Bit
14. Bit
Startbit
Toggelt
Geräteadresse
Komandobits
1
1
0
0
0
1
0
1
1
1
0
1
0
1

Ein komplettes Signal besteht also aus 14 mal 1,778ms  also insgesamt 24,89ms.
 Was kann ich nun mit einem Empfänger anfangen ?
Also man kann so Schaltungen aufbauen die ohne Taster ,Schalter Potis auskommen , es ist so möglich die meisten Eingabefunktionen mit einer Standard Fernbedienung zu erledigen.


Das obere Signal wird erzeugt wenn Taste 1 gedrückt, das untere Signal wenn Taste 2 gedrückt.







Im unten folgenden Programm wird der RC5 Code intern unter Zuhilfenahme des Timer 0 welcher nicht explizit angegeben wird ausgewertet.

Programm
Codezeilen
Beschreibung
Allgemeine Prozessor Konfiguration
$regfile "m8def.dat"   
Definiert den Atmega als Atmega8
$crystal = 1000000    
Gibt die Quarzfrequenz an in Herz
$hwstack = 32          
Default use 32 Hardware reservierte Speicher
$swstack = 10          
Default Software resvierung Speicher
Konfiguration fürs Display
Config Lcd = 16 * 2 Text-Display mit 2 mal 16 Zeichen benutzen
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , Rs = Portc.5 , E = Portc.4 Anschlußpins des Display konfigurieren
EIN / Ausgänge konfigurieren
Ddrd = &B11100000      
Port D7,D6 und D5 als Ausgang Rest als Eingang
Portd = &B00000100     
PullUp setzen für Pin D.2
Config Rc5 = Pind.2   
Pind.2 als Eingang für IR Signal


Enable Interrupts  
Interrupts Global freigeben
Dim Address As Byte , Command As Byte Variable definieren
Dim Flag As Bit Variable  definieren
Flag = 1
Do Anfang der Programm-Schleife
Getrc5(address , Command) RC5 Adresse und Kommando wird abgefragt
If Flag = 1 Then
Lcd "Wait for commando" Displayanzeige
Flag = 0
End If
If Address <> 255 Then Bei erkannter Adresse
Reset Command.7 Toggelbit löschen
Cls Display löschen
Locate 1 , 1 Cursor im Display  auf Zeile1 Spalte 1 setzen
Lcd "Adres:" ; Address;
Locate 2 , 1 Cursor im Display auf Zeile 2 Spalte 1 setzen
Lcd "command" ; Command
Flag = 1
End If
If Command = 1 Then Gosub 1 Bei Empfang von Kommando 1 zur Unterroutine 1 springen
If Command = 2 Then Gosub 2 Bei Empfang von Kommando 2 zur Unterroutine 2 springen
If Command = 3 Then Gosub 3 Bei Empfang von Kommando 3 zur Unterroutine 3 springen
If Command = 4 Then Gosub 4 Bei Empfang von Kommando 4 zur Unterroutine 4 springen
Loop
 End
Unterroutine 1
1: Anfang Unterpgogramm " 1"
Portd.5 = 1
Wait 2
Portd.5 = 0
Return Ende Unterprogramm  "1"
Unterroutine 2
2: Anfang Unterpgogramm " 2"
Portd.6 = 1
Return Ende Unterprogramm "2"
Unterroutine 3
3: Anfang Unterpgogramm " 3"
Portd.6 = 0
Return Ende Unterprogramm "3"
Unterroutine 4
4: Anfang Unterpgogramm " 4"
Toggle Portd.7
Waitms 300
Return
Ende Unterprogramm "4"

Die Anwendung GETRC5 benutzt im Hintergund den Timer0 und dessen Interrupt, der somit für andere Anwendungen nicht mehr zu Verfügung steht.
Aktualisiert 31.12.2017