Inhaltsverzeichnis:

Falling in Stm32: Fernbedienung für Home Media Center - Gunook
Falling in Stm32: Fernbedienung für Home Media Center - Gunook

Video: Falling in Stm32: Fernbedienung für Home Media Center - Gunook

Video: Falling in Stm32: Fernbedienung für Home Media Center - Gunook
Video: XIAOMI MI BOX S В 2022 ГОДУ АКТУАЛЬНА ❓ ТЕСТ 4K 60 FPS, HDD, ВИДЕО 3D, NETFLIX, DTS 5.1 2024, November
Anonim
Falling in Stm32: Fernbedienung für Home Media Center
Falling in Stm32: Fernbedienung für Home Media Center

Dies ist ein vollständiger Prototyp für die Fernbedienung des Home Media Centers basierend auf dem smt32-Mikrocontroller, stm32f103c8t6, bekannt als 'Bluepill'-Board. Angenommen, Sie verwenden einen PC für das Home Media Center. Es ist eine sehr flexible Lösung, mit der Sie eine riesige Videobibliothek auf der internen Festplatte ablegen oder Videos aus dem Netzwerk abspielen können, z einfach, den Software-Player jederzeit zu aktualisieren. Der Hauptnachteil dieser Lösung besteht darin, dass Sie Ihre Wiedergabe mit Maus und Tastatur steuern sollten. Die IR-Fernbedienung ist dafür sehr praktisch.

In diesem Artikel zeige ich, wie man mit dem Chip Bluepill Board eine eigene Fernbedienung erstellt.

Schritt 1: Die Idee

Die Idee
Die Idee
Die Idee
Die Idee

Die Grundidee ist sehr einfach: Das Bluepill Board hat einen eingebetteten USB-Anschluss und kann als USB-HID-Tastatur fungieren. Wenn wir einen IR-Empfänger an die Platine anschließen, könnte er den Befehl von Ihrer IR-Fernbedienung in „Tastendruck“der virtuellen Tastatur übersetzen. Es werden keine zusätzlichen Treiber benötigt!

Es gibt viele IR-Protokolle in der Welt um uns herum. Jedes Fernsehgerät des VCS-Anbieters hat sein eigenes IR-Protokoll. Aber alle diese Protokolle haben eines gemeinsam: Sie verwenden Pulsmodulation, um das Signal zu kodieren. Normalerweise gibt es eine Präambel: langer Impuls vor dem ersten Bit im Paket. Dann sendet die IR-Steuerung das gesamte Paket mit 0 und 1 und schließt die Übertragung mit einem langen Endimpuls ab. Um das Bit zu decodieren, müssen wir den Längenimpuls und die Länge des Peaks messen. Normalerweise sind die Spitzenlängen von logisch 0 und logisch 1 gleich, der Unterschied liegt in der vollständigen Pulslänge.

Die stm32-Mikrocontroller verfügen über eine integrierte Funktion zur Erfassung des PWM-Signals. Nahezu jeder Timer des Mikrocontrollers kann in die 'PWM-Signalerfassung mehr' eingefügt werden, wenn die Kanalvariablen des Timers die Gesamtlänge des Impulses und seine Spitzenlänge speichern. Hier muss ich das kleine Detail hervorheben: Wenn der IR-Empfänger das Signal empfängt, wird die Spannung an seinem Arbeitsstift 0 und im Ruhezustand beträgt die Spannung am Arbeitsstift 5 oder 3,3 Volt, abhängig von der Versorgungsspannung des IR-Empfängers. D.h. der Empfänger "invertiert" das Signal.

Mit dem PWM-Capture-Modus kann der stm32-Mikrocontroller einfach in einen IR-Fernbedienungsübersetzer von IR-Fernbedienung zu Tastaturcodes umgewandelt werden. Dann können Sie Ihre bevorzugte Visualisierungssoftware starten, zum Beispiel Kodi von VLC, um Ihren Lieblingsfilm auf dem Media Center abzuspielen.

Schritt 2: Controller erstellen

Controller erstellen
Controller erstellen
Controller erstellen
Controller erstellen
Controller erstellen
Controller erstellen
Controller erstellen
Controller erstellen

