IRMP2Keyboard IR Fernbedienung nach PS2/USB Tastatur Konverter

  • Ich habe mich auch mal etwas mit IRMP befasst und eine eigene Firmware für einen IR-Fernbedienungsempfänger erstellt:


    https://github.com/M-Reimer/irmp2keyboard


    Wesentliche Funktionen:

    • Dank IRMP werden viele IR-Fernbedienungen unterstützt
    • Das einzige Tool, das zum Einrichten nötig ist, ist die Arduino IDE
    • PS2 und USB Tastaturen können emuliert werden
    • Der extern angesteckte Empfänger kann (sofern PS2 genutzt wird) bei vielen Mainboards direkt einen Boot auslösen
    • FDC-3402 Tastatur vollständig unterstützt

    Weitere Infos auf der Projektseite.


    Anregungen nehme ich gerne auf.


    Gerade weil in letzter Zeit wieder verstärkt über altes "serielles LIRC" diskutiert wurde, dachte ich, es könnte der richtige Zeitpunkt sein, mein Projekt mal vorzustellen. Aufbauen kann (zumindest die USB-Variante) eigentlich jeder der drei Pins verlöten kann.

  • Jetzt ist die Liste komplett. Habe die Tasten, die mehr als 2 Bytes senden, noch mit eingebaut.


    Allerdings wären, wenn man via PS2 starten will, zwei Tasten zu belegen, weil der VDR in der "yaVDR-Konfiguration" nicht auf "KEY_POWER" hört. Wer sich das selber mit in die remote.conf baut, braucht nur eine Taste.


    Edit: Im BIOS einfach einstellen, dass mit jeder beliebigen Taste gestartet werden soll. Habs zwar nicht ausprobiert aber dann sollte der PC eigentlich mit der Pausetaste starten.

  • Ich will in nächster Zeit mal bei Github ins Wiki eine Schritt für Schritt Anleitung reinpacken. Zumindest der reine USB-Receiver ist relativ einfach zu konfigurieren.

    Die PS2-Variante läuft übrigens jetzt schon ca. 4 Monate bei mir zuverlässig zum Steuern von Kodi und zum Starten des PC direkt über PS2.


    Besteht denn Bedarf an einer optionalen Lösung um den Power-Button-Anschluss am Mainboard anzusteuern? Im Prinzip könnte man den "aktiven Pin" vom Mainboard wieder direkt an einen Digitalpin vom Arduino bauen. Oder eben alternativ einen Optokoppler ansteuern.


    Sonst noch Vorschläge/Anforderungen?

  • Die "USB-Variante" hat jetzt ein Wakeup-Feature das den Power-Button steuern kann.


    In "config.h" das Kommentarzeichen vor der Zeile "WAKEUP_CODE" entfernen und den gewünschten Fernbedienungscode hier hinterlegen. Oben noch "PS2_KEYBOARD" kommentieren (um die USB-Variante zu bauen) und das ganze auf einen Arduino Pro Micro flashen.


    Pin "A3" ist dann der Pin für "Simple Circuit". Also mit 220 Ohm Widerstand auf den "heißen Pin" am Mainboard. Auf Wunsch kann hier auch ein Optokoppler angesteuert werden. Optokoppler dann mit passendem Vorwiderstand zwischen 5V und A3 anschließen.


    Via PS2 zu arbeiten finde ich zwar immer noch eleganter aber wenn jemand seinen Empfänger lieber einbauen will, dann hat er jetzt die Option.

  • Hi, nettes Projekt, habe mir zwar gerade einen FLIRC gegönnt, aber das Projekt scheint eigentlich noch besser zu sein, etwas zu spät gesehen.

    Aber was meinst du, hier reicht der ATmega nicht aus auf dem Board, oder?


    Micro USB Arduino


    Der hätte natürlich alles kompakt nur das Gehäuse fehlt. Aber das ist ja dank 3D druck kein Problem mehr.

    Gruß Martin (linuxdep)

  • Würde gehen. Müsstest aber IRMP dann auf einen anderen Port konfigurieren. Der voreingestellte passt nur für den Nano oder Pro Micro.


    Edit: Ich habe bisher die Finger von den Boards gelassen weil ich es wenig schön finde eine Platine direkt in einen USB-Port zu stecken. Die Platine ist auf jeden Fall härter als die Nickel- oder Goldbeschichtung der Kontakte im Port. Eine ebenso kleine Platine, aber mit SMD-USB-A Stecker, würde mir besser gefallen.

  • weil ich es wenig schön finde eine Platine direkt in einen USB-Port zu stecken.

    zumal die ja auch fast doppelt so teuer sind. Einen Vorteil hätten die Teile aber wohl, wenn man auf den internen USB-Pfosten möchte, lässt sich am Platinenstecker gut ein Pfosten anlöten.

  • Wenn die Kinder wieder in der Schule sind, könnte ich ja mal testen, die Frage ist sicher ob der Speicher reicht... so einteil habe ich glaube noch rumliegen.

    Zu den Kontakten... mir egal, wird ja nicht an/ab gesteckt, sondern ein mal dran und gut. Glaube nicht, dass die Lebenszeit der Kontakte früher endet als die der Hardware.

    Gruß Martin (linuxdep)

  • Ich baue mir gerade so einen Empfänger für einen VDR (PS/2 Version). Beim Anlernen habe ich jedoch Probleme mit dieser Fernbedienung und irmpdump (https://github.com/M-Reimer/irmp2keyboard). Zum einen kommen falsche Befehle, zum anderen kommen die richtigen (RC6A) nur ab und an (mehrmals die Tasten drücken).


    Hier mal die Ausgabe von "OK":

    Viele Tastendrücke werden gar nicht erkannt.


    Eine andere Terratec Fernbedienung klappt jedoch sehr gut:


    Auch wenn ich das SIEMENS-Protokoll deaktiviere (irmpconfig.h), wird es nicht besser - es bleiben nur die falschen Codes aus.


    Wenn ich nun das SimpleReceiver-Beispiel der IRMP-Bibliothek nehme, geht es um Welten besser (das SIEMENS Protokoll mal ausklammern):

    Code
    1. START /tmp/arduino_modified_sketch_104027/SimpleReceiver.ino
    2. Version 1.1 from Jul 16 2020
    3. Ready to receive IR signals at pin 12
    4. P=RC6A A=0xF C=0x422
    5. P=RC6A A=0xF C=0x422
    6. P=SIEMENS A=0x2AA C=0x15A
    7. P=RC6A A=0xF C=0x422
    8. P=SIEMENS A=0x2AA C=0x15A
    9. P=RC6A A=0xF C=0x422


    Verwendet IRMP2Keyboard eine zu alte IRMP-Version (ich habe es mit update-irmp.sh aktualisiert) - oder woran kann der Unterschied liegen?

    Die angelernten Tasten beider Fernbedienungen habe ich mal beigefügt.


    Marcus

    Files

    My VDRs:

    The post was edited 1 time, last by dad401 ().

  • Mit dem TSOP (sofern es einer ist und nicht irgendein anderes Fabrikat) hatte ich auch schonmal Probleme. Von daher kann ich die Frage von jrie nur unterstreichen. Ich hab eine Kathrein-Fernbedienung die nur richtig gut mit dem Empfangsbaustein geht den ich aus dem zugehörigen Sat-Receiver ausgebaut habe. Mit allen anderen war der Empfang unzuverlässig.


    Außerdem rate ich davon ab IRMP selber zu aktualisieren. Bitte nehmen was in meinem GIT liegt. Mit neueren Versionen geht das Merlin-Protokoll nicht mehr weil Frank das mit seinem 32bit-Support gekoppelt hat. Entweder Frank macht da wieder was möglich mit 16bit (er hat mir mal geschrieben das er zumindest darüber nachdenkt) oder ich muss mal schauen welche Commits genau ich umgekehrt reinfahren muss um 32bit wieder sauber los zu sein.

  • Ich habe mit zwei Empfängern getestet, einmal einem TSOP aus einem alten selbstgebauten UIRT2 (das war wohl ein TSOP1738 damals) und einem WinTV-Hauppauge-Empfänger den ich ausgeschlachtet habe.


    Wenn es an der Hardware liegen sollte - wieso geht es dann mit dem (aktuellen) IRMP?

    Nochmal zur Testkonfiguration:

    Arduino IDE mit einem Arduino UNO, IRMP 2.1.0 (alle Beispielcodes für den Empfänger funktionieren) sowie IRMP2Keyboard aus dem GIT.


    Ich habe statt dem in IRMP2Keyoard/IRMPdump mitgelieferten IRMP mal das o.g. IRMP V2.1.0 eingebaut - klappt auch. Das ganze soll bei mir sowieso nur auf einem Arduino Nano (später ggf. die USB Variante auf einen Micro) laufen. Wenn das dann an der PS/2 Schnittstelle funktioniert, lasse ich es einfach so.

    My VDRs:

  • IRMP 2.5.0 ist bereits 6 Jahre alt, 2.1.0 vermutlich 1-2 Jahre älter.

    Aktuell ist 3.2.x.

    https://www.mikrocontroller.net/svnbrowser/irmp/

  • Wenn es an der Hardware liegen sollte - wieso geht es dann mit dem (aktuellen) IRMP?

    Geht ja nur etwas besser, aber auch nicht 100%.


    Versuch macht klug, probier mal aktuelles IRMP und einen TSOP für RC6A (es gibt Tabellen, welcher TSOP mit welchem Protokoll gut kann).


    Edit: Die SMK_RC6_MCE läuft hier mit einem TSOP4838 und auch mit einem TSOP31236 perfekt (beide AGC2).

  • Der Empfänger scheint nun zu laufen. Ich glaube der alte TSOP war doch defekt / hat ne Macke.


    Habe nun folgende Ausgangsbasis:

    - den TSOP aus dem ausgeschlachteten Empfänger

    - IRMP2Keyboard nochmal neu aus dem GIT - ohne update-Skript!

    - ich habe ein paar Debug-Ausgaben eingebaut

    - ich habe eine LED ergänzt, die kurz angeht, wenn eine Taste gedrückt wird


    Hier mal die Ausgaben zweier Fernbedienungen (Protokoll, Adresse, Command, Flags):


    Nun das nächste Problem - irgendwie will das Teil nicht als PS/2 Tastatur.


    Nochmal zum Prüfen der PS/2 Verbindung:

    NANO <=> PS/2

    D3 <=> Data

    D2 <=> Clock

    5V <=> 5V

    GND <=> Ground


    Wenn ich den Empfänger anschließe und eine Taste drücke, leuchtet meine LED dauerhaft - als ob er nicht mehr aus dem "if (irmp_get_data(&data)" herauskommt. Debuggen ist ja etwas schwierig => 5V vom PC1 und 5V über USB vom PC2 klingt nicht gut.


    dmesg (Linux unter Ubuntu 18.04) sagt folgendes beim Anstecken:

    Code
    1. atkbd serio0: Failed to enable keyboard on isa0060/serio0
    2. input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0

    Was könnte nun noch falsch sein?



    Hier der Code mit den minimalen Änderungen:

    My VDRs:

  • Bevor wir überhaupt weiter versuchen das Problem einzugrenzen: Für mich sieht das so aus als hättest du Data und Clock vertauscht.


    D2 ist Data

    D3 ist Clock


    Wenn das ganz sicher so angeschlossen ist können wir schauen ob und wie man einen eventuellen Fehler eingrenzen kann.

  • Ich hab es soeben noch einmal geprüft. Am männlichen Stecker ist nach diesem Bild:




    Arduino D2 => 2 (Data)

    Arduino D3 => 6 (Clock)

    Arduino 5V => 3

    Arduino GND => 4


    Die Anschlüsse werden für die o.g. PINs aber für den weiblichen angegeben:

    Data => 1

    GND => 3

    VCC => 4

    CLK => 5


    Sollte also auch "gespiegelt" passen.


    Im Code wird es ja so aufgerufen:

    "PS2Keyboard Keyboard(3,2); //(2:data, 3:clock)"

    Stimmt also auch.


    Muss ich doch irgendwie in das PS/2 Debugging kommen. Es müsste ja ausreichen, wenn ich am Arduino nur die TX/RX Leitungen, ggf. Masse abgreife, oder?

    Für die Pro Mini habe ich so einen Adapter, wenn ich den auf 5V stelle und nur TX/RX (GND?) abgreife, müsste ich ja die Debugausgaben auf PC2 sehen, wenn der Arduino per PS/2 an PC1 angeschlossen ist, oder?

    My VDRs:

  • So ich habe DEBUG aktiviert für PS/2 - hier die Ausgaben nachdem ich den PS/2 Stecker eingesteckt habe.

    Nach F4 ist Ruhe, bis ich die Fernbedienungstaste drücke. Nach dem Empfang (IR received) friert er quasi ein.


    Wo soll ich ggf. noch ansetzen/mehr Debugausgaben einbauen?



    Die Fehlermeldung bei dmesg scheint weg zu sein:

    Code
    1. [ 32.546916] TSC found unstable after boot, most likely due to broken BIOS. Use 'tsc=unstable'.
    2. [ 32.546919] sched_clock: Marking unstable (32534648817, 12264475)<-(32556106309, -9191600)
    3. [ 32.547070] clocksource: Switched to clocksource hpet
    4. [ 387.278779] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input13


    Mit noch mehr Debugausgaben scheint er nach Keyboard.releaseAll(); zu hängen:


    My VDRs:

    The post was edited 3 times, last by dad401: Got request from PC F4 IR received: P:2 A:EB14 C:12 F:0 check for FDC protocol Keyboard releaseAll CODE => if (memcmp(&data, &REMOTE_KEYS[index], sizeof(IRMP_DATA) - 1) == 0) { //Serial.println("Pressing"); #ifdef DEBUG Serial.println(F("Keyboard releaseAll")); #endif Keyboard.releaseAll(); #ifdef DEBUG Serial.println(F("check and press keyboard modifier")); #endif ().