Diese Library bindet den IRSND zum senden von Infrarot-Signalen (wie eine IR-Fernbedienung) für den STM32F4 ein. Als Sende-Diode kann jede “normale” IR-LED benutzt werden und über einem Vorwiderstand (z.B. 180 Ohm) an den PIN der CPU angeschlossen werden. (Wer will das die LED heller leuchtet, kann sie auch mit einem zusätzlichen Transistor schalten…dann bekommt man event. eine höhere Reichweite)
IRSND : “Infrarot-Multiprotokoll-Encoder” ist Opensource, die Quellfiles und ein ausführlicher Artikel findet sich im Mikrocontroller Forum.
http://www.mikrocontroller.net/articles/IRMP
IRSND ist sehr Umfangreich und unterstützt sehr viele IR-Protokolle. Welche Protokolle benutzt werden sollen, kann in einem H-File eingestellt werden. Damit kann der Codeumfang verkleinert werden.
Es werden zwei Timer benötigt und ein GPIO Pin. (im Beispiel TIM2, TIM10 und PB8)
Hinweis : der Pin ist nicht beliebig sondern wird vom benutzten Timer vorgegeben, weil dessen AF Funktion (PWM) benutzt wird. (Bitte im RefManual nachlesen falls ihr einen anderen benutzen wollt)
Die Daten die gesendet werden sollen, müssen in einer Struktur abgespeichert werden. Darin enthalten ist der IR-Codetyp, eine Adressnummer und eine Kommandonummer.
Welche Werte das zu steuernde Gerät benötigt muss zuvor ermittelt werden. Am einfachsten mit der IRMP-Library von hier an der “original” Fernbedienung auslesen.
Meine Test Fernbedienung liefert als Codetyp “5″ als Adresse den Wert “8194″ und z.B. beim drücken der Taste “ARD″ den Wert “33024″ zurück.
Beispielbild :
Benutzte Pins :
1 | PB8 -> IR-Sender |
Voraussetzungen :
1 2 | Benutzte Module der CooCox-IDE : GPIO, TIM, MISC Benutzte Librarys : IRSND |
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_IRSND_Init(void); // zum initialisieren von IRSND void UB_IRSND_Write(IRMP_DATA * irmp_data_p); // zum senden 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 | //-------------------------------------------------------------- // File : main.c // Datum : 14.06.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 IRSND-Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_irsnd.h" void Delay(volatile uint32_t nCount) { while(nCount--) { } } int main(void) { IRMP_DATA myIRData; // Variable für IR-Daten SystemInit(); // Quarz Einstellungen aktivieren // init vom IRSND UB_IRSND_Init(); // einen festen IR-Code einstellen // (am TV auf "ARD" umschalten) myIRData.protocol=5; myIRData.address=8194; myIRData.command=33024; myIRData.flags=0; while(1) { // kleine Pause (ca 3sec) Delay(30000000); // IR-Daten senden UB_IRSND_Write(&myIRData); } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :