Difference between revisions of "IRMP (Deutsch)"
(→Anschluss) |
|||
(24 intermediate revisions by 6 users not shown) | |||
Line 2: | Line 2: | ||
{{Module | {{Module | ||
|NAME=IRMP | |NAME=IRMP | ||
− | |MENUCONFIG={{I/O}}->IR->IRMP | + | |MENUCONFIG={{I/O}}->IR Receivers->IRMP |
|STATUS={{stable}} | |STATUS={{stable}} | ||
|PINNING=yes | |PINNING=yes | ||
|ECMD={{has_ecmd}} | |ECMD={{has_ecmd}} | ||
+ | |CONTROL6={{has_control6}} | ||
|DEPENDS=[[ECMD]] | |DEPENDS=[[ECMD]] | ||
|REQUIRES= - | |REQUIRES= - | ||
+ | |TIMER={{occupies_timer|0}}&{{occupies_timer|2}} (RX & TX) | ||
|CODE=[https://github.com/ethersex/ethersex/tree/master/hardware/ir/irmp https://github.com/ethersex/ethersex/tree/master/hardware/ir/irmp] | |CODE=[https://github.com/ethersex/ethersex/tree/master/hardware/ir/irmp https://github.com/ethersex/ethersex/tree/master/hardware/ir/irmp] | ||
}} | }} | ||
+ | |||
+ | [[File:Irm.jpg|200px|thumb|right|IR Sender/Empfänger-Modul mit LCD und USB-Anschluss]] | ||
IRMP ist eine Portierung des [http://www.mikrocontroller.net/articles/IRMP Infrarot-Multiprotokoll-Decoders] nach [[Ethersex]]. | IRMP ist eine Portierung des [http://www.mikrocontroller.net/articles/IRMP Infrarot-Multiprotokoll-Decoders] nach [[Ethersex]]. | ||
Line 35: | Line 39: | ||
* IRMP_RX - Pin an dem der IR-Empfänger angeschlossen ist | * 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_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- | + | * IRMP_RX_LOW_ACTIVE - der IR-Empfänger ist Low-Aktiv (undef = High-aktiv) |
* IRMP_RX_LED_LOW_ACTIVE - die Kontroll-LED des Empfängers ist gegen USS geschaltet (undef = gegen GND geschaltet) | * 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 | + | * IRMP_TX - Pin an dem der IR-Sender angeschlossen ist (= Ausgang des Timer0 oder Timer2, vgl. IRMP_USE_TIMER2)<br>'''Achtung: 0A bzw 2A bei MCU mit A/B Kanal''' Ohne einen externen Modulator sind ausschließlich OC0 oder OC2 möglich. Der Versuch einen anderen Pin zu konfigurieren wird ohne Fehlermeldung fehlschlagen. |
* IRMP_TX_LED_LOW_ACTIVE - die Kontroll-LED des Senders ist gegen USS geschaltet (undef = gegen GND geschaltet) | * IRMP_TX_LED_LOW_ACTIVE - die Kontroll-LED des Senders ist gegen USS geschaltet (undef = gegen GND geschaltet) | ||
Line 65: | Line 69: | ||
│ │ [*] IRMP ecmd | │ │ [*] IRMP ecmd | ||
│ │ --- Protocols | │ │ --- Protocols | ||
− | │ │ [ ] | + | │ │ [ ] A1TVBOX |
− | │ │ [ | + | │ │ [ ] ACP24 |
− | + | ... | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
│ │ [ ] THOMSON | │ │ [ ] THOMSON | ||
+ | │ │ [ ] VINCENT | ||
+ | │ │ --- Network | ||
+ | │ │ [*] Remote IRMP | ||
+ | │ │ (10001) UDP port (default 10001) | ||
│ │ --- Debugging Flags | │ │ --- Debugging Flags | ||
− | │ │ [ ] IRMP | + | │ │ [ ] IRMP |
+ | │ │ [ ] Remote IRMP | ||
− | IRMP dekodiert auch das RC5-Protokoll, so dass der separat in [[Ethersex]] enthaltene [[RC5]]-Dekoder nicht länger benötigt wird. | + | IRMP dekodiert auch das RC5-Protokoll, so dass der separat in [[Ethersex_(Deutsch)|Ethersex]] enthaltene [[RC5_(Deutsch)|RC5]]-Dekoder nicht länger benötigt wird. |
− | == [[ECMD]] == | + | == [[ECMD_(Deutsch)|ECMD]] == |
− | IRMP implementiert eine [[ECMD]] Schnittestelle zum Auslesen empfangener und dekodierter IR-Kommandos und zum Senden von IR-Kommandos. Siehe [[ | + | IRMP implementiert eine [[ECMD_(Deutsch)|ECMD]] Schnittestelle zum Auslesen empfangener und dekodierter IR-Kommandos und zum Senden von IR-Kommandos. Siehe [[ECMD_Reference|ECMD Referenz]]. |
− | == [[Control6]] == | + | == [[Control6_(Deutsch)|Control6]] == |
− | === Ausgabe empfangener IR-Zeichen via [[ | + | === Ausgabe empfangener IR-Zeichen via [[SYSLOG_(Deutsch)|Syslog]] === |
<source lang="text"> | <source lang="text"> | ||
Line 127: | Line 113: | ||
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. | 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. | ||
− | === Steuern von [[ | + | === Steuern von [[StellaLight_(Deutsch)|Stella]]/Pins durch IR-Zeichen === |
<source lang="text"> | <source lang="text"> | ||
Line 162: | Line 148: | ||
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> | 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 ([[ | + | Statt ''"stella_setValue(STELLA_SET_IMMEDIATELY, 0, 255);"'' kann auch ''"PIN_SET(LED)"'' und ''"PIN_CLEAR(LED)"'' verwendet werden ([[Named_PIN_(Deutsch)|Named PIN]]). |
=== Senden von IR-Zeichen === | === Senden von IR-Zeichen === | ||
<source lang="text"> | <source lang="text"> | ||
− | |||
dnl 01 = SIRCS | dnl 01 = SIRCS | ||
dnl 02 = NEC | dnl 02 = NEC | ||
dnl 03 = SAMSUNG | dnl 03 = SAMSUNG | ||
− | dnl 04 = | + | dnl 04 = MATSUSH |
dnl 05 = KASEIKYO | dnl 05 = KASEIKYO | ||
dnl 06 = RECS80 | dnl 06 = RECS80 | ||
− | dnl 07 = RC5 | + | dnl 07 = RC5 |
dnl 08 = DENON | dnl 08 = DENON | ||
dnl 09 = RC6 | dnl 09 = RC6 | ||
− | dnl 10 = | + | dnl 10 = SAMSG32 |
dnl 11 = APPLE | dnl 11 = APPLE | ||
− | dnl 12 = | + | dnl 12 = RECS80EX |
dnl 13 = NUBERT | dnl 13 = NUBERT | ||
− | dnl 14 = BANG | + | dnl 14 = BANG |
dnl 15 = GRUNDIG | dnl 15 = GRUNDIG | ||
dnl 16 = NOKIA | dnl 16 = NOKIA | ||
Line 190: | Line 175: | ||
dnl 21 = RC6A | dnl 21 = RC6A | ||
dnl 22 = NIKON | dnl 22 = NIKON | ||
− | dnl 23 = RUWIDO | + | dnl 23 = RUWIDO |
− | dnl 24 = IR60 | + | dnl 24 = IR60 |
− | dnl 25 = KATHREIN | + | dnl 25 = KATHREIN |
− | dnl 26 = NETBOX | + | dnl 26 = NETBOX |
dnl 27 = NEC16 | dnl 27 = NEC16 | ||
dnl 28 = NEC42 | dnl 28 = NEC42 | ||
dnl 29 = LEGO | dnl 29 = LEGO | ||
− | dnl 30 = THOMSON | + | dnl 30 = THOMSON |
+ | dnl 31 = BOSE | ||
+ | dnl 32 = A1TVBOX | ||
+ | dnl 33 = ORTEK | ||
+ | dnl 34 = TELEFUNKEN | ||
+ | dnl 35 = ROOMBA | ||
+ | dnl 36 = RCMM32 | ||
+ | dnl 37 = RCMM24 | ||
+ | dnl 38 = RCMM12 | ||
+ | dnl 39 = SPEAKER | ||
+ | dnl 40 = LGAIR | ||
+ | dnl 41 = SAMSG48 | ||
+ | dnl 42 = MERLIN | ||
+ | dnl 43 = PENTAX | ||
+ | dnl 44 = FAN | ||
+ | dnl 45 = S100 | ||
+ | dnl 46 = ACP24 | ||
+ | dnl 47 = TECHNICS | ||
+ | dnl 48 = PANASONIC | ||
+ | dnl 49 = MITSU_HEAVY | ||
+ | dnl 50 = VINCENT | ||
+ | dnl 51 = SAMSUNGAH | ||
+ | dnl 52 = IRMP16 | ||
+ | dnl 53 = RADIO1 | ||
IRMP_PROTOCOL = 2; | IRMP_PROTOCOL = 2; | ||
Line 205: | Line 213: | ||
IRMP_WRITE; | IRMP_WRITE; | ||
− | |||
</source> | </source> | ||
Kommando 5678 an Gerät 1234 wird mit einer Wiederholung im NEC-Protokoll gesendet. | Kommando 5678 an Gerät 1234 wird mit einer Wiederholung im NEC-Protokoll gesendet. | ||
+ | |||
+ | == Remote IRMP == | ||
+ | [[File:Remote_buttler.png|200px|thumb|right|Android App]] | ||
+ | Dies ist die Implementierung des [https://www.mikrocontroller.net/articles/Remote_IRMP Remote IRMP Protocols] in [[Ethersex]]. Damit wird es möglich, mit einer Android-App eine anlernbare IR-Fernbedienung zu realisieren. Der Anwender kann dann mehrere Geräte, die irgendwo im Haushalt verteilt sind, über das Handy steuern. Dabei sendet die App über WLAN zuvor gespeicherte IRMP-Codes an das gewünschtee Ethersex Gerät. Dieses strahlt dann die Signale über den IR-Sender aus, um damit unsere Geräte aus der Unterhaltungsindustrie zu schalten. |
Latest revision as of 18:29, 10 May 2018
IRMP | |
---|---|
Status | Stable
|
menuconfig | I/O->IR Receivers->IRMP |
Pinning | yes |
Ecmd | yes |
Control6 | yes |
Uses Timer | Timer 0& Timer 2 (RX & TX) |
Depends on | ECMD |
Requires | - |
Code | https://github.com/ethersex/ethersex/tree/master/hardware/ir/irmp |
IRMP ist eine Portierung des Infrarot-Multiprotokoll-Decoders nach Ethersex.
Contents
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 Etherrape-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-Aktiv (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 angeschlossen ist (= Ausgang des Timer0 oder Timer2, vgl. IRMP_USE_TIMER2)
Achtung: 0A bzw 2A bei MCU mit A/B Kanal Ohne einen externen Modulator sind ausschließlich OC0 oder OC2 möglich. Der Versuch einen anderen Pin zu konfigurieren wird ohne Fehlermeldung fehlschlagen. - 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 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 │ │ [ ] A1TVBOX │ │ [ ] ACP24 ... │ │ [ ] THOMSON │ │ [ ] VINCENT │ │ --- Network │ │ [*] Remote IRMP │ │ (10001) UDP port (default 10001) │ │ --- Debugging Flags │ │ [ ] IRMP │ │ [ ] Remote IRMP
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 Referenz.
Control6
Ausgabe empfangener IR-Zeichen via Syslog
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
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.
Steuern von Stella/Pins durch IR-Zeichen
C6_HEADER(`/* This will be in control6.h */')
#include "services/stella/stella.h"
CONTROL_START
THREAD(control_stella)
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(control_stella)
ON STARTUP DO
THREAD_START(control_stella);
END
CONTROL_END
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.
Statt "stella_setValue(STELLA_SET_IMMEDIATELY, 0, 255);" kann auch "PIN_SET(LED)" und "PIN_CLEAR(LED)" verwendet werden (Named PIN).
Senden von IR-Zeichen
dnl 01 = SIRCS
dnl 02 = NEC
dnl 03 = SAMSUNG
dnl 04 = MATSUSH
dnl 05 = KASEIKYO
dnl 06 = RECS80
dnl 07 = RC5
dnl 08 = DENON
dnl 09 = RC6
dnl 10 = SAMSG32
dnl 11 = APPLE
dnl 12 = RECS80EX
dnl 13 = NUBERT
dnl 14 = BANG
dnl 15 = GRUNDIG
dnl 16 = NOKIA
dnl 17 = SIEMENS
dnl 18 = FDC
dnl 19 = RCCAR
dnl 20 = JVC
dnl 21 = RC6A
dnl 22 = NIKON
dnl 23 = RUWIDO
dnl 24 = IR60
dnl 25 = KATHREIN
dnl 26 = NETBOX
dnl 27 = NEC16
dnl 28 = NEC42
dnl 29 = LEGO
dnl 30 = THOMSON
dnl 31 = BOSE
dnl 32 = A1TVBOX
dnl 33 = ORTEK
dnl 34 = TELEFUNKEN
dnl 35 = ROOMBA
dnl 36 = RCMM32
dnl 37 = RCMM24
dnl 38 = RCMM12
dnl 39 = SPEAKER
dnl 40 = LGAIR
dnl 41 = SAMSG48
dnl 42 = MERLIN
dnl 43 = PENTAX
dnl 44 = FAN
dnl 45 = S100
dnl 46 = ACP24
dnl 47 = TECHNICS
dnl 48 = PANASONIC
dnl 49 = MITSU_HEAVY
dnl 50 = VINCENT
dnl 51 = SAMSUNGAH
dnl 52 = IRMP16
dnl 53 = RADIO1
IRMP_PROTOCOL = 2;
IRMP_ADDRESS = 1234;
IRMP_COMMAND = 5678;
IRMP_FLAGS = 1;
IRMP_WRITE;
Kommando 5678 an Gerät 1234 wird mit einer Wiederholung im NEC-Protokoll gesendet.
Remote IRMP
Dies ist die Implementierung des Remote IRMP Protocols in Ethersex. Damit wird es möglich, mit einer Android-App eine anlernbare IR-Fernbedienung zu realisieren. Der Anwender kann dann mehrere Geräte, die irgendwo im Haushalt verteilt sind, über das Handy steuern. Dabei sendet die App über WLAN zuvor gespeicherte IRMP-Codes an das gewünschtee Ethersex Gerät. Dieses strahlt dann die Signale über den IR-Sender aus, um damit unsere Geräte aus der Unterhaltungsindustrie zu schalten.