39-IRMP-Library (STM32F4)

Diese Library bindet den IRMP zum Empfang von Infrarot-Signalen (z.B. von einer IR-Fernbedienung) für den STM32F4 ein. Als Empfangs-IC kann z.B. ein SFH-5110 benutzt werden.

IRMP : “Infrarot-Multiprotokoll-Decoder” ist Opensource, die Quellfiles und ein ausführlicher Artikel findet sich im Mikrocontroller Forum.
http://www.mikrocontroller.net/articles/IRMP

IRMP ist sehr Umfangreich und erkennt sehr viele IR-Protokolle automatisch. Welche Protokolle benutzt werden sollen, kann in einem H-File eingestellt werden. Damit kann der Codeumfang verkleinert werden.

Es wird ein Timer benötigt und ein GPIO Pin. (im Beispiel TIM2 und PC13)

Falls ein noch nicht unterstütztes Protokoll eingebunden werden soll, kann die Logging-Funktion eingeschaltet werden, dann wird das Empfangene Signal per UART (an PA2, 115200 Baud) ausgegeben. (im File : “irmpconfig.h” den Define : “IRMP_LOGGING”)

Die empfangenen Daten werden in einer Struktur übergeben. Darin enthalten ist der IR-Codetyp, eine Adressnummer und eine Kommandonummer.

Welche Werte die benutzte Fernbedienung zurückliefert muss ausprobiert werden. Am einfachsten per Debugger einen Breakpoint setzen und die Werte beim drücken einer Taste auslesen. Meine Test Fernbedienung liefert als Adresse den Wert “65280″ und z.B. beim drücken der Taste “1″ den Wert “137″ zurück.

Beispielbild :

irmp

Benutzte Pins :

1
2
PC13 -> IR-Empfänger
PA2  -> TX vom UART (falls Logging enable)

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, TIM, MISC
Benutzte Librarys : IRMP

Struktur :

1
2
3
4
5
6
typedef struct {
  uint8_t protocol; 
  uint16_t address; 
  uint16_t command;
  uint8_t flags;
}IRMP_DATA;

Funktionen :

1
2
void UB_IRMP_Init(void);                        // zum initialisieren von IRMP
uint8_t UB_IRMP_Read(IRMP_DATA * irmp_data_p);  // zum auslesen der IR-Daten

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//--------------------------------------------------------------
// File     : main.c
// Datum    : 09.05.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der IRMP-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_irmp.h"
#include "stm32_ub_led.h"
 
int main(void)
{
  IRMP_DATA  myIRData;  // Variable für IR-Daten
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // init aller LEDs
  UB_Led_Init();
 
  // init vom IRMP
  UB_IRMP_Init();
 
  while(1)
  {
    // IR-Daten pollen
    if(UB_IRMP_Read(&myIRData)==TRUE) {
      // wenn IR-Daten empfangen wurden
      if(myIRData.address==65280) {
        // wenn Adresse vom IR-Device stimmt
 
        // Test ob Taste "1" gedrueckt wurde
        if(myIRData.command==137) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN);
        // Test ob Taste "2" gedrueckt wurde
        if(myIRData.command==157) UB_Led_On(LED_ORANGE); else UB_Led_Off(LED_ORANGE);
        // Test ob Taste "3" gedrueckt wurde
        if(myIRData.command==159) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED);
        // Test ob Taste "4" gedrueckt wurde
        if(myIRData.command==141) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE);
      }
    }
  }
}

Hier die Library zum Download :

ub_stm32f4_irmp_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_39_IRMP

11 Antworten auf 39-IRMP-Library (STM32F4)

  1. Daniel sagt:

    Bitte füge oben noch einen Link zum entsprechenden Wiki-Artikel im µC.net hinzu:
    http://www.mikrocontroller.net/articles/IRMP

    • admin_ub sagt:

      kein Problem

  2. Joerg sagt:

    Hallo Uwe, ich finde da irgendwie keine Funktion um das logging ein zu schalten?

    • admin_ub sagt:

      Der define steht im File “irmpconfig.h” bei “IRMP_LOGGING”

  3. Joerg sagt:

    Hier sollte das hin..

    Ist das getestet? Stm32f4xx_uart.h / .c sind im Projekt nicht enthalten gewesen.

  4. Joerg sagt:

    jetzt kommen Einsen und Nullen über den uart. Neonlicht scheint eine Menge Störungen zu produzieren… per Debug habe ich mal die von meiner Fernbedienung gesendeten Codes ausgelesen. Das Funktioniert zumindest. Die LEDs schalten.

    Aber auch da kommen nur 1 und 0en heraus. (Bei gedrückter Taste)

    • admin_ub sagt:

      die UART-Lib von STM ist nicht im Projekt enthalten (hab ich vergessen)
      Die Debug ausgabe ist nicht von mir, sondern vermutlich von Frank (dem Autor von IRMP). ich denke die Ziffern sollen das gescannte Signal darstellen, also die Impulsfolge und Länge um daraus z.B. ein noch unbekanntes Protokoll ermitteln zu können. (als Oszi ersatz sozusagen)

      • Joerg sagt:

        Ist dein Empfänger auch so empfindlich gegen Neonlicht?

        • admin_ub sagt:

          hab ich nicht geprüft.

  5. Joerg sagt:

    Naja bei ca 100o Zeichen für ein Tastendruck braucht man dann wohl schon ein Programm zur Auswertung ;)

    • Frank M. sagt:

      Das Programm zum Auswerten ist IRMP selbst. Das ist auch unter Windows und Linux lauffähig. Wie das geht, steht im Artikel:

      http://www.mikrocontroller.net/articles/IRMP

      (Suche nach Windows, Linux und IRMP_LOGGING)

      Wenn Du ein unbekanntes Protokoll hast, was von IRMP nicht unterstützt wird (es “versteht” mittlerweile ca. 40), kannst Du mir die Logs (1en und 0en) schicken. Dann baue ich es in IRMP ein.


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert