IRMP

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche

IRMP ist eine Portierung des Infrarot-Multiprotokoll-Decoders nach Ethersex.


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.

Beispiel für einen ATMega32 aus: pinning/hardware/pollin_evalboard.m4

 ifdef(`conf_IRMP', `dnl
   pin(IRMP_RX, PD2)
 #define IRMP_USE_TIMER0
 #define IRMP_RX_LOW_ACTIVE
 #undef IRMP_RX_LED_LOW_ACTIVE
   pin(IRMP_TX, PD7) dnl OC2
 ')

Bedeutung:

  • IRMP_RX - Pin an dem der IR-Empfänger angeschlossen ist
  • IRMP_USE_TIMER0 - benutze Timer0 für den Empfang, Timer2 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_TIMER0)
    Achtung: 0B bzw 2B bei MCU mit A/B Kanal


Etherape: IRMP moduliert das IR Signal per PWM auf die Trägerfrequenz. Auf dem Etherape-Board übernimmt ein NE555 diese Funktion, d.h. die Funktionen irmp_tx_on() und irmp_tx_off() in hardware/ir/irmp/irmp.c sind entsprechend anzupassen.

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 --->
 ...
 │ │                      [*] Send IRMP IR-codes
 │ │                      [*] IRMP ecmd
 │ │                      --- Protocols
 │ │                      [ ] SIRCS
 │ │                      [*] NEC
 │ │                      [ ] JVC
 │ │                      [ ] SAMSUNG
 │ │                      [ ] MATSUSHITA
 │ │                      [ ] KASEIKYO
 │ │                      [*] DENON
 │ │                      [ ] RECS80
 │ │                      [ ] RECS80EXT
 │ │                      [*] RC5(X)
 │ │                      [ ] RC6
 │ │                      [ ] NUBERT
 │ │                      [*] BANG&OLUFSEN
 │ │                      [*] GRUNDIG
 │ │                      [ ] NOKIA
 │ │                      [*] SIEMENS
 │ │                      [ ] FDC
 │ │                      [ ] RCCAR
 │ │                      --- 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 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.

Senden von IR-Zeichen

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;

Kommand 5678 an Gerät 1234 wird mit einer Wiederholung im NEC-Protokoll gesendet.