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
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
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...
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.