DIY Lernfähige Fernbedienung mit IRMP

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Von Robert und Frank M. (ukw)

Scan eines NEC-kompatiblen Fernbedienungssignals

Einleitung

Die Fernbedienung kann mittels IRMP Fernbedienungs-Codes speichern und auch wiedergeben. Insgesamt gibt es fünf Tasten zum Senden von Codes:

  • Power
  • Rauf
  • Runter
  • Rechts
  • Links

Diese Tasten können 3-fach belegt werden. Dafür gibt es eine zusätzliche Select-Taste für das gewünschte Gerät. Es können aber auch für eine der drei Speicherplätze unterschiedliche Geräte angesteuert werden. Das ist zum Beispiel sinnvoll, wenn man die TV-Kanalwahl über den Satellitenempfänger einstellen muss, aber die Lautstärkewahl über das Fernsehgerät erfolgt.

Angezeigt wird das anzusteuernde Gerät über 3 LEDs.

Ab V. 1.3.0 ist die Fernbedienung makrofähig. Dabei können ganze Abfolgen von Tasten und Pausen abgespeichert werden. Es sind bis zu 5 Befehle und Pausen pro Taste möglich.

Ein Beispiel:

  • Schalte SAT-Empfänger ein
  • Schalte TV ein
  • Warte 3 Sekunden
  • Wähle am TV den Eingang "SAT"

Ab V. 1.4.0 lässt sich die Fernbedienung über den UART-Bootloader flashen.

Schaltplan

Der Schaltplan ist relativ unspektakulär. Es werden nur Standard-Bauteile verwendet. Die Verwendung eines Quarzes ist nicht unbedingt notwendig, ist aber empfehlenswert, da einige kommerzielle Geräte stark auf das Timing des IR-Signals achten.

In der Version 1.1.0 wurde die Schaltung derart verändert, dass der IR-Empfänger (TSOP17xx) nun vom µC aus- und eingeschaltet werden kann. Dies spart den Ruhestromverbrauch des Empfängers, welcher bei ca. 1mA liegt.

Änderung ab Version 1.4.0:

Der TSOP17xx wird nun active low geschaltet!

Stromverbrauch:

  • Ruhe: unter 1 µA
  • Senden: ca. 18 mA
  • Lernmodus: ca. 19mA
Schaltung V1.4.0 der Lernfähigen Fernbedienung
Prototyp auf Lochraster aufgebaut

Stückliste:

Name Wert Gehäuse
C1, C3, C4 100nF RM 5,08
C2 4,7µF Elko RM 2,54 DM 6
C5, C6 22pF RM 2,54
D1 SFH409 LED 3mm
D2 LED_grün LED 3mm grün 2mA
D3 LED_gelb LED 3mm gelb 2mA
D4 LED_rot LED 3mm rot 2mA
IC1 ATMEGA168 DIL28S
IC2 TSOP1736 TSOP17..
K1 K1X04 1X04
K4 ISP Wannenstecker 10 stehend
Q1 16MHz HC49/U
R1 4,7K 0207
R2 33 0207
R3 100 0207
R4 10K 0207
R5, R6, R7 1,2K 0207
S1, S2, S3, S4, S5, S6 Drucktaster Drucktaster
T1 BC337 TO92

Download

Version 1.4.1, Stand vom 22.05.2011: RemoteControl.zip

Passender Bootloader für UART inkl. Windows-Programm: Uart-bootloader.zip

Versionshistorie

03.04.2011 V 1.0.0

  • Erste Version

10.04.2011 V 1.1.0

  • Stromsparmodus hinzugefügt (Verbrauch: wenige µA)
  • Schaltung erweitert: An-/Abschalten des IR-Empfängers
  • Kleinere Verbesserungen bei der Anzeige

13.04.2011 V 1.2.0

  • Anschlussfehler XTAL geändert
  • IR-Empfänger nun an PD5 angeschlossen
  • Aktivierung des IR-Empfängers direkt über PB1 - ohne Transistor

17.04.2011 V. 1.3.0

  • Speicherung der Tastendrucklängen
  • Makros möglich: Bis zu 5 Befehle und Pausen pro Taste

22.05.2011 V. 1.4.0

  • Ansteuerlogik RECON geändert: Active Low, siehe Schaltplanänderung
  • 8 MHz Quarz aktiviert: L-Fuse: 0xFF, H-Fuse: 0xDC, E-Fuse: 0xF9
  • Bootloader-Support: L-Fuse: 0xFF, H-Fuse: 0xDC, E-Fuse: 0xF8

Source-Code

Der Source-Code lässt sich einfach für AVR-µCs übersetzen, indem man die Projekt-Datei remotecontrol.aps in den WinAVR lädt.

Das Projekt nutzt IRMP zum Empfangen von IR-Protokollen, IRSND zum Senden der IR-Befehle. Siehe dazu auch:

   IRMP - Infrared Multi Protocol Decoder
   IRSND - Infrared Multi Protocol Encoder

