Forum: Mikrocontroller und Digitale Elektronik Einfachen IR-Empfänger bauen wie?!


von Jörg S. (josh79)


Angehängte Dateien:

Lesenswert?

Hallo zusammen...

Ich möchte gerne folgende Idee realisieren. Ich möchte mir eine kleine 
Platine bauen, worauf sich ein AVR, ein TASTER und ein IR-EMPFÄNGER 
befinden (siehe Skizze im Anhang).

Jetzt möchte ich eigentlich nur folgendes tun. Sende ich mit einer 
beliebigen Fernbedienung (z.B. vom Fernseher) ein Signal und halte dabei 
den Taster meiner Platine gedrückt, so soll sich der AVR (z.B. ATTINY13) 
das Signal merken und speichern. Sende ich dieses Signal nun erneut, 
soll der AVR einen Ausgang setzen. Fertig!!

Wird der Taster erneut gedrückt speichert er ein anderes Signal, wenn es 
in dieser Zeit gesendet wird.

Ich bin Elektroniker und habe umfangreiche Kenntnisse in der Elektronik 
und Löten und das entwerfen von Schaltungen ist bei mir Tagesgeschäft... 
nur... ich habe erst vor ein paar Tagen angefangen meine ersten Schritte 
mit Microkontrollern zu machen... und bin auf dem Gebiet absoluter 
Anfänger. Ich möchte mich in Assembler einarbeiten... stehe aber wie 
gesagt noch ganz am Anfang und habe quasi keine Vorkenntnisse.

Über leichtverdauliche Kost in diesem Beitrag wäre ich auch echt sehr 
dankbar.

von Harald W. (wilhelms)


Lesenswert?

Jörg S. schrieb:

> Ich bin Elektroniker und habe umfangreiche Kenntnisse in der Elektronik
> und Löten und das entwerfen von Schaltungen ist bei mir Tagesgeschäft...

Und zu welchem Teil Deiner Idee hast Du jetzt Fragen? Zur
Dekodierung kannst Du unter IRMP suchen.

von Jörg S. (josh79)


Lesenswert?

Ich möchte wissen, wie ich ein Programm schreiben kann (Am liebsten in 
Assembler), welches die Funktion ausführt, die ich beschrieben habe. Bei 
meiner Suche bin ich auf einige Schaltpläne gestoßen, die ich verstehe 
und problemlos nachbauen kann, aber mit der Software hapert’s... Ich 
verstehe nicht genau was im AVR passieren muss, damit das funktioniert, 
was ich möchte.

von Harald W. (wilhelms)


Lesenswert?

Jörg S. schrieb:

> Ich möchte wissen, wie ich ein Programm schreiben kann

Hast Du den IRMP-Thread denn schon gelesen?

von Jörg S. (josh79)


Lesenswert?

