DIY Lernfähige Fernbedienung mit IRMP
Von Robert und Frank M. (ukw)
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
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