Die Taktfrequenz des AVR µCs sollte mindestens 8 MHz betragen. Das Projekt ist eingestellt auf einen ATMega168 mit 8 MHz.

Es sind im Standard nicht alle Fernbedienungsprotokolle freigeschaltet, weitere müssen in irmpconfig.h und irsndconfig.h zum Empfangen und Senden aktiviert werden. Wie das geht, ist im oben genannten Artikel zu IRMP nachzulesen.

Fuses (ohne Bootloader):

Funktion L-Fuse H-Fuse E-Fuse
Internal RC Osc at 8MHz, 5.0 V 0xE2 0xDC 0xF9
Internal RC Osc at 8MHz, 4.5 V 0xE2 0xDD 0xF9
External Crystal Osc at 8MHz, 5.0 V 0xFF 0xDC 0xF9
External Crystal Osc at 8MHz, 4.5 V 0xFF 0xDD 0xF9

Fuses (mit Bootloader):

Funktion L-Fuse H-Fuse E-Fuse
Internal RC Osc at 8MHz, 5.0 V 0xE2 0xDC 0xF8
Internal RC Osc at 8MHz, 4.5 V 0xE2 0xDD 0xF8
External Crystal Osc at 8MHz, 5.0 V 0xFF 0xDC 0xF8
External Crystal Osc at 8MHz, 4.5 V 0xFF 0xDD 0xF8

Bedienung

Mit der Select-Taste wird das gewünschte Gerät ausgewählt. Wenn man sie kurz drückt, wird das aktuelle Gerät durch kurzzeitiges Leuchten der entsprechenden LED angezeigt. Danach hat man ca. eine halbe Sekunde Zeit, durch nochmaliges Drücken zum gewünschten Gerät durchzuschalten.

Drückt man die SELECT-Taste länger, schaltet die Fernbedienung in den Lernmodus. Dies wird durch Leuchten aller 3 LEDs angezeigt.

Die Programmierung einer Taste geschieht folgendermaßen:

  • 1. Die SELECT-Taste lange drücken, bis alle 3 LEDs aufleuchten
  • 2. Optional: durch n-faches Drücken der SELECT-Taste eine Pause von n Sekunden einfügen
  • 3. Ein Signal mit der Original-Fernbedienung senden
  • 4. Die LEDs blinken zur Bestätigung auf
  • 5. Wiederhole Schritt 2 oder gehe zu Schritt 6
  • 6. Speichern: Gewünschte Taste auf der DIY-Fernbedienung drücken
  • 7. Leds blinken zur Bestätigung 2x auf

Das Löschen eines vormals gespeicherten Codes auf einer Taste geht dagegen so:

  • 1. Die SELECT-Taste lange drücken, bis alle 3 LEDs aufleuchten
  • 2. Löschen: Gewünschte Taste auf der DIY-Fernbedienung drücken
  • 3. Leds blinken zur Bestätigung 2x auf

Anmerkungen:

  • Die Pause ist auf maximal 16 Sekunden begrenzt
  • Die Tasten auf der Originalfernbedienung sollten sehr kurz gedrückt werden, da die Wiederholbefehle mitgespeichert werden
  • Schritt 2 kann bis zu 5x wiederholt werden, also 5 Kommandos UND 5 Pausen
  • Der Lernmodus kann jederzeit durch langes Drücken der SELECT-Taste abgebrochen werden

Bootloader

Drückt man die SELECT- und die POWER-Taste gleichzeitig, geht die Fernbedienung bei angeschaltetem BOOTLOADER_SUPPORT für 3 Sekunden in den UART-Flash-Modus. So hat man dann ca. 3 Sekunden Zeit, mit dem UART-Bootloader den Flashvorgang für die Fernbedienung zu beginnen.

Die Kommandozeilensyntax für das Windows-Programm lautet:

 uart-flash comX: remotecontrol.hex

Bei erstmaligen Einschalten wird der Flash-Modus ebenso für 3 Sekunden aktiviert.

Weitere Entwicklung

Geplant sind folgende Erweiterungen

  • Anpassung der Schaltung auf Batteriebetrieb
        Im Moment ist die Fernbedienung noch auf eine 5V-Spannungsversorgung
        angewiesen. Der Schaltplan wird noch darauf angepasst, dass die
        Fernbedienung auch im Batteriebetrieb funktioniert.
        Hinweis:
        Mit 3 Mignon-Zellen (je 1,5 Volt) ist die Schaltung bereits
        unverändert einsetzbar.
  • Bootloader über IR
        Ein Bootloader zum Update der Firmware über den Infrarot-Empfänger
  • Bootloader über Soundkarte
        Ein Bootloader zum Update der Firmware über die PC-Soundkarte
  • Linux Bootloader
        Ein Bootloader für Linux

Weitere Vorschläge zur Verbesserung des Programms oder der Schaltung können gerne in

        http://www.mikrocontroller.net/topic/214204

gemacht werden.

Literatur

IRMP :

Zugehöriger Thread in der Codesammlung