![]() |
Wie Signale einer IR Fernbedienung für ComPort empfangen?
Hallo,
mal wieder ich... Ich würde gerne eine Fernbedienung in einem meiner Programme nutzen. Die Fernbedienung sendet RC5 Signale soweit ich weiß, da ich das mit Grider oder WinLirc nutzen kann. Der Aufbau der Steuerung ist sehr einfach gehalten. ![]() Wenn ich RTS auf High lege ist der Empfänger aktiv. Signale kommen über DCD, nur High und Low Signale Nach der Beschreibung des RC5 Protokolls, sieht ein Befehl so aus 2 Startbits (immer 1) 1 Toglebit 5 Adressbits 6 Kommandobits Insgesamt also 14 ... hmmm ... Signale Die einfache Prozedur mit ReadFile funktioniert nicht, da ja nicht wirklich Daten übertragen werden. Eine passende Komponente habe ich auch noch nicht gefunden. Wenn ich das bei mir am laufen habe, habe ich ein ziemlich grosses Untergrundrauschen drin. Jedesmal wenn sich der Status an DCD ändert, habe ich einfach mal die Zustände in einem String addiert und nach 14 Zeichen ausgegeben. Da kam ziemlich viel Müll mit an. Habe als noch eine Prüfung aus High der ersten beiden Zeichen eingebaut. Zusätzlich soll das Signal nur ausgegeben werden, wenn es sich von dem vorherigem unterscheidet.
Delphi-Quellcode:
Eben mal schnell getestet gehabt aber da kommt leider auch nicht wirklich was bei heraus, bei fast jedem Tastendruck die Selbe Folge. Hat hier jemand eine Ahnung wie man das Richtig anstellt und mich auf den richtigen Weg schubsen könnte?
if CP.DCD = 1 then
Str := Str + '1' else Str := Str + '0'; if ((Length(Str) = 2) and (not(Str = '11'))) then Str := ''; if (Length(14) and (Str <> OStr)) then begin Memo1.Lines.Add(Str); OStr := Str; Str := ''; end; if Length(Str) = 14 then Str := ''; Eigentlich müsste der Source auch wenn er nicht sauber ist doch so seinen Zweck erfüllen?! Ich blick da echt nicht mehr weiter. Gruß Daniel |
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
Zitat:
RC5 benutzt einen Träger mit 27.8 µsec Periode und eine Bitperiode von 1.78 ms - wo bitte ist in deiner Software die Zeitmessung? Und wo ist die Manchester-Dekodierung? Eine technische Beschreibung findest du hier: ![]() Gruss Reinhard |
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
Wieso eigentlich eine Zeitmessung? Ich frage über einen Timer im Intervall immer den Zustand des Pins ab. Timer = Bitperiode.
Müsste es nur anstat der Timer Kompo direkt in einen Thread setzen. das sich hier bei die Signale nach einer Zeit ein wenig verschireben ist auch klar, da sollte dennoch ein Muster zu erkennen sein... Falls Du das mit Manchaster Code meinst... Zitat:
|
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
Bei 1.78 ms nützt ein Timer nichts mehr.
Wenn die Sache überhaupt Erfolg haben soll, muss dein Programm ständig den Pin DCD abfragen. Bei jedem Wechsel des Zustand muss der Wert eines hochauflösenden Zählers in einem Array oder Liste gespeichert werden.
Delphi-Quellcode:
Nachdem man 14 Mal den High-Zustand gesehen hat, kann man raus aus der Routine und muss das Array auswerten.
type
TDCDEvent = record bitvalue : boolean; counter : Int64; end; var DCDevents : array[0..14] of TDCDEvent; Ich würde das Array erst mal als CSV-Datei speichern und manuell auswerten, um zu sehen, ob man daraus überhaupt einen RC5-Code erkennen kann. |
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
Zitat:
das ist längst nicht alles: 1.78 ms ist die Zeit für ein ganzes Bit - die Hälfte Hi, die Hälfte Lo. Und um einen Timer auf ein asynchrones Signal halbwegs sicher zu sysnchronisieren, muss man mindestens mit der achtfachen Bit-Frequenz abtasten, so wie bei einem asynchronen UART. Von selbst laufen die Time Interrupts und der IR-Sender ja nicht synchron. Ausserdem berücksichtigst du nicht, dass für High ja kein Dauersignal, sondern eine Impulsfolge mit Impulsen im µsec-Bereich gesendet wird. Um die nach deiner Methode zu erfassen, müsste man sie erstmal (mit Hardware) integrieren. Dann erst könnte man langsam anfangen, über Manchester Code nachzudenken. Ich fürchte, bis dahin ist noch ein so weiter Weg, dass ich mich zu dem Thema besser nicht mehr melde. Gruss Reinhard |
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
Zitat:
Sag doch gleich ich soll aufgeben... |
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
Zitat:
Aber niemand hindert dich, dein Projekt gegen alle Widrigkeiten durchzuziehen - was uns nicht tötet, macht uns nur härter. Ich lasse mich gern positiv überraschen, also melde dich unbedingt, wenn der Empfang zuverlässig läuft. Gruss Reinhard |
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
Zitat:
Ich scheitere ja so schon daran nen Delay in so einem kleinen Intervall hinzubekommen. Davon mal abgesehen beschäftigt sich das Programm dann ja nur noch mit dem abtasten, das kann es ja auch nicht sein. Wo liegt denn mein Denkfehler in dem Moment. Ich habe eine Komponente die auf die Statusänderung des Signales reagiert. Demnach müssten einmal High / Low ein Bit sein? Da aber auch mal 2 Low Zustände hintereinander kommen könnten, muss ich also den Status manuell abfragen. ich lege Spannung an und genau in dem Moment starte ich auch den Timer und zwar mit halber Bitlänge also 1,78ms / 2. da der Zustand ja eine gewisse Zeit anhällt, warum müsste ich dann mindestens die 8 fache Abtastrate haben? Wenn ich dann in dem Array immer den übernächsten Zustand lese, müsste ich doch jeweils das Signal haben was für das Bit von Wert ist? Als Test zum Starten der Aufzeichnung, bräuchte ich doch dann nur 4 mal abtasten. das erste und das dritte Signal müssten dabei dann High sein, das wären dann meine beiden Startbits. Ist das der Fall, Zeichne ich weiter die Signale auf, 24 Zustände, davon sind dann 12 Brauchbare Signale. Sollten die ersten beiden Signale nicht meinen Startbits entsprechen sollen sie verworfen werden und erneut beginnen. Dabei werden die ersten beiden Signale verworfen und die nächsten 2 Signale zusazu geprüft. Das ist im Moment meine Theorie, korrigiere mich wenn ich da Falsch liege. |
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
Zitat:
Ansonsten fehlt da was: was ist vor der gezeichneten Schaltung - ein IR Empfänger, vielleicht ein Carrier Detector oder was? So lässt sich nicht sagen, was da ankommt. Mit den Nadelimpulsen, die ein RC5-Sender abgibt, kann der PC nichts anfangen. Studiere Seite 2 des genannten Links: ![]() Gruss Reinhard |
Re: Wie Signale einer IR Fernbedienung für ComPort empfangen
![]() Da es hier zum Posten zu viel Text ist poste ich auch mal einen Link. Jetzt schaue ich mir Deinen auch mal an. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz