Forum: Projekte & Code Universal IR Empfänger für PC


von Simon Lehmayr (Gast)


Angehängte Dateien:

Lesenswert?

IRrecv v.2.1
Empfängt Fernbedienungssignale und gibt einen eindeutigen Code über
RS232 an den PC aus. Unabhängig vom IR-Protokoll!!!

momentane Verbesserungsarbeiten:
- IR-Sendefunktionalität

von Huber (Gast)


Lesenswert?

Hi, ich habe das mal überflogen.
Scheint genau das, was ich suche. Ich muss das noch anpassen können.
Könntest du mir bitte eine PAP(Programm Ablauf Plan) schiecken?
Oder einfach mit Worten so beschreiben, wie dein Programm funktioniert.
Den Ansatz halt, damit ich weiß, ob ich es an meine Bedürfinisse
anpassen kann.
Danke

von Simon Lehmayr (Gast)


Lesenswert?

Das Programm startet mit _reset.

Wichtig in der HW init routine sind Timer0 und ext. Interrupt setup
Diese zwei braucht das Programm unbedingt. Die Sendefunktion ist noch
fürn Müll :-) daher kannst du die LEDs weglassen.

rcall putchar: Es wird ein SW UART zum Senden verwendet, der keinen
nachgeschalteten Inverter braucht. Du kannst die Codes aber auch intern
verarbeiten, statt sie an andere Geräte zu senden.

bitschieben: Schiebt das gemessene Bit in den Zwischenspeicher.
Verhindert einen Überlauf (max. 20 Bytes=160 Bits können erfasst
werden)

sendnibble: Übergibt den Hexwert für ein halbes Byte an den UART.

main: In der Hauptschleife wird auf ein Event gewartet:
Events sind: Ext Int, Timer0 overflow und SW UART received a byte
Dir fällt sicherlich dieser ominöse Debugmode auf. Der ist für die
Sendefunktionalität, vergiss ihn einfach.

Der Timer0 wird zum Zeitmessen benutzt. Sollte er überlaufen, ist das
Signal wohl zu Ende und die Daten werden per UART verschickt.
Im Sendemodus wird er auch in der Hauptschleife verwendet (Block of
T0INT), ignorier das mal, genauso "Block of RXCHAR".

Der ext. Int. steuert das eigentliche Datenerfassen:
Jedesmal wenn eine fallende Flanke auftritt, wird die Zeit genommen.
Über einen Bitzähler wird bestimmt, wo man gerade ist. Die beiden
ersten Flanken werden ignoriert, da Fernbedienungen zwei lange Pulse
vorneweg senden, die keine Nutzdaten enthalten.
Nach der 2. Flanke wird berechnet, wie lange ein kurzer und langer
Impuls ist. Eigentlich berechnet er die Grenze zwischen lang und kurz,
um später die Bits 0 und 1 unterscheiden zu können.
Mit dieser Schwelle wird jede gemessene Pulszeit verglichen und je nach
Länge als 0 oder 1 gewertet.
Das T flag: Um kurze Pulse immer als 0 zu werten, muss man feststellen
ob der erste Puls auch wirklich der kurze war.
Funktioniert glaube ich noch nicht richtig...

von Huber (Gast)


Lesenswert?

Du hast also als Grundlage dir gelegt, dass die kurze Lichtimpulse eine
0 bedeuten und die Langen eine 1. Das würde auch funktionieren, wenn
man nur 2 Arten von Länger der Impulse hätte. Einen Langen und einen
kurzen Impuls mit immer gleich bleibenden pausen dazwischen. So ist es
aber nicht immer. Es gibt viele Codes, die Informationen mit
unterschiedlichen Längen von Impulsen und gleichzeitig mit
unteschiedlich langen Pausen übertragen(RC5-Code). Es gibt sogar
welche, die nur mit Pausen arbeiten. Die Impulse selbst sind immer
gleich.(DENON-Code,NEC-Code)Würde man so ein Code an deine Schaltung
schiecken, würde sie vermutlich immer nur einser ausgeben. Aber wier
gesagt: es ist nur so, wenn ich richtig verstanden habe, dass du die
langen Impulse als eine "1" und die kurzen als eine "0" erkennst,
und weiter gibst.
>Die beiden
>ersten Flanken werden ignoriert, da Fernbedienungen zwei lange Pulse
>vorneweg senden, die keine Nutzdaten enthalten.
stimmt auch nicht immer. Meines Wwissens ist es meist nur einer. Aber
von Fernbediehnung zu Fernbediehnung eben unterschiedlih.

Hast du die Schaltung mit vielen verschiedenen Geräten, Koden
ausprobiert?

von Simon Lehmayr (Gast)


Lesenswert?

Deine Anmerkung ist schon berechtigt, da es Codes gibt, die
Informationen im An- und Auszustand übertragen (z.B. RC5). Allerdings
hast du noch eine Sache falsch verstanden: Die Pulsdauer setzt sich für
mein Programm zusammen aus der An- und der Auszeit (also beide Zeiten)
da immer auf fallende Flanke getriggert wird. Die binäre Information,
die das Programm erzeugt, muss daher nicht zwangsläufig identisch mit
den binären Daten der FB sein. Aber eine Eindeutigkeit ist jedenfalls
gegeben.
Getestet habe ich mit den Formaten Japan, Daewoo, RC5, uvm (über 8
verschiedene Systeme), geht einwandfrei.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.