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 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 |