Zur Programmierung des stm32 Mikrocontrollers empfehle ich die kostenlose Software von STM: system Workbench (aka ac6) und das Boardkonfigurationstool cubeMX. Zum Hochladen der Software in den Mikrocontroller kann der Chip-Klon des ST-Link V2-Adapters verwendet werden. Die an diesen Schritt angehängten System-Workbench-Projektdateien, die Datei F1-IR_remote.zip.

Das Board-Konfigurationstool vereinfacht den Prozess der anfänglichen Hardwarekonfiguration unseres Mikrocontrollers.

Wenn Sie das System-Workbench-Tool verwenden, können Sie einfach das heruntergeladene Projekt verwenden. Wenn Sie das Projekt jedoch genauer untersuchen möchten, können Sie die Board-Konfiguration im cubeMX erstellen:

  • Neues Projekt erstellen und Board auswählen stm32f103c8
  • Wählen Sie 'Kristall/Keramik-Resonator' für den Punkt 'High Speed Clock (HSE)' im RCC-Menü.
  • Wählen Sie 'Serial Wire' für den Punkt 'Debug' im SYS-Menü.
  • Konfigurieren Sie den Timer #2 (TIM2-Menü) im PWM-Capture-Modus wie im Bild gezeigt:

    • Slave-Modus -> Reset-Modus
    • Triggerquelle -> TI1FP1
    • Taktquelle -> Interne Uhr
    • Kanal1 -> Input Capture Direktmodus
  • Kontrollkästchen 'Gerät (FS) im USB-Menü setzen
  • Wählen Sie das Pulldown-Menüelement 'Human Interface Device Class (HID)' im Menüpunkt 'Class of FS IP' im Menü USB_DEVICE
  • Stellen Sie im Taktkonfigurationsfeld sicher, dass dem Timer #2 72 MHz bereitgestellt werden, da wir die Timer-Zählung alle 1 mks benötigen.
  • Konfigurieren Sie im Konfigurationspanel das USB-Gerät wie im Bild gezeigt
  • Konfigurieren Sie im Konfigurationspanel Timer#2 wie folgt:

    • Prescaller - 71 (von 0 bis 71) - 1 Mikrosekunden-Tick!
    • Zählermodus - Auf
    • Zählerperiode - 39999 (wir sollten den langen Impuls messen können)
    • Eingangserfassungskanal1 - Fallende Flanke (denken Sie daran, dass das Signal vom IR-Empfänger invertiert ist)

Im PWM-Capture-Modus würde der Timer #2 wie folgt funktionieren:

Wenn die fallende Front erkannt wird, wird der Timer-Zähler im Kanal1-Register gespeichert und der Timer-Zähler auf 0 zurückgesetzt. Dann würde der Timer in Richtung aufwärts zählen. So können wir ganz einfach die Pulslänge in Mikrosekunden messen.

Standardmäßig simuliert die STM32 USB HID-Klasse die USB-Maus. Hier finden Sie die Anleitung, um den Controller in eine Tastatur zu verwandeln.

Schritt 3: Anpassen des Controllers

Das Projekt funktioniert mit Panasonic Fernbedienung und Kodi Media Center. Um das Projekt für Ihren eigenen Controller anzupassen, sollten Sie das Code-Array für Ihre Fernbedienung wie bei der Panasonic-Fernbedienung (panasonicCode) zum Inc/code.h-Header hinzufügen. Wie Sie sehen, hat jeder Befehl eine eindeutige ID (in der IRcommmand-Enumeration). Es gibt 24 Befehle (0-23), die vom Projekt erkannt werden. Die Befehle sind nach Relevanz sortiert.

typedef enum { IR_play = 0, IR_stop, IR_pause, IR_forward, IR_rewind, IR_last_channel, IR_OSD, IR_prevous_menu, IR_left, IR_right, IR_up, IR_down, IR_enter, IR_chapter_next, IR_chapter_next, IR_chapter_vorher, IR_info_title, IR_info, IR_subtitle_mark IR_title_title, IR_info, IR_subtitle_, IR_power, IR_unknown } IRcommand;

const uint16_t kbrd_kodi = {HID_KEY_P, HID_KEY_X, HID_KEY_SPACE, HID_KEY_F, HID_KEY_R, HID_KEY_0, HID_KEY_M, HID_KEY_BACKSPACE, HID_KEY_LEFT, HID_KEY_RIGHT, HID_KEY_UP, HID_KEY_DOWN, HID_KEY_ENTER, HID_KEY_DOT, HID_KEY_COMMA, HID_KEY_S, HID_KEY_I, HID_KEY_T, HID_KEY_L, (uint16_t (HID_LEFT_CTRL) << 8)| HID_KEY_T, HID_KEY_V, HID_KEY_Z, HID_KEY_W, HID_KEY_C };

const uint32_t panasonicCode = {0xd00505d, 0xd00000d, 0xd00606d, 0xd00525f, 0xd00929f, 0x100eced, 0xd00101d, 0x1002b2a, 0x1007273, 0x100f2f3, 0x1005253, 0x100d2d3, 0x1009293, 0x1002c2d, 0x100acad, 0x1009c9d, 0x1008e8f, 0x1004e4f, 0x100cecf, 0x1000e0f, 0x180c041, 0x1801091, 0x180a021, 0xd00bcb1 };

Dann sollten Sie Ihre eigene Fernbedienung in der Methode init() in der IR.cpp mit der Funktion addRemote() hinzufügen. Die Funktionsargumente sind:

  • Anzahl der Bits im Paket
  • Die Paket-Header-Länge
  • 'Null' Bitlänge
  • 'Eins' Bitlänge
  • Zeiger auf das Code-Array
  • Anzahl Elemente des Arrays

void IRcmd::init(void) { addRemote(48, 5252, 902, 1755, panasonicCode, sizeof(panasonicCode)/sizeof(uint32_t));

}

Außerdem enthält die Datei eine weitere Tabelle, um Befehle in Tastaturcodes umzuwandeln. Das Array kbdr_kodi enthält die Schlüsselcodes für das Kodi Media Center. Sie können ein weiteres Array für Ihr eigenes Media Center-Programm hinzufügen, z. B. den vlc-Player. Wenn Sie eine weitere Media Center-Anwendungstabelle hinzufügen würden, würden Sie ein weiteres Objekt KBD erstellen und es in der main.cpp initialisieren.

Schritt 4: Tools zur Vereinfachung der Schneiderei

Tools zur Vereinfachung der Schneiderei
Tools zur Vereinfachung der Schneiderei
Tools zur Vereinfachung der Schneiderei
Tools zur Vereinfachung der Schneiderei

Es gibt zwei weitere Projekte im Repository

  • IR-Untersuchung - ermöglicht die Messung der Timing-Parameter der Signale Ihrer Fernbedienung.
  • IR_capture - ermöglicht die Erfassung der HEX-Codes Ihrer Fernbedienung.

Laden Sie einfach das IR-Untersuchungsprojekt und verbinden Sie den USB-Port des Bluepill-Boards mit Ihrem Computer. Starten Sie dann ein beliebiges Terminalprogramm auf dem virtuellen seriellen Portgerät, das der stm32-Platine entspricht. Während Sie die Tasten auf Ihrer Fernbedienung drücken, misst das Programm die empfangenen Impulse und druckt die Durchschnittszeiten für verschiedene Impulse aus. Es sollte vereinfachen, die Impulslänge für den Paketkopf, Null- und Eins-Bit, zu ermitteln.

Im IR-Untersuchungsprojekt arbeitet der Timer #2 im PWM-Capture-Modus mit zwei Kanälen: Kanal 1 erfasst die gesamte Pulslänge und Kanal 2 erfasst die Peaklänge. Wenn die fallende Signalflanke erkannt wird, wird der Timerwert im Register von Kanal 1 gespeichert und der Timer mit 0 zurückgesetzt. Wenn die steigende Flanke des Signals erkannt wird, wird der Timerzähler im Register von Kanal 2 gespeichert.

Um die Tastencodes Ihrer eigenen Fernbedienung zu erfassen, kann das Projekt IR_capture verwendet werden. In der Datei main.c sollten Sie die Remote-Definition wie diese hinzufügen:

IRcode panasonic = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60 };

  • .hdr - die Kopfzeilenlänge in mks
  • .bits - die Anzahl der Bits im Paket
  • .zero - die Länge des Nullbits
  • .eins - die Länge eins das eine Bit
  • .dev - die Abweichung (die Zeitdifferenz, die akzeptiert werden kann). Normalerweise ist es 1/10 der kleinsten Länge.

Fügen Sie dann Ihre Fernbedienung zur Liste der unterstützten Fernbedienungen hinzu:

const IRcode* remote[2] = {&panasonic, &pioneer};

Empfohlen: