IRMP: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(Control6)
(Control6)
Zeile 77: Zeile 77:
 
<source lang="text">
 
<source lang="text">
  
  CONTROL_START
+
CONTROL_START
  
  THREAD(read_irmp)
+
THREAD(read_irmp)
    ON IRMP_READ > 0 DO
+
ON IRMP_READ > 0 DO
      SYSLOG("IRMP %02d:%04X:%04X:%02X\n", IRMP_PROTOCOL, IRMP_ADDRESS, IRMP_COMMAND, IRMP_FLAGS);
+
  SYSLOG("IRMP %02d:%04X:%04X:%02X\n", IRMP_PROTOCOL, IRMP_ADDRESS, IRMP_COMMAND, IRMP_FLAGS);
    END
+
END
  THREAD_END(read_temp)
+
THREAD_END(read_temp)
  
  ON STARTUP DO
+
ON STARTUP DO
    THREAD_START(read_irmp);
+
  THREAD_START(read_irmp);
  END
+
END
  
  CONTROL_END
+
CONTROL_END
  
 
</source>
 
</source>

Version vom 17. Oktober 2010, 09:32 Uhr

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 einen 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 - benutzer 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 is (=Ausgang des Timer0 oder Timer2, vgl. IRMP_USE_TIMER0)

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  --->
 │ │          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 Schnittetselle zum Auslesen empfangener und dekodierte 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 %02d:%04X:%04X:%02X\n", IRMP_PROTOCOL, IRMP_ADDRESS, IRMP_COMMAND, IRMP_FLAGS);
END
THREAD_END(read_temp)

ON STARTUP DO
  THREAD_START(read_irmp);
END

CONTROL_END