USB-IRMP STM32
Inhaltsverzeichnis
Einleitung
Die Punkte 1-5 beschreiben die nötigen Schritte für Entwickler bzw. Anwender die auf Basis eines STM32 Mikrokontrollers einen IR-Receiver aufbauen möchten. Fertigversionen werden ab Punkt 6 beschrieben.
Der IR Receiver bietet folgende Features
- Anschluss per USB an einen PC oder Embedded-System
- Empfang von IR Signalen
- Aussenden von IR Signalen
- Einschalten des PCs
Die STM32 Patche für IRMP sind mittlerweile alle in IRMP aufgenommen worden, so dass jetzt das Einbauen einer neuen IRMP Version nur minimalste Anpassungen erfordert.
Diese Funktionen sind von der HW abhängig.
Einsatz im easyVDR
Seit Oktober 2015 ist die Version mit dem "SimpleCircuit" als Standard verfügbar. Mit aktivem SimpleCircuit ist DIO als OpenDrain beschaltet, und im Ruhezustand ist DIO open, da fliesst kein Strom. Mit Einschaltsignal zieht DIO auf Masse, und wenn ein aktiver Motherboard-Einschaltpin angeschlossen ist, wird der auf Low gezogen, und das PC schaltet ein.
Test des Einschaltpins am Mainboard: Man misst, ob der eine Pin an Masse liegt und ob der andere ca. +3,3V oder +5V führt. Dann schließt man beide über ein Multimeter kurz, und misst den Strom. Der beträgt üblicherweise nur wenige mA, und solange es unter 25mA sind, ist der Test bestanden. Wer auf Nummer sicher gehen will nimmt ein hochohmig gestelltes Potentiometer und verringert langsam den Widerstand. Achtung: Wie immer bei Hobbyprojekten ist jeder selbst verantwortlich, keiner der Beteiligten übernimmt eine Haftung für eventuelle Schäden.
PS: Dass der Author hier nichts miss und aufgrund des 220Ohm Schutzwiderstandes einfach ausprobiert wie herum das Kabel zum Power-Anschluss am Mainboard aufgesteckt werden muss spielt keine Rolle.
Ohne SimpleCircuit ist es wie folgt:
Im Ruhezustand ist DIO (beinahe) auf Masse, da es PushPull beschaltet ist.
Das Einschaltsignal kommt für 500 ms: https://github.com/j1rie/IRMP_STM32/blob/master/STM32F103/src/main.c#L294
Währenddessen ist DIO (beinahe) auf VCC (3,3V).
Details
Zum Entwickeln wurde CooCox benutzt. Eine sehr gute Einführung in das Thema gibt es hier: http://www.olliw.eu/2013/stm32-this-and-that/
Die Firmware kann derzeit
- sich als HID Device anmelden
- über USB2 in Fullspeed Daten ein/ausgeben
- IR empfangen
- IR senden
- den PC aus Standby oder Ausgeschaltet über USB aufwecken (+5V auf USB nötig)
- von der Kommandozeile aus IR senden
- per definierter Fernbedienungs-Taste IR senden
- per irmplircd IR Codes an VDR weitergeben
- per Kommandozeile irgendetwas tun
- per empfangenem IR Code irgendetwas tun
HW Plattformen
STM32F103
Der STM32F103 ist massenhaft und günstig verfügbar. Eine günstige HW-Plattform lässt sich Möglicherweise auf Basis einen Programmers finden:
Zum flashen dieses Programmers wird ein zweiter Programmer benötigt.
Flashen:
Zum Flashen muss der Boot1 Jumper umgesteckt werden und Reset gedrückt werden.
Das Flashen erfolgt beispielsweise so:
sudo ./stm32flash -v -w IR.bin /dev/ttyUSB0 stm32flash 0.3 http://stm32flash.googlecode.com/ Using Parser : Raw BINARY Serial Config: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Wrote and verified address 0x08002e28 (100.00%) Done. Resetting device... done.
oder so:
dfu-util -a 0 -s 0x8000000 -D /Pfad/IR.bin
Zu checken: In irmpconfig.h ist der Kommentar "use C6 as IR input on STM32", und in den beiden Zeilen darunter kannst du als IRMP_PORT_LETTER und IRMP_BIT_NUMBER statt C6 etwas anderes auswählen.
Pinbelegung:
- Aufgezählter Listeneintrag
- IR in vom TSOP an A6
- Toggle LED an B12 (Wie herum die LED ist, sollte egal sein, soll ja nur toggeln. B12-LED-R-Masse oder B12-LED-R-3,3V. Unter Windows mit Hterm bei 115200, 8n1 bekommt man auf Tastendrücke Nullen und Einsen.)
- IR Sendediode an B6
- Einschalter an B7 und über USB
- Logging an B10
STM32F105
Der STM32F105 hat den Vorteil, dass man keine Hardware zum Flashen braucht. Er kann direkt über USB geflasht werden (dfu-util). Die STM32F105 Firmware ist einfach anpassbar an STM32F107, STM32F2xx und STM32F4xx, da dieselbe USB Library genutzt wird. Die Software stammt von: http://mikrocontroller.bplaced.net/wordpress/?page_id=1516 http://mikrocontroller.bplaced.net/wordpress/?page_id=1940 http://mikrocontroller.bplaced.net/wordpress/?page_id=1993 (IRMP, IRSND, USB_HID für STM32F4) benutzt und an den STM32F105 angepasst.
Pinbelegung:
- IR in vom TSOP an C6
Compilieren
Unter Ubuntu wird die Toolchain wie folgt installiert:
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded sudo apt-get update sudo apt-get install gcc-arm-none-eabi
Installation Fertigversion des IRMP-STM32 Empfängers
Wer sich für eine Fertigversion des IRMP-STM32 Empfängers entschieden hat, z.B. diesen Link (Anmeldung im VDR-Portal notwendig) oder diesen von Martin Link, hat es relativ leicht, da dieser voll von easyVDR ab V2.x unterstützt wird.
Nach dem Einbau in den VDR im easyVDR Toolmenu unter VDR-Setup nach neuem Fernbedienungsempfänger suchen und den USB-IRMP auswählen. Der Empfänger ist nun einsatzbereit und sollte die Codes der sendenden Fernbedienung (FB) bereits empfangen. Zum Test bei laufendem VDR auf einem (Putty-)Terminal irw eingeben und eine oder mehrere beliebige Tasten drücken. Es sollten nun die von der FB gesendeten Codes angezeigt werden. Abbruch mit Eingabe strg+c.
Erstellung key_irmp Datei
Die key_irmp Datei enthält alle notwendigen Tastencodes der FB. Die Erstellung kann im Toolmenu unter Experimental erfolgen. Hier gibt es einen IRMP Keymap Builder. Alternativ kann auch über die STM32 Software (Einrichtung s. unter Konfigurationsprogramm IRMP-STM32) eine Keymap erstellt werden. Nachdem die key_irmp Datei erstellt ist, muss diese nun in ein Verzeichnis mit dem Namen der verwendeten FB (z.B. Harmony300) unter /var/lib/vdr/remotes abgelegt werden. Nach einem Rechnerneustart dann im Toolmenu unter VDR-Setup die erstellte Fernbedienung (alle anzeigen lassen) auswählen. Das System kopiert automatisch die von euch erstellte key_irmp an die richtige Stelle (/var/lib/vdr/) und benennt diese auch in irmp_keymap um. Ein weiterer Neustart sollte nun die FB funktionieren lassen.
Wenn man einen neu (eigene) Fernbedienung anlegt, sollte im Verzeichnis neben der Dateien key_irmp auch noch eine Dummy lircd.conf.irmp_lirc ablegen, damit das Setup diese Fernbedienung auch unter den kompatiblen Modellen auflistet.
Erfahrungen/Hinweise
- Die remote.conf Datei sollte original und unverändert sein
- Der IRMP-STM32 Empfänger von User jrie im VDR-Portal funktioniert mit dem TSOP vom Atric Empfänger. Getestet mit einem Vishay TSOP Version 32538. Die PIN-Belegung kann vom Datenblatt des Herstellers Vishay entnommen werden. Vor Installation Version und Hersteller des Atric-TSOP kontrollieren!
- Der IRMP-STM32 Empfänger von User jrie im VDR-Portal funktioniert mit einer ungeschirmten Kabellänge zwischen STM32 Empfänger und TSOP von bis zu 7m problemlos (getestet von User Schwabe)
Konfigurationsprogramm IRMP-STM32
Das Konfigurationsprogramm IRMP-STM32 ist für Linux und Windows verfügbar. Unter Linux kann es mit sudo apt install stm32-config-gui installiert und per grafischer Oberfläche eingerichtet werden. Startbefehl lautet sudo stm32IRconfig_gui.
Anlernen der wakeup Taste
- Im Feld set by remote den wakeup Button drücken
- Gewünschte Taste auf der Fernbedienung drücken - Fertig
Erstellen einer key_irmp Datei
- Button receive mode drücken
- Taste auf der Fernbedienung drücken
- Name der Taste in das Textfeld Key" eingeben und Button append drücken.
- 2. und 3. für weitere benötigte Tasten wiederholen
- Danach Button apply drücken (nicht in der aktuellen Windows Version). Dann kann man testen, ob alle Tasten zugewiesen wurden
- Mit dem Button save speichert man die erstellte Datei mit dem Namen key_irmp ab
Dankesworte
Geschrieben wurde die STM32 Software von "jrie" aus dem VDRPortal. Dieses "Produkt basiert auf der Arbeit vieler anderer: ....