Difference between revisions of "IRMP"
(→ECMD) |
(quelltextpassagen korrigiert) |
||
Line 107: | Line 107: | ||
=== Output received characters via [[SYSLOG|Syslog]] === | === Output received characters via [[SYSLOG|Syslog]] === | ||
− | + | CONTROL_START | |
− | + | ||
− | CONTROL_START | + | THREAD(read_irmp) |
− | + | ON IRMP_READ > 0 DO | |
− | THREAD(read_irmp) | + | SYSLOG("IRMP %02hhd:%04hX:%04hX:%02hhX\n", |
− | ON IRMP_READ > 0 DO | ||
− | |||
IRMP_PROTOCOL, IRMP_ADDRESS, IRMP_COMMAND, IRMP_FLAGS); | IRMP_PROTOCOL, IRMP_ADDRESS, IRMP_COMMAND, IRMP_FLAGS); | ||
− | END | + | END |
− | THREAD_END(read_irmp) | + | THREAD_END(read_irmp) |
− | + | ||
− | ON STARTUP DO | + | ON STARTUP DO |
− | + | THREAD_START(read_irmp); | |
− | END | + | END |
− | + | ||
− | CONTROL_END | + | CONTROL_END |
− | |||
− | |||
IRMP_READ checks for received IR code and stores it in the variables IRMP_PROTOCOL, IRMP_ADDRESS, and IRMP_COMMAND IRMP_FLAGS. Return values greater than zero indicate the validity of the variables. If IRMP_FLAGS = 1 it is a repetition. | IRMP_READ checks for received IR code and stores it in the variables IRMP_PROTOCOL, IRMP_ADDRESS, and IRMP_COMMAND IRMP_FLAGS. Return values greater than zero indicate the validity of the variables. If IRMP_FLAGS = 1 it is a repetition. | ||
Line 130: | Line 126: | ||
=== Control of [[Stella_Light)|Stella]]/Pins by IR commands === | === Control of [[Stella_Light)|Stella]]/Pins by IR commands === | ||
− | + | C6_HEADER(`/* This will be in control6.h */') | |
− | + | #include "services/stella/stella.h" | |
− | C6_HEADER(`/* This will be in control6.h */') | + | CONTROL_START |
− | #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) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | END | ||
− | THREAD_END(control_stella) | ||
− | ON STARTUP DO | + | ON STARTUP DO |
− | + | THREAD_START(control_stella); | |
− | END | + | END |
− | CONTROL_END | + | CONTROL_END |
− | |||
− | |||
The script switches the Stella channel 0 to 255 or 0, the remote control is a Denon (Protocol 8). With ''include'' access to the Stella sources granted.<br> | The script switches the Stella channel 0 to 255 or 0, the remote control is a Denon (Protocol 8). With ''include'' access to the Stella sources granted.<br> | ||
Line 168: | Line 160: | ||
=== Send IR commands === | === Send IR commands === | ||
− | + | dnl 01 = SIRCS | |
− | dnl 01 = SIRCS | + | dnl 02 = NEC |
− | dnl 02 = NEC | + | dnl 03 = SAMSUNG |
− | dnl 03 = SAMSUNG | + | dnl 04 = MATSUSHITA |
− | dnl 04 = MATSUSHITA | + | dnl 05 = KASEIKYO |
− | dnl 05 = KASEIKYO | + | dnl 06 = RECS80 |
− | dnl 06 = RECS80 | + | dnl 07 = RC5(x) |
− | dnl 07 = RC5(x) | + | dnl 08 = DENON |
− | dnl 08 = DENON | + | dnl 09 = RC6 |
− | dnl 09 = RC6 | + | dnl 10 = SAMSUNG32 |
− | dnl 10 = SAMSUNG32 | + | dnl 11 = APPLE |
− | dnl 11 = APPLE | + | dnl 12 = RECS80EXT |
− | dnl 12 = RECS80EXT | + | dnl 13 = NUBERT |
− | dnl 13 = NUBERT | + | dnl 14 = BANG&OLUFSEN |
− | dnl 14 = BANG&OLUFSEN | + | dnl 15 = GRUNDIG |
− | dnl 15 = GRUNDIG | + | dnl 16 = NOKIA |
− | dnl 16 = NOKIA | + | dnl 17 = SIEMENS |
− | dnl 17 = SIEMENS | + | dnl 18 = FDC |
− | dnl 18 = FDC | + | dnl 19 = RCCAR |
− | dnl 19 = RCCAR | + | dnl 20 = JVC |
− | dnl 20 = JVC | + | dnl 21 = RC6A |
− | dnl 21 = RC6A | + | dnl 22 = NIKON |
− | dnl 22 = NIKON | + | dnl 23 = RUWIDO * no tx support yet |
− | dnl 23 = RUWIDO * no tx support yet | + | dnl 24 = IR60 * no tx support yet |
− | dnl 24 = IR60 * no tx support yet | + | dnl 25 = KATHREIN * no tx support yet |
− | dnl 25 = KATHREIN * no tx support yet | + | dnl 26 = NETBOX * no tx support yet |
− | dnl 26 = NETBOX * no tx support yet | + | dnl 27 = NEC16 |
− | dnl 27 = NEC16 | + | dnl 28 = NEC42 |
− | dnl 28 = NEC42 | + | dnl 29 = LEGO |
− | dnl 29 = LEGO | + | dnl 30 = THOMSON * no tx support yet |
− | dnl 30 = THOMSON * no tx support yet | + | |
− | + | IRMP_PROTOCOL = 2; | |
− | IRMP_PROTOCOL = 2; | + | IRMP_ADDRESS = 1234; |
− | IRMP_ADDRESS = 1234; | + | IRMP_COMMAND = 5678; |
− | IRMP_COMMAND = 5678; | + | IRMP_FLAGS = 1; |
− | IRMP_FLAGS = 1; | + | |
− | + | IRMP_WRITE; | |
− | IRMP_WRITE; | ||
− | |||
Command 5678 to device 1234 will be send with one repetition using the NEC protocol. | Command 5678 to device 1234 will be send with one repetition using the NEC protocol. |
Revision as of 01:15, 3 January 2012
IRMP | |
---|---|
Status | Stable
|
menuconfig | I/O->IR Receivers->IRMP |
Pinning | yes |
Ecmd | yes |
Control6 | yes |
Depends on | ECMD |
Requires | - |
Code | https://github.com/ethersex/ethersex/tree/master/hardware/ir/irmp |
IRMP is a port of the infrared multi-protocol decoder for Ethersex.
Contents
Connection
The reception of IR signals is performed by a receiver TSOP1736 type (or similar). This may be connected to any pin. The interrogation of the pins and the decoding of the IR protocol is done in an ISR, which occupies one 8-bit timer of the ATmegas.
When sending the signal with the carrier frequency of the respective IR Protocol is PWM modulated. This is another 8-bit timer of the ATmegas (OC0/OC2) is demonstrated. On the Etherrape board takes a NE555 this function, ie the option Use external modulator for the transmitter is activated. It saves a timer on the AVR is set at a carrier frequency.
Example of a ATMega32 from: 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 ')
Meaning:
- IRMP_RX - pin the IR receiver is connected to
- IRMP_USE_TIMER2 - use Timer2 for receiver, Timer0 for sender (undef = reversed)
- IRMP_RX_LOW_ACTIVE - the IR receiver is low-active (undef = high-active)
- IRMP_RX_LED_LOW_ACTIVE - the control LED of the receiver is switched to USS (undef = switched to GND)
- IRMP_TX - pin the IR sender is connected to (=output of Timer0 or Timer2, see IRMP_USE_TIMER2)
Caution: 0A to 2A if MCU with A / B channel - IRMP_TX_LED_LOW_ACTIVE - the control LED of the sender is switched to USS (undef = switched to GND)
Configuration
Each supported IR protocol occupies memory of code. Therefore, one should select only the required protocols. A detailed overview of the protocols are the article in the 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 │ │ [ ] NEC16 │ │ [ ] NEC42 │ │ [ ] JVC │ │ [ ] SAMSUNG │ │ [ ] MATSUSHITA │ │ [ ] KASEIKYO │ │ [*] DENON │ │ [ ] RECS80 │ │ [ ] RECS80EXT │ │ [*] RC5(X) │ │ [ ] RC6 │ │ [ ] NUBERT │ │ [*] BANG&OLUFSEN │ │ [*] GRUNDIG │ │ [ ] NOKIA │ │ [*] SIEMENS │ │ [ ] FDC │ │ [ ] RCCAR │ │ [ ] NIKON │ │ [ ] RUWIDO │ │ [ ] IR60 │ │ [ ] KATHREIN │ │ [ ] NETBOX │ │ [ ] LEGO │ │ [ ] THOMSON │ │ --- Debugging Flags │ │ [ ] IRMP Debug
IRMP also decodes the RC5 protocol, so that the separately Ethersex contained RC5 decoder is not needed any longer.
ECMD
IRMP implements a ECMD interface for reading received and decoded IR commands and send IR commands. See ECMD reference.
Control6
Output received characters 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
IRMP_READ checks for received IR code and stores it in the variables IRMP_PROTOCOL, IRMP_ADDRESS, and IRMP_COMMAND IRMP_FLAGS. Return values greater than zero indicate the validity of the variables. If IRMP_FLAGS = 1 it is a repetition.
Control of Stella/Pins by IR commands
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
The script switches the Stella channel 0 to 255 or 0, the remote control is a Denon (Protocol 8). With include access to the Stella sources granted.
Instead of "stella_setValue (STELLA_SET_IMMEDIATELY, 0, 255);" "PIN_SET (LED)" and "PIN_CLEAR (LED)" can be used (named pin).
|Named PIN]]).
Send IR commands
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 dnl 23 = RUWIDO * no tx support yet dnl 24 = IR60 * no tx support yet dnl 25 = KATHREIN * no tx support yet dnl 26 = NETBOX * no tx support yet dnl 27 = NEC16 dnl 28 = NEC42 dnl 29 = LEGO dnl 30 = THOMSON * no tx support yet IRMP_PROTOCOL = 2; IRMP_ADDRESS = 1234; IRMP_COMMAND = 5678; IRMP_FLAGS = 1; IRMP_WRITE;
Command 5678 to device 1234 will be send with one repetition using the NEC protocol.