Habe Ihn mir angesehen... Ihn aber nicht verstanden...  :-(
(Wie gesagt... absoluter Beginner)...

von Harald W. (wilhelms)


Lesenswert?

Jörg S. schrieb:

> Habe Ihn mir angesehen... Ihn aber nicht verstanden...  :-(
> (Wie gesagt... absoluter Beginner)...

Dann solltest Du als erstes vielleicht das AVR-Tutorial durchgehen.

von Michael_Ohl (Gast)


Lesenswert?

Geht so nicht. Fernbedienungen verwenden verschiedene Grundfrequenzen 
auf denen das Signal aufmoduliert wird. Die mir bekannten IR Empfänger 
haben dafür Filter, die die Signale anderer Fernbedienungen ausblenden. 
Es gibt dazu wirklich hunderte von Codes. Es macht viel mehr Sinn, sich 
auf etwas einzulassen, das fast jede Fernbedienung kann - wie z.B. RC5 
o.ä. das kann man im Programm sauber nach Start und Stopp des Paketes 
absuchen, z.B. die on und off Zeiten durch einen Timer messen und später 
in Ruhe auswerten.

So steuerte ich in meinem Wohnwagen 5 Lichter über eine 
Universalfernbedienung per PWM.
Benutze aber PIC und hab es in Assembler gemacht.

Mfg
Michael

von Schreiber (Gast)


Lesenswert?

Michael_Ohl schrieb:
> Geht so nicht. Fernbedienungen verwenden verschiedene
> Grundfrequenzen
> auf denen das Signal aufmoduliert wird.

Das ist aber nichts was man nicht auch per Software demodulieren könnte.

von Oldie (Gast)


Lesenswert?

Dein Problem lässt sich (für viele Fälle) mit einem AVR-Tiny
lösen, aber wohl kaum mit einem ATTINY13. Dafür brauchst du
einen µC mit ausreichend SRAM - die 64 Byte eines ATTINY13
reichen garantiert nicht! Weniger, als die 512 Byte SRAM eines
ATTINY85 führen kaum zum Erfolg.

Besonders dann nicht, wenn es für beliebige Fernsteuerungen
der verschiedensten Hersteller von Unterhaltungselektronik
funktionieren soll.

Der Empfang des Signals ist pillepalle: Fast alle IR-
Fernsteuerungen arbeiten mit 36...40 kHz, die man alle mit
einem Empfänger für 38 kHz (z.B.  TSOP31238) recht gut
empfangen kann.
Zur Not kann man sich noch je einen IR-Empfänger für
33 kHz / 56 kHz (umschaltbar) dazunehmen.
Das Ausgangssignal kann direkt an den ATTINY gehen.

Dann kann man nur den Signalablauf der IR-Fernsteuerungen
möglichst genau aufzeichnen - das braucht z.B. 80 Byte.
(Abwechselnd Pulsdauer und Pulspausendauer)

Danach musst du für den Vergleich jeden neuen Tastendruck
aufzeichnen (zwischenspeichern): 2 * 80 Byte = 160 Byte.

Manche Fernsteuerungen liefern aber 2 teilweise abgeänderte
Signalabläufe hintereinander: 2  2  80 Byte = 320 Byte.

Andere Fernsteuerungen liefern mit jedem neuen Tastendruck
einen nur an einer Stelle abgeänderten Signalablauf.
Zur Erfassung beider Varianten sind es 2 * 80 Byte, dazu der
Signalablauf für jeden neuen Tastendruck: 3 * 80 = 240 Byte.

Da man auch noch SRAM für verschiedene Zwischenberechnungen
(und den Stack) braucht, sind 256 Byte SRAM fast immer zu wenig.

Manche Fernsteuerungen senden einen sehr langen Signalablauf
- In diesem Fall wird es auch mit 512 Byte SRAM knapp.

Also:
Dein Problem ist für viele Fernbedienungen lösbar,
aber OHNE DEN WILLEN, ES PROGRAMMIEREN ZU KÖNNEN, wird es nix.
Dafür gibt es keine fertigen Programme.

von MaWin (Gast)


Lesenswert?

Schreiber schrieb:
> Das ist aber nichts was man nicht auch per Software demodulieren könnte.

Wenn man auf die Demodulations-Empfänger wie SFH5110-36 verzichtet,
die schon selbst demodulieren, in diesem Fall 36kHz, und deswegen so
empfindlich sind, weil sie auch Umgebungslicht unterdrücken.

Nimmt man eine Photodiode, kann man selbst demodulieren, aber das
Ding soll ja alle Frequenzen empfangen, da kann man Störlicht nicht
so gut unterdrücken, die Reichweite wird also bescheiden sein.
Das ist beim anlernen nicht schon tragisch, da kann man ja die
SendeDiode direkt vor die PhotoDiode halten, beim späteren Empfang
aber schon, es ist dann ja keine FERNbedienung mehr.

Alternativ nimmt man 8 Demodulationsempfänger unterschiedlicher
Frequenzen mit 30kHz, 33kHz, 36kHz, 38kHz, 40kHz, 48kHz, 56kHz, 78kHz 
und
versucht damit die handelsüblichen Sender abzudecken,
der selbstlernende Empfänger muss dann nur erkennen, welcher 
IR-Empfänger
das beste Signal liefert.

von Joachim B. (jar)


Lesenswert?

Jörg S. schrieb:
> Ich möchte mir eine kleine
> Platine bauen, worauf sich ein AVR, ein TASTER und ein IR-EMPFÄNGER
> befinden (siehe Skizze im Anhang).

ist wirklich ein Witz mit Arduino nano 328 oder miniPRO 328 AUS cHINA 
1,50€ bis 3€

ein TSOP 31236 mit Filter 100 Ohm auf 4,7µF nehme ich gerne weil der 
ausreichend genau alle zwischen 30 und 40 kHz empfängt.

IRMP einbinden Taster ergänzen Dannegger bullet prof Entprellung fertig.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Jörg S. schrieb:
> Ich möchte mich in Assembler einarbeiten...

mache doch das wenn du etwas in C geschafft hast.

von Axel S. (a-za-z0-9)


Lesenswert?

Jörg S. schrieb:
> Ich möchte gerne folgende Idee realisieren.

[IR-Empfänger der einen Code lernen kann]

> Sende ich mit einer beliebigen Fernbedienung (z.B. vom Fernseher)

Beliebige Fernbedienung kann beliebig schwierig werden. Vielleicht 
beschränkst du dich besser erstmal auf die handvoll der gebräuchlichsten 
Protokolle. Z.B. das was IRMP implementiert.

> Ich bin Elektroniker und habe umfangreiche Kenntnisse in der Elektronik
> und Löten und das entwerfen von Schaltungen ist bei mir Tagesgeschäft...
> nur... ich habe erst vor ein paar Tagen angefangen meine ersten Schritte
> mit Microkontrollern zu machen... und bin auf dem Gebiet absoluter
> Anfänger. Ich möchte mich in Assembler einarbeiten... stehe aber wie
> gesagt noch ganz am Anfang und habe quasi keine Vorkenntnisse.

Dann fang mit dem AVR-Tutorial an. Aber mach dir keine Hoffnung - in 
Assembler wird das echt lange dauern bis du was verwertbares hast. 
Wesentlich besser sieht das mit C aus; vor allem weil du dann relativ 
viel Code von Dritten weiterbenutzen kannst. Etwa das schon 
angesprochene IRMP-Projekt.

Im Prinzip ist die Sache recht simpel:

1. einen IR-Empfänger verwenden der für die Trägerfrequenzen der zu 
verwendenden Protokolle funktioniert. Also z.b. einen TSOP-irgendwas für 
38kHz. Der funktioniert für alle Trägerfrequenzen zwischen 36 und 40kHz, 
was über 90% der von IRMP überhaupt unterstützten Protokolle ausmacht.

2. in IRMP alle interessanten Protokolle aktivieren. Im Programm die 
Initialisierung und den Timer-Interrupt für IRMP aktivieren. Ab jetzt 
erkennt IRMP alle IR-Sendevorgänge in der Umgebung.

3. wenn die "Code lernen" Taste gedrückt wurde, so lange IRMP pollen, 
bis es einen Code zurückgibt. Der besteht dann aus Protokoll, Geräte-ID 
und Tasten-ID. Diese Werte im EEPROM des µC speichern. Vermutlich will 
man hier eine Zeitbegrenzung. Und man wird auch eher nicht den Taster 
die ganze Zeit gedrückt halten wollen. Eher so: Taster drücken -> LED 
"Lernbereit" geht an -> wenn Code erkannt blinkt die LED einmal. Oder 
nach Timeout blinkert die LED ein paarmal wild.

4. schließlich in einer Endlosschleife IRMP pollen; wenn ein Code 
empfangen wurde, den mit den Daten aus dem EEPROM vergleichen und bei 
Übereinstimmung die gewünschte Aktion auslösen. Auch hier wird man eine 
Art Timeout brauchen. Etwa: wenn Code erkannt -> Ausgang auf H setzen 
und Timer starten. Nach Ablauf des Timers (z.B. 500ms) Pin wieder auf L 
zurück setzen.

Für jemanden der sich mit µC auskennt, ist das eine Sache von einem 
Nachmittag. Für dich gibt es in meiner obigen Aufzählung sicher ein paar 
Punkte wo du gerade in Gedanken "Häh?" gesagt hast. Und jetzt gehst du 
los und lernst die. Anhand der Tutorials.

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.