PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RC5 IR ... Hilfe :(



luvat
01.01.2010, 23:10
Hallo zusammen,

ggf. hat wer nen tip für mich. Ich versuche nun seit mehreren Stunden mit Hilfe des Threads (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=20209) einen TSOP1738 ans laufen zu bekommen.

Als HW verwende ich das RN-Control v 1.4

Habe also nun den TSOP laut http://www.datasheetcatalog.org/datasheets/208/301092_DS.pdf angeschlossen.

+ an +
gnd an gnd
und out an Port pind.3

Egal was ich tue... ich bekomm nix eingelesen (also es wird nichts ausgegeben ... ausser mein programmstart). ... ich habe nun mehrere IR Empfänger durch (von alten Recievern etc. ...) bin aber letztendlich beim TSOP gelandet, da ich diesesn Fabrikneu hier hatte und auch ein Datenblatt hierfür habe.

Als Fernbedienungen habe ich hier diverse rumliegen.
Eine original Philips von einem Philips TV, eine Logitech Harmony, eine andere universal FB von Heitech.

Mein Code:



$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Config Rc5 = Pind.3
On Int1 Int1_int
Enable Int1
Config Int1 = Falling
Enable Interrupts

Dim Address_rc5 As Byte , Command_rc5 As Byte , Rc5_flag As Bit


Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP

Print "Waiting for IR"

'main
Reset Rc5_flag
Do
If Rc5_flag = 1 Then
If Address_rc5 <> 255 Then
Reset Rc5_flag
Command_rc5 = Command_rc5 And &B01111111
Print "Adresse" ; Address_rc5 ; "Code" ; Command_rc5
End If
End If
Loop
End

'Lesen der RC5 Codes
Int1_int: 'Interrupt Handler For Int1
Disable Int1
Enable Interrupts
Getrc5(address_rc5 , Command_rc5)
Set Rc5_flag 'Flag für RC5 Daten
Gifr = Gifr Or &H80 'clear Flag Int1
Enable Int1
Return

Sauerbruch
02.01.2010, 12:14
Moin!

Als ich vor einiger Zeit mal mit RC5 rumexperimentiert habe musste ich feststellen, dass nur ein Bruchteil aller IR-Fernbedienungen mit diesem Code läuft. Ich hatte mir damals so ´ne Universal-FB für ein paar Euro gekauft, die an die 1000 Hersteller und Gerätetypen gespeichert hatte, und nur bei vielleicht 20% kam RC5 raus. Philips klingt schon mal gut, aber 100% sicher bin ich mir nicht, ob die in allen (!) Geräten RC5 verwenden. Ohne Oszi wird das wohl auch nicht sicher herauszufinden sein.

Ob der Sensor sein Signal ordentlich an den µC abgibt habe ich getestet, indem ich mir den Eingang über einen anderen Ausgang mit LED habe anzeigen lassen:



DDRX.Y=1

Do
PortX.Y = PinD.3
Loop


Wenn´s flackert, kommt das Sgnal schon mal rein.

Und dann habe ich in manchen Threads gelesen, dass die GetRC5-Abfrage in einer ISR problematisch sein kann, weil die erste Synchronisationsflanke fehlt. Nur mal so und zum Testen, ob es grundsätzlich funktioniert, würde ich mal einen Code probieren, bei dem der GetRC5-Befehl in der Hauptschleife steht. Das hält den Controller zwar irre lange auf, aber das schließt diese Fehlerquelle schon mal aus. Wenn´s damit auch nicht klappt würde ich fast mal tippen, dass es dann am Code der FB liegt... an ein Oszi kommst Du nicht ran?

(Der µC läuft auch tatsächlich mit externem Quarz und 16 MHz? :-) )

dolivo
02.01.2010, 17:05
hallo,
ich kann die Mitteilung des Dr.Sauerbruch nur bestätigen. Auch ich habe viel Zeit vertan um dann festzustellen, dass jede Fernbedienung anders tickt. Den RC5-Befehl kann man vergessen. Hier hilft nur, selbst das Datenprotokoll zu lesen (Oszi) und sich ein eigenes Programm zu schreiben.
dolivo

for_ro
02.01.2010, 17:42
Und dann habe ich in manchen Threads gelesen, dass die GetRC5-Abfrage in einer ISR problematisch sein kann, weil die erste Synchronisationsflanke fehlt.
Da RC5 immer mindestens zweimal den Code sendet, geht der erste dabei zwar verloren, aber den zweiten bekommt die Routine dann mit. Der Bascom Befehl scheint da tolerant zu sein. Allerdings würde ich auch nur ein Flag in der ISR setzen und den GetRC5() Befehl dann in der Hauptschleife anwenden.


Nur mal so und zum Testen, ob es grundsätzlich funktioniert, würde ich mal einen Code probieren, bei dem der GetRC5-Befehl in der Hauptschleife steht.
Das auf jeden Fall. So minimal wie möglich, wenn man zweifel an Hard- und Software hat.

@luvat: Hier habe ich dir mal ein paar Zeilen zusammengeschrieben (ungetestet), falls du kein Oszi hast. Es sollten die High und Low Zeiten aller Intervalle ausgegeben werden.

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Ddrd.2 = 1 'hier wird das Signal eingelesen
Dim Interval(200) As Word
Dim Flanken_anzahl As Byte
Dim Print_flag As Byte
Dim I As Byte
Config Timer0 = Timer Prescale = 64
Load Timer0 , 25
On Timer0 Timer0_isr 'ergibt 10KHz Abtastfrequenz, also 100µs Zeitwerte
Enable Timer0
Config Int0 = Change
On Int0 Int0_isr
Enable Int0
Enable Interrupts
Flanken_anzahl = 1

Do
If Print_flag = 1 Then
Print_flag = 0
Print Flanken_anzahl; ":";
For I = 1 To Flanken_anzahl
Print Interval(i) ; " ";
Interval(i) = 0
Next I
Print ""
Flanken_anzahl = 1
End If
Loop
End

Timer0_isr:
Incr Interval(flanken_anzahl)
If Interval(flanken_anzahl) > 10000 Then 'Ausgabe nach 1 Sekunde ohne weitere Signale
Print_flag = 1
End If
Return

Int0_isr:
Incr Flanken_anzahl
If Flanken_anzahl > 200 Then
Flanken_anzahl = 200
Print_flag = 1
Print "Too many intervals"
End If
Return

Sauerbruch
02.01.2010, 17:47
Den RC5-Befehl kann man vergessen.

Na ja - ganz so kritisch sehe ich es auch nun wieder nicht!

Wenn man eine Anwendung hat, die nicht soooo zeitkritisch ist und man sich im Programmablauf die paar 100 µS Pause leisten kann, ist der GetRC5-Befehl was sehr schönes. Ich habe damit schon das eine oder andere Gerät fernsteuerbar gemacht. Voraussetzung ist natürlich, dass die Fernbedienung auch wirklich RC5 sendet :-)

Und um das schnell herauszufinden, habe ich an einem verregneten Wochenende mal einen "RC5-Checker" gebastelt (Bild anbei). Dieses kleine Gerätchen (mit einem Tiny2313 und ´nem TSOP 38 wie man sieht) stellt das empfangene Adress- und Kommandobyte auf 2 Zeilen mit je 8 LEDs dar. Empfängt er einen Non-RC5-Code (beide Bytes sind 255), läuft ein Lichtpunkt von links nach rechts. Damit bewaffnet wusste ich nach etwa einer halben Stunde über alle IR-Fernbedienungen im Umkreis von 500 Metern bescheid =P~

Also luvat, nicht aufgeben :-)

Gruß,

Daniel

luvat
02.01.2010, 23:53
lol :D

naja... zeitkritisch ist das programm nicht. ... es wird ein rgb fader, welchen ich per FB steuern will. ... daher ist die zeit nicht wichtig :)

vielen dank auf jedenfall für die antworten. ... morgen ist ja sonntag ... da kann ich das ma testen :>

Papsi
03.01.2010, 22:33
Hallo,

teste doch einfach mal den Programmteil aus der Bascom Hilfe.

Stichwort "getrc5"

Für deinen Zweck reicht der voll aus.

Gruß
Papsi