Armins AVR-Buch - IR_Empfaenger_mit_ATmega_auswerten

Zuletzt geändert am 15.01.2021, 01:22:21

IR_Empfaenger_mit_ATmega_auswerten


(armin77, 09.08.2013, 13:44:08)

Durch den Einsatz eines IR-Empfänger und einer Universalfernbedienung lassen
sich viele Geräte elegant und einfach steuern.
Bascom bietet dazu eine fertige komfortable Empfangsroutine für
Übertragungsprotokolle nach dem RC5 Standart. (Philips/Sony)
Diese Routine benutzt den Timer0, der damit nicht mehr im Hauptprogramm
benutzt werden kann.

Das Infrarotlicht wird mit 36kHz getaktet.
Daher sollte der Empfänger ebenfalls für 36kHz ausgelegt sein.

Eine Liste der einsetzbaren IR Empfänger.

SFH 5110
TSOP1136
TSOP1736
SFH506-36

oder Vergleichstypen.

Hier ein Beispielbild.

Bild Empfaenger.jpg


Zum Einsatz kommt eine einfache Universalfernbedienung von Medion.
Diese muß auf Philipps Fernseher eingestellt werden (sehr wichtig).


So habe ich den IR Empfänger an den ATMega 8 angeschlossen.
Im Bascom Programm habe ich den internen Pull-Up Widerstand von PinB.0 eingeschaltet.
Macht man dies nicht, sollte man einen externen Widerstand (ca.4,7K-10KOhm) von +5V zum
Ausgang des IR-Empfängers schalten.

Die Anschlußbelegung des IR-Empfänger (+5V, GND und Out) muß man selbstverständlich
im jeweiligen Datenblatt nachschauen.

Bild RC5.JPG

Ich benutze hier das Beispielprogramm aus der Bascom Hilfe, daß
ich etwas abgewandelt habe.

$regfile = "m8adef.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Dim Geraet As Byte , Kommando As Byte

Config Pinb.0 = Input
Portb.0 = 1 'Pull Up Widerstand einschalten
Config Rc5 = Pinb.0, Wait = 2000 'PinB.0 als RC5 Eingang deklarieren

Enable Interrupts

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 'LCD konfigurieren
Config Lcd = 20 * 4
Cls
Cursor Off

Cls
Locate 1 , 1
Lcd "Geraet:"
Locate 2 , 1
Lcd "Kommando:"

Do
      Getrc5(geraet , Kommando) 'Gerät und Komando vom IR Empfänger lesen
         If Geraet < 255 Then 'Falls etwas empfangen -> anzeigen
                  Kommando.7 = 0 'Togglebit löschen
                  Locate 1 , 11
                  Lcd Geraet ; " "
                  Locate 2 , 11
                  Lcd Kommando ; " "

   End If

Loop
End


Das Programm empfängt den Code der Fernbedienung an PinB.0 und dekodiert ihn.
Jetzt kann man die Variable Kommando auswerten und verschiedene Ausgänge schalten.

Hier noch ein Beispiel um drei Ausgänge mit der Fernbedienung zu schalten.

$regfile = "m8adef.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Dim Geraet As Byte , Kommando As Byte

Config Pinb.0 = Input
Portb.0 = 1 'Pull Up Widerstand einschalten
Config Rc5 = Pinb.0 , Wait = 2000 'PinB.0 als RC% Eingang deklarieren
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Enable Interrupts

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 'LCD konfigurieren
Config Lcd = 20 * 4
Cls
Cursor Off

Cls
Locate 1 , 1
Lcd "Geraet:"
Locate 2 , 1
Lcd "Kommando:"

Do
      Getrc5(geraet , Kommando) 'Gerät und Komando vom IR Empfänger lesen
         If Geraet < 255 Then 'Falls etwas empfangen -> anzeigen
                  Kommando.7 = 0 'Togglebit loeschen
                  Locate 1 , 11
                  Lcd Geraet ; " "
                  Locate 2 , 11
                  Lcd Kommando ; " "
               Portb.2 = 0
               Portb.3 = 0
               Portb.4 = 0
   End If
   Select Case Kommando
   Case 1 : Portb.2 = 1
   Case 2 : Portb.3 = 1
   Case 3 : Portb.4 = 1
   End Select


Loop
End



Ein weiteres Beispiel mit umschalten/toggeln der Ausgänge


$regfile = "m8adef.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Dim Geraet As Byte , Kommando As Byte

Config Pinb.0 = Input
Portb.0 = 1 'Pull Up Widerstand einschalten
Config Rc5 = Pinb.0 , Wait = 2000 'PinB.0 als RC% Eingang deklarieren
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Enable Interrupts

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 'LCD konfigurieren
Config Lcd = 20 * 4
Cls
Cursor Off

Cls
Locate 1 , 1
Lcd "Geraet:"
Locate 2 , 1
Lcd "Kommando:"

Do
      Getrc5(geraet , Kommando) 'Gerät und Komando vom IR Empfänger lesen
         If Geraet < 255 Then 'Falls etwas empfangen -> anzeigen
                  Kommando.7 = 0 'Togglebit loeschen
                  Locate 1 , 11
                  Lcd Geraet ; " "
                  Locate 2 , 11
                  Lcd Kommando ; " "
                  End If
   Select Case Kommando
   Case 1 : Toggle Portb.2
   Case 2 : Toggle Portb.3
   Case 3 : Toggle Portb.4

   End Select
Waitms 200
Loop
End




Ein Bild vom Testaufbau.


Bild RC5_001.jpg