www.mikrocontroller.net

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


Autor: Simon Lehmayr (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Huber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon Lehmayr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Huber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Simon Lehmayr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.