Beantwortet #860 deine Frage? Wenn nicht frag noch mal genauer.
IRMP auf STM32 - ein USB IR Empfänger/Sender/Einschalter mit Wakeup-Timer
-
-
Ja, danke.
Leider lassen sich die letzten Boards nicht damit aufwecken ....
-
Könnte so ein Relais das richtige sein?
das Relais @ 10mA wird nicht gehen.
Laut Datenblatt braucht das Relais zum sicheren Anziehen 2,4 Volt. Dabei hat es einen Spulenwiderstand von 45Ohm. Ab 2,4 Volt wird dann ein Strom von 53mA fließen. Wenn Du den Strom auf 10mA begrenzen willst, dann müsstest Du noch 150Ohm davor schalten. Dann fällt aber auch nur noch ein viertel der Spannung am Relais ab.
Wenn Dein µC Ausgang OC wäre, dann könnte aber bsw. die 24 Volt Variante davon gesteuert werden. Dieses Relais hat 2880 Ohm @ 24 Volt und braucht dabei nur 8mA.
Praktischerweise nimm einen kleinen Transistor mit Basiswiderstand. Basiswiderstand (Basisstrom) bemisst Du reichlich, damit der Transistor schön in Sättigung geht. Dann fällt nur wenig Spannung an der CE Strecke ab. Oder besser noch einen TTL Fet (RDSon < 1Ohm)
-
Hier kann man den Herstellungsprozess der "Schwarzen" sehen.
-
Meine loop Option hat es mittlerweile ins dfu-util git geschafft.
Ist praktisch beim Firmware updaten.
-
Ich habe noch ein paar Bilder ins Wiki gestellt. Man kann sogar durch den 220 Ohm Widerstand hindurch flashen, dann geht es auch ohne Klemmen.
-
Sorry wenn ich jetzt blöd frage, aber ich habe im Thread nichts darüber gefunden.
Aber die CooCox Seite schein down zu sein, und wie ich es verstanden habe brauche ich das ja um die Firmware zu compilieren.
Ich habe über eine Suche eine CooIDE mit der Version v1.7.8 gefunden...
Passt das, oder ist das ganz falsch?
P.S.: Habe einen "blue pill", momentan mit maple bootloader.
Kann ich den maple bootloader verwenden, oder besser mit Standard USART bootloader?
-
"CooCox" habe ich zum Kompilieren nie gebraucht. Standard gcc für ARM. Zumindest wenn man unter Linux baut.
-
Ich habe über eine Suche eine CooIDE mit der Version v1.7.8 gefunden...
Passt das, oder ist das ganz falsch?
Passt.
Oder einfacher: https://github.com/j1rie/IRMP_STM32/tree/master/binaries
Oder https://www.mikrocontroller.net/articles/IRMP_…are_kompilieren
Kann ich den maple bootloader verwenden
Ja.
oder besser mit Standard USART bootloader?
Geht auch.
-
Super, danke für die Antworten.
Dann versuche ich Mal mein Glück...
-
Hi Leute
ich bin nun auch stolzer Besitzer eines USB Einschalters - habe aber noch Optimierungsbedarf.
Ich nutze eine Logitech Harmony mit KLS2.0 Profil und versuche das unbeabsichtigte Abschalten des VDRs zu verhindern:
denn wenn der VDR bereits läuft (durch WoL oder einen programmierten Timer) und ich dann die Fernbedienung nutze um alle Geräte zu nutzen (TV,AVR,VDR) - wird der VDR ausgeschaltet.
Meine erste Idee, war Ein- und Ausschalten zu trennen. Das scheint mir "sicherer" als eine Sequenzänderung.
Ist das der "richtige" Ansatz oder hat noch jemand eine Idee ?
danke für eure Hilfe
Freizeit-Admin
-
Benutzt du ein Makro, oder wie verteilst du den Einschaltdruck auf diverse Geräte?
Im Prinzip hast du mehrere Möglichkeiten:
- für Geräte und VDR verschiedene Knöpfe
- für VDR ein und VDR aus verschiedene Knöpfe
- du benutzt das dafür vorgesehene Feature (*)
- bestimmt gibt es noch mehr Varianten
(*) per irmpexec send_magic auswerten.
Das wird 90 Sekunden nach Start durch den Empfänger abgesetzt, und wenn es nicht kommt wurde anderweitig gestartet.
-
Kennt jemand dieses Verhalten?
Board: BAITE Maple Mini https://www.aliexpress.com/ite…042311.0.0.57404c4d6Zvzes
Flash Vorgang über USB erfolgreich (mit Firmware 2018-11-17_21-18_MapleMini_BL_KBD_jrie.bin)
LED blinkt bei IR Signalen
Allerdings wird die Platine vom Rechner nur als "nackter" Maple erkannt (unter WIN als unbekanntes Gerät und nicht wie ich erwarten würde als Tastatur)
Oder unter Linux mit "lsusb":
Bus 001 Device 005: ID 1eaf:0003
Auch die GUI Software von jrie erkennt den Maple nicht.Inzwischen habe ich mich mal durch die verschiedenen .bin Files probiert - mit dem selben Ergebnis...
2018-10-15_20-34_MapleMini_BL_SC_jrie.bin
2018-11-17_21-18_MapleMini_2k_BL_KBD_jrie.bin
2018-11-17_21-18_MapleMini_BL_KBD_jrie.bin
2018-11-23_17-11_MapleMini_2k_BL_SC_KBD_jrie.bin
2018-11-23_17-11_MapleMini_2k_ExtBd_BL_SC_KBD_jrie.bin
2018-11-23_17-11_MapleMini_BL_SC_KBD_jrie.bin
2018-11-23_17-11_MapleMini_ExtBd_BL_SC_KBD_jrie.bin
2018-11-23_17-12_MapleMini_2k_BL_KBD_jrie.bin
2018-11-23_17-12_MapleMini_BL_KBD_jrie.bin
-
Benutzt du ein Makro, oder wie verteilst du den Einschaltdruck auf diverse Geräte?
Im Prinzip hast du mehrere Möglichkeiten:
- für Geräte und VDR verschiedene Knöpfe
- für VDR ein und VDR aus verschiedene Knöpfe
- du benutzt das dafür vorgesehene Feature (*)
- bestimmt gibt es noch mehr Varianten
(*) per irmpexec send_magic auswerten.
Das wird 90 Sekunden nach Start durch den Empfänger abgesetzt, und wenn es nicht kommt wurde anderweitig gestartet.
das macht die Logitech "von alleine" über eine Aktion, oder habe ich dich nicht richtig verstanden ? ...
-
Hi.
Ich möchte eine STM32 Stick an meinem Laptop mit Manjaro (Arch Linux Verwandschaft) und Kodi betreiben. Das Paket irmplircd von vdr4arch habe ich installiert und solange ich den Dienst per systemctl manuell starte und stoppe, funktioniert es auch.
Mein Idee ist es allerdings, irmplircd per udev zu starten, stoppen bzw. restarten, wenn der Stick gesteckt wird. Leider klappt nur das Beenden wenn der Stick gezogen wird.
Ich habe mir folgende udev Regel erstellt:
Code# ACTION=="add", ENV{ID_SERIAL_SHORT}=="LLM_003", RUN+="/usr/bin/logger STM32 Stick gesteckt.", RUN+="/usr/bin/systemctl start irmplircd" # ACTION=="remove", ENV{HID_NAME}=="STMicroelectronics STM32 IRMP HID-Device", RUN+="/usr/bin/logger STM32 Stick entfernt.", RUN+="/usr/bin/systemctl stop irmplircd"
Die Regel wird auch abgearbeitet:
bzw.
D.h. meine erstellten ENV{ID_SERIAL_SHORT} und ENV{HID_NAME} Variablen funktionieren. Mit udevadm monitor --env habe ich herausgefunden, dass unterschiedliche Werte auftauchen, weshalb ich bei add und remove unterschiedlich abfrage. Es funktioniert jedenfalls.
Wenn ich nun den Stick stecke, dann spawned der Prozess nach einer Minute:
CodeJun 18 23:09:51 obelix systemd-udevd[20567]: Spawned process '/usr/bin/systemctl start irmplircd' [20628] is taking longer than 59s to complete Jun 18 23:09:51 obelix systemd-udevd[299]: 0003:1209:4444.0019: Worker [20567] processing SEQNUM=11719 is taking a long time
Das scheint ein bekanntes Thema zu sein aber ich verstehe die Lösung nicht
:
Spawning long-running processes
Dort wird auf den Artikel Proper(-ish) way to start long-running systemd service on udev event (device hotplug) hingewiesen aber wie gesagt, peile ich das nicht so richtig....
-
Ist eigentlich alles schon drin und sollte funktionieren:
https://github.com/VDR4Arch/vdr4arch/tree/master/irmplircd
Wenn das nicht reicht wäre ich für einen Pull-Request dankbar. Ich nutze keine STM32 Empfänger mehr.
-
Ist eigentlich alles schon drin und sollte funktionieren:
https://github.com/VDR4Arch/vdr4arch/tree/master/irmplircd
Wenn das nicht reicht wäre ich für einen Pull-Request dankbar. Ich nutze keine STM32 Empfänger mehr.
Ja tut es auch aber nur wenn der Stick beim Starten bereits gesteckt ist. Passiert das nachträglich, dann muss irmplircd manuell gestartet werden. Zumindest ist das so bei mir.
-
Das scheint ein bekanntes Thema zu sein aber ich verstehe die Lösung nicht :
Wie die Fehlermeldung dir schon sagt, darf ein RUN Befehl in einer udev-Regel nicht endlos laufen, sondern nur dazu genutzt werden einen kurzen Befehl auszuführen.
Da die Prozesskontrolle mit Diensten wie at nicht so einfach ist, bietet es sich an irmplircd von Systemd starten zu lassen. Damit Geräteknoten von systemd berücksichtigt werden, müssen sie das TAG systemd tragen - dadurch wird dynamisch eine Unit erstellt, wenn die Hardware erkannt wurde, die wieder gestoppt wird, sobald die Hardware wieder entfernt wird.
Bei yaVDR ist das etwas anders als bei vdr4arch gelöst, das ist das von Seiten der udev-Regel etwas expliziter - probier mal, ob es das für dich tut (die Pfade für SOCKET und KEYMAP wirst du vermutlich anpassen müssen):
CodeACTION=="add", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="4444", TAG+="systemd", ENV{SYSTEMD_WANTS}="irmplircd@%k.service", SYMLINK+="irmp_stm32"
Code: irmplircd@.service[Unit] Description=irmplircd - a daemon for IRMP receivers [Service] Type=forking Environment="SOCKET=/var/run/lirc/irmplircd" "KEYMAP=/etc/irmplircd/irmplicd.map" EnvironmentFile=-/etc/default/irmplircd ExecStart=/usr/bin/irmplircd -t ${KEYMAP} -d ${SOCKET}-%I /dev/%I SuccessExitStatus=0 71
-
Ja tut es auch aber nur wenn der Stick beim Starten bereits gesteckt ist. Passiert das nachträglich, dann muss irmplircd manuell gestartet werden. Zumindest ist das so bei mir.
An der Stelle müsstest du dann mal etwas weiter suchen.
Geht der "service" eventuell auf "Error-Status"? Wenn dem so ist kann schon sein, dass systemd den beim "wieder stecken" nicht mehr so ohne weiteres starten will.
Ich habe die Software nicht mehr installiert und möchte sie eigentlich zum Testen auch nicht mehr installieren.
-
M-Reimer: Grundsätzlich ist deine Implementierung für einen klassischen VDR OK und funktioniert. Ein STM32 Stick wird dort ja nicht nachträglich eingesteckt. Wenn der Stick mit deiner Implementierung nicht angeschlossen ist, schlägt der Start des Dienstes irgendwann damit fehl:
journalctl -f:
CodeJun 23 11:18:23 obelix systemd[1]: dev-irmp_stm32.device: Job dev-irmp_stm32.device/start timed out. Jun 23 11:18:23 obelix systemd[1]: Timed out waiting for device /dev/irmp_stm32. Jun 23 11:18:23 obelix systemd[1]: Dependency failed for Start irmplircd on irmp_stm32 device. Jun 23 11:18:23 obelix systemd[1]: irmplircd.service: Job irmplircd.service/start failed with result 'dependency'. Jun 23 11:18:23 obelix systemd[1]: dev-irmp_stm32.device: Job dev-irmp_stm32.device/start failed with result 'timeout'. Jun 23 11:18:23 obelix sudo[16286]: pam_unix(sudo:session): session closed for user root
journalctl -xe:
Code
Display More-- Subject: A stop job for unit irmplircd.service has begun execution -- Defined-By: systemd -- Support: https://forum.manjaro.org/c/technical-issues-and-assistance -- -- A stop job for unit irmplircd.service has begun execution. -- -- The job identifier is 3404. Jun 23 11:16:42 obelix systemd[1]: irmplircd.service: Main process exited, code=killed, status=15/TERM -- Subject: Unit process exited -- Defined-By: systemd -- Support: https://forum.manjaro.org/c/technical-issues-and-assistance -- -- An ExecStart= process belonging to unit irmplircd.service has exited. -- -- The process' exit code is 'killed' and its exit status is 15. Jun 23 11:16:42 obelix systemd[1]: irmplircd.service: Succeeded. -- Subject: Unit succeeded -- Defined-By: systemd -- Support: https://forum.manjaro.org/c/technical-issues-and-assistance -- -- The unit irmplircd.service has successfully entered the 'dead' state. Jun 23 11:16:42 obelix systemd[1]: Stopped Start irmplircd on irmp_stm32 device. -- Subject: A stop job for unit irmplircd.service has finished -- Defined-By: systemd -- Support: https://forum.manjaro.org/c/technical-issues-and-assistance -- -- A stop job for unit irmplircd.service has finished. -- -- The job identifier is 3404 and the job result is done. Jun 23 11:16:42 obelix audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=irmplircd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success' Jun 23 11:16:42 obelix sudo[16262]: pam_unix(sudo:session): session closed for user root Jun 23 11:16:42 obelix kernel: audit: type=1131 audit(1561281402.861:90): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=irmplircd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success' Jun 23 11:16:49 obelix kernel: usb 2-13.4: USB disconnect, device number 27 Jun 23 11:16:53 obelix sudo[16286]: thilo : TTY=pts/1 ; PWD=/home/thilo ; USER=root ; COMMAND=/usr/bin/systemctl start irmplircd Jun 23 11:16:53 obelix sudo[16286]: pam_unix(sudo:session): session opened for user root by (uid=0) Jun 23 11:18:23 obelix systemd[1]: dev-irmp_stm32.device: Job dev-irmp_stm32.device/start timed out. Jun 23 11:18:23 obelix systemd[1]: Timed out waiting for device /dev/irmp_stm32. -- Subject: A start job for unit dev-irmp_stm32.device has failed -- Defined-By: systemd -- Support: https://forum.manjaro.org/c/technical-issues-and-assistance -- -- A start job for unit dev-irmp_stm32.device has finished with a failure. -- -- The job identifier is 3492 and the job result is timeout. Jun 23 11:18:23 obelix systemd[1]: Dependency failed for Start irmplircd on irmp_stm32 device. -- Subject: A start job for unit irmplircd.service has failed -- Defined-By: systemd -- Support: https://forum.manjaro.org/c/technical-issues-and-assistance -- -- A start job for unit irmplircd.service has finished with a failure. -- -- The job identifier is 3405 and the job result is dependency. Jun 23 11:18:23 obelix systemd[1]: irmplircd.service: Job irmplircd.service/start failed with result 'dependency'. Jun 23 11:18:23 obelix systemd[1]: dev-irmp_stm32.device: Job dev-irmp_stm32.device/start failed with result 'timeout'. Jun 23 11:18:23 obelix sudo[16286]: pam_unix(sudo:session): session closed for user root
Das da was in den Timout läuft, war mir klar und deshalb wollte ich das mit einen Script / systemctl Befehl starten / stoppen.
Wenn ich nun das von seahawk1986 einbaue (Danke für die ausführliche Erklärung), dann funktioniert es für einen Moment aber es gibt dann einen Fehler und irmplircd fliegt weg:
CodeJun 23 10:55:43 obelix irmplircd[14966]: Started Jun 23 10:57:13 obelix systemd[1]: irmplircd@hidraw2.service: Start operation timed out. Terminating. Jun 23 10:57:13 obelix systemd[1]: irmplircd@hidraw2.service: Control process exited, code=killed, status=15/TERM Jun 23 10:57:13 obelix systemd[1]: irmplircd@hidraw2.service: Failed with result 'timeout'. Jun 23 10:57:13 obelix systemd[1]: Failed to start Start irmplircd on irmp_stm32 device. Jun 23 10:57:13 obelix audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=irmplircd@hidraw2 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed' Jun 23 10:57:13 obelix kernel: audit: type=1130 audit(1561280233.255:86): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=irmplircd@hidraw2 comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'
Ich habe gesehen, Systemd Files mit @ und und ohne können parallel existieren. Also irmplircd.service und irmplircd@.service. Wenn ich die irmplircd.service deaktiviere und nur irmplircd@.service habe, dann ändert sich nichts. Könnte da udev ein Thema sein?
-
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!