|
|
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
− | IRMP ist eine Portierung des [http://www.mikrocontroller.net/articles/IRMP Infrarot-Multiprotokoll-Decoders] nach [[Ethersex]].
| + | [http://ethersex.de/index.php/IRMP IRMP im neuen WIKI] |
− | | |
− | | |
− | == Anschluss ==
| |
− | | |
− | Der Empfang der IR-Signale erfolgt durch einen Empfänger vom Typ TSOP1736 (oder ähnlich). Dieser kann an einem beliebigen Pin angeschlossen werden. Die Abfrage des Pins und die Dekodierung des IR-Protokolls erfolgt in einer ISR, die einen 8-Bit-Timer des ATMEGAs belegt.
| |
− | | |
− | Beim Senden wird das Signal mit der Trägerfrequenz des jeweiligen IR-Protokolls über [[PWM]] moduliert. Dazu wird ein weiterer 8-Bit Timer des ATMEGAs (OC0/OC2) belegt. Auf dem '''[[Etherape]]'''-Board übernimmt ein [[NE555]] diese Funktion, d.h. die Option ''Use external modulator for sender'' ist zu aktivieren. Man spart einen Timer des [[AVR]] und ist auf eine Trägerfrequenz festgelegt.
| |
− | | |
− | Beispiel für einen ATMega32 aus: ''pinning/hardware/pollin_evalboard_addon.m4''
| |
− | | |
− | ifdef(`conf_IRMP', `dnl
| |
− | pin(IRMP_RX, PD2)
| |
− | #define IRMP_USE_TIMER2
| |
− | #define IRMP_RX_LOW_ACTIVE
| |
− | #undef IRMP_RX_LED_LOW_ACTIVE
| |
− | pin(IRMP_TX, PD7) dnl OC2/OC2A
| |
− | #undef IRMP_TX_LED_LOW_ACTIVE
| |
− | ')
| |
− | | |
− | Bedeutung:
| |
− | | |
− | * IRMP_RX - Pin an dem der IR-Empfänger angeschlossen ist
| |
− | * IRMP_USE_TIMER2 - benutze Timer2 für den Empfang, Timer0 für das Senden (undef = umgekehrt)
| |
− | * IRMP_RX_LOW_ACTIVE - der IR-Empfänger ist Low-Akriv (undef = High-aktiv)
| |
− | * IRMP_RX_LED_LOW_ACTIVE - die Kontroll-LED des Empfängers ist gegen USS geschaltet (undef = gegen GND geschaltet)
| |
− | * IRMP_TX - Pin an dem der IR-Sender angschlossen ist (=Ausgang des Timer0 oder Timer2, vgl. IRMP_USE_TIMER2)<br>'''Achtung: 0A bzw 2A bei MCU mit A/B Kanal'''
| |
− | * IRMP_TX_LED_LOW_ACTIVE - die Kontroll-LED des Senders ist gegen USS geschaltet (undef = gegen GND geschaltet)
| |
− | | |
− | == Konfiguration ==
| |
− | | |
− | Jedes unterstützte IR-Protokoll "verbrät" Speicher an Code. Deshalb sollte man nur die benötigten Protokolle auswählen. Eine detailierte Übersicht über die Protokolle gibt der [http://www.mikrocontroller.net/articles/IRMP#Die_IR-Protokolle_im_Detail Artikel im Mikrocontroller Forum].
| |
− | | |
− | │ │ Load a Default Configuration --->
| |
− | │ │ General Setup --->
| |
− | │ │ [*] Status LEDs --->
| |
− | │ │ [*] Status LED (Received)
| |
− | │ │ [-] RFM12 RX
| |
− | │ │ [ ] ZBUS RX
| |
− | │ │ [*] IRMP RX
| |
− | ...
| |
− | │ │ Network --->
| |
− | │ │ I/O --->
| |
− | ...
| |
− | │ │ [*] IR Receivers --->
| |
− | ...
| |
− | │ │ [ ] RC5 IR --->
| |
− | │ │ [*] IRMP IR --->
| |
− | ...
| |
− | │ │ [*] Receive IR-codes
| |
− | │ │ [*] Send IR-codes
| |
− | │ │ [ ] Use external modulator for sender
| |
− | │ │ [*] IRMP ecmd
| |
− | │ │ --- Protocols
| |
− | │ │ [ ] SIRCS
| |
− | │ │ [*] NEC
| |
− | │ │ [ ] JVC
| |
− | │ │ [ ] SAMSUNG
| |
− | │ │ [ ] MATSUSHITA
| |
− | │ │ [ ] KASEIKYO
| |
− | │ │ [*] DENON
| |
− | │ │ [ ] RECS80
| |
− | │ │ [ ] RECS80EXT
| |
− | │ │ [*] RC5(X)
| |
− | │ │ [ ] RC6
| |
− | │ │ [ ] NUBERT
| |
− | │ │ [*] BANG&OLUFSEN
| |
− | │ │ [*] GRUNDIG
| |
− | │ │ [ ] NOKIA
| |
− | │ │ [*] SIEMENS
| |
− | │ │ [ ] FDC
| |
− | │ │ [ ] RCCAR
| |
− | │ │ [ ] NIKON
| |
− | │ │ --- Debugging Flags
| |
− | │ │ [ ] IRMP Debug
| |
− | | |
− | | |
− | IRMP dekodiert auch das RC5-Protokoll, so dass der separat in [[Ethersex]] enthaltene [[RC5]]-Dekoder nicht länger benötigt wird.
| |
− | | |
− | == [[ECMD]] ==
| |
− | | |
− | IRMP implementiert eine [[ECMD]] Schnittestelle zum Auslesen empfangener und dekodierter IR-Kommandos und zum Senden von IR-Kommandos. Siehe [[Ecmd_Reference|ECMD Referenz]].
| |
− | | |
− | == [[Control6]] ==
| |
− | | |
− | === Ausgabe empfangener IR-Zeichen via [[SYSLOG|Syslog]] ===
| |
− | | |
− | <source lang="text">
| |
− | | |
− | CONTROL_START
| |
− | | |
− | THREAD(read_irmp)
| |
− | ON IRMP_READ > 0 DO
| |
− | SYSLOG("IRMP %02hhd:%04hX:%04hX:%02hhX\n",
| |
− | IRMP_PROTOCOL, IRMP_ADDRESS, IRMP_COMMAND, IRMP_FLAGS);
| |
− | END
| |
− | THREAD_END(read_irmp)
| |
− | | |
− | ON STARTUP DO
| |
− | THREAD_START(read_irmp);
| |
− | END
| |
− | | |
− | CONTROL_END
| |
− | | |
− | </source>
| |
− | | |
− | Mit IRMP_READ wird auf empfangenen IR-Code geprüft und dieser in die Variablen IRMP_PROTOCOL, IRMP_ADDRESS, IRMP_COMMAND und IRMP_FLAGS gespeichert. Rückgabewerte größer Null signalisieren die Gültigkeit der Variablen. Bei IRMP_FLAGS=1 handelt es sich um eine Wiederholung.
| |
− | | |
− | === Durch empfangene IR-Zeichen [[Stella_Light|Stella]]/Pins schalten ===
| |
− | | |
− | <source lang="text">
| |
− | C6_HEADER(`/* This will be in control6.h */')
| |
− | #include "services/stella/stella.h"
| |
− | CONTROL_START
| |
− |
| |
− | THREAD(test)
| |
− | ON IRMP_READ > 0 DO
| |
− | if(IRMP_PROTOCOL==8 && IRMP_ADDRESS==0x0002) switch(IRMP_COMMAND)
| |
− | {
| |
− | case 0x0268:
| |
− | stella_setValue(STELLA_SET_IMMEDIATELY, 0, 255);
| |
− | break;
| |
− | | |
− | case 0x0068:
| |
− | stella_setValue(STELLA_SET_IMMEDIATELY, 0, 0);
| |
− | break;
| |
− | }
| |
− | END
| |
− | THREAD_END(test)
| |
− |
| |
− | ON STARTUP DO
| |
− | THREAD_START(test);
| |
− | END
| |
− |
| |
− | CONTROL_END
| |
− | </source>
| |
− | | |
− | Das Script schaltet den Stella Channel 0 auf 255 oder auf 0, die Fernbedienung ist hier eine Denon (Protocol 8). Mit include wurde dem Script der Zugriff auf die Stellasourcen gestattet.<br>
| |
− | Statt ''"stella_setValue(STELLA_SET_IMMEDIATELY, 0, 255);"'' kann auch ''"PIN_SET(LED)"'' und ''"PIN_CLEAR(LED)"'' verwendet werden.([[Named_PIN|Named PIN]])<br>
| |
− | Zu beachten, das Protokoll ist dezimal in der Ausgabe, Command und Address sind hexadezimal.
| |
− | | |
− | === Senden von IR-Zeichen ===
| |
− | | |
− | <source lang="text">
| |
− | | |
− | dnl 01 = SIRCS
| |
− | dnl 02 = NEC
| |
− | dnl 03 = SAMSUNG
| |
− | dnl 04 = MATSUSHITA
| |
− | dnl 05 = KASEIKYO
| |
− | dnl 06 = RECS80
| |
− | dnl 07 = RC5(x)
| |
− | dnl 08 = DENON
| |
− | dnl 09 = RC6
| |
− | dnl 10 = SAMSUNG32
| |
− | dnl 11 = APPLE
| |
− | dnl 12 = RECS80EXT
| |
− | dnl 13 = NUBERT
| |
− | dnl 14 = BANG&OLUFSEN
| |
− | dnl 15 = GRUNDIG
| |
− | dnl 16 = NOKIA
| |
− | dnl 17 = SIEMENS
| |
− | dnl 18 = FDC
| |
− | dnl 19 = RCCAR
| |
− | dnl 20 = JVC
| |
− | dnl 21 = RC6A
| |
− | dnl 22 = NIKON
| |
− | | |
− | IRMP_PROTOCOL = 2;
| |
− | IRMP_ADDRESS = 1234;
| |
− | IRMP_COMMAND = 5678;
| |
− | IRMP_FLAGS = 1;
| |
− | | |
− | IRMP_WRITE;
| |
− | | |
− | </source>
| |
− | | |
− | Kommando 5678 an Gerät 1234 wird mit einer Wiederholung im NEC-Protokoll gesendet.
| |
− | | |
| [[Category:Ethersex]] | | [[Category:Ethersex]] |
| [[Category:IR]] | | [[Category:IR]] |
| [[Category:ECMD]] | | [[Category:ECMD]] |
| [[Category:Control6]] | | [[Category:Control6]] |