IRMP auf STM32 - ein USB IR Empfänger/Sender/Einschalter mit Wakeup-Timer

  • Hi. Ein sehr interessantes Projekt. Ich habe nun einen FT232RL/FTDI USB-auf-TTL Serieladapter (3,3 V, 5,5 V)





    und ein paar "3.3V 5V XTW ST-LINK V2 STM8 / STM32 Simulator Programmer Downloader Debugger 500MA Fuse Short Circuit Protection Aluminum Alloy U Disk Shell With 20cm Dupont Wire" für die Ablösung einiger Atric IR-WakeupUSB v1.2




    im Zulauf. Vorbereitend habe ich die Artikel auf mikrocontroller.net gelesen, was mich aber bezüglich Bootloader / Firmware flashen mehr verwirrt als genutzt hat. Vielleicht kann jemand Licht ins Dunkel bringen :saint:. Wird der Bootloader nun benötigt? Wenn ja, für was ist der bzw. was hat man davon? Bezüglich Firmware flashen ist für mich vermutlich dann folgender Punkt von Interesse:


    Ich sehe auf den Bildern nirgends BOOT0. Vermische ich eventuell die beiden Anleitungen "IRMP auf STM32 - Bauanleitung" und "

    IRMP auf STM32 - ein USB IR Empfänger/Sender/Einschalter mit Wakeup-Timer" zu sehr miteinander?


    Danke und Gruß

    Obelix



  • UART-Adapter kann man immer mal brauchen. Zum Flashen des Sticks helfen sie dir aber nicht.


    Der Stick selber ist ein Programmer. Du brauchst zum "selber flashen" also mindestens zwei Sticks.


    Sobald du die Sticks hast, öffne mal einen (Alu kann man in Richtung USB-Stecker abziehen) und poste ein Bild der Platinen-Oberseite.


    Wenn du von Linux aus flashen willst kann ich dir eine Schritt-für-Schritt-Anleitung machen. Ist wirklich nicht schwer. Hat bei mir (nach längerer Auszeit) auch wieder auf Anhieb funktioniert. Eine Stiftleiste wäre praktisch wenn du noch hättest. Also sowas:

    https://www.reichelt.de/?ARTICLE=119879

    Die wird als "Adapter" auf die mit den Sticks gelieferte Steckbrücke gesteckt und dann während des Flashens auf die passenden Punkte des Sticks gedrückt.


    TSOP kannst du wahrscheinlich direkt vom Atric wiederverwenden. Es wäre nicht schlecht wenn du noch 220 Ohm Widerstände auftreiben könntest.


    Bootloader wird nicht benötigt, ist aber praktisch. Den kannst du einmalig in den Stick flashen und ab dann mit "dfu-util" über USB ein Firmware-Update auf den Stick spielen.

  • jrie wäre es auch denkbar die LED am externen Pin (sofern man den wieder optional bekommen kann) bei einem IR-Ereignis nur kurz aufblinken zu lassen? Aktuell ist das ja ein "Togglen". Je nachdem wann man die Fernbedienung zuletzt genutzt hat kann also sein, dass die LED permanent leuchtet.

  • Das mit dem UART-Adapter habe ich dann falsch aus der Doku entnommen (zitierte Stelle). Kein Problem. Stiftleisten habe ich noch vom WLAN Thermometer Mini Projekt übrig. Widerstände besorge ich noch.


    Gruß

    Obelix



  • wäre es auch denkbar die LED am externen Pin (sofern man den wieder optional bekommen kann) bei einem IR-Ereignis nur kurz aufblinken zu lassen?

    Gute Idee. Dazu könnte man statt einmal togglen dann zweimal togglen mit einem sleep dazwischen.


    Ich habe aber zur Zeit zu viele Baustellen. Von mir wird da in der nächsten Zeit nichts kommen.


    Eine der Baustellen ist z.B. den Empfänger auf LibreELEC laufen zu lassen. Das geht schon, ist aber noch nicht für Anfänger einsatzfähig.

  • Wie würde denn eine saubere Lösung aussehen? Einen LED_PORT und LED_PIN gibt es ja noch für den StickLink. Wo gehen die hin? Ist das die LED die auf dem Board sitzt?


    Eigentlich frage ich hauptsächlich weil ein Bekannter aktuell einen yausbir verwendet. Ich möchte den gerne auch durch deinen IRMP_STM32-Empfänger ersetzen. Beim yausbir hatten wir die LED angeschlossen. Wenn es mit wenig Aufwand möglich gewesen wäre, dies wieder zu tun, dann hätte ich die LED wieder mit angebunden. Andernfalls bleibt sie halt vorerst dunkel.

  • Einen LED_PORT und LED_PIN gibt es ja noch für den StickLink. Wo gehen die hin? Ist das die LED die auf dem Board sitzt?

    Ja.


    Beim Bootloader hab ich das hier heraus genommen.

    Hier war es herein gekommen.

    Es geht um die #ifdef LEDx2 .

    So könnte man es in die Firmware einbauen, falls es dir den Aufwand wert ist.


    Beim klassischen Developer Board ist die externe LED bereits eingebaut, denn das hat keine interne. Wäre also auch eine Lösung.

  • Wie dann umsetzen? Ein Define das den Reset-Code komplett ausmappt und den Pin dafür zum LED-Pin macht?


    Edit: Am Bootloader würde ich eigentlich garnichts ändern wollen. Hier reicht es mir vollkommen wenn die LED auf dem Board Feedback gibt. Mir geht es nur um die IRMP-Firmware an sich und auch hier eigentlich nur um das Feedback bei Erkennen eines IR-Codes.


    Edit2: "prepare.sh" tut's nicht mehr. Wird also in jedem Fall nicht ganz so einfach, denn aktuell kompiliert garnichts mehr. Zumindest nicht wenn man die externen Sourcen nicht bereits vorliegen hat. Das, was als "ZIP" runterkommt sind HTML-Dateien. Da haben sich zumindest einigen Links wohl geändert.


    Edit3: Die haben wohl recht anständig was an der Klatsche bei ST. Login, E-Mail-Verifikation, ... um die Sch*** ZIP zu bekommen. Hier muss dringend eine alternative Lösung her!


    Edit4: Was genau spricht dagegen die relevanten Dateien einfach direkt ins GIT mit reinzulegen. Eine schnelle Google-Suche bringt zahlreiche Github-Projekte zutage, die ebensolche Dateien direkt im Projekt haben:

    https://www.google.de/search?q=stm32f10x.h+github

    Alternativ in ein eigenes Repo legen und als "Submodul" ins Haupt-GIT einbinden. Dann wäre klar getrennt was ST (inklusive deren Lizenz) ist.

  • Ich habe angefangen, für externe LED und kurzes Aufblitzen zu coden.

    Muss aber erst noch getestet werden.


    Ich kann damit leben, dass man jetzt von Hand eine Datei von ST runter laden muss.

    Ich werde mal eine entsprechende Ausgabe in die prepare.sh einbauen.

    Deine Initiative finde ich gut, habe aber Zweifel, ob ST da mit geht.

    Wir werden sehen ...


    In meinem git gibt es jetzt eine Verfeinerung für das Repeat-Handling von irmplircd.

    Das ist für sauberes Repeat-Handling für Kodi gut (im VDR ist das nicht nötig, der macht das selber).

  • Wir werden sehen wie ST reagiert. Ja, wenn alle Stricke reißen, dann muss man die Datei selber runterladen. Notfalls kann man das verkraften. Wäre dann halt gut, wenn die volle Adresse zum Download noch wenigstens auf der Konsole landen würde.


    Mein Ticket ist auf jeden Fall noch auf. Wird halt verständlicherweise nicht mit höchster Priorität behandelt.


    Wenn die ein "Kopie auf github ablegen" als akzeptabel ansehen, dann könnte man alles auf git-submodules umstellen. Es gibt auch für IRMP einen Git-Mirror:

    https://github.com/svn2github/irmp 


    Sobald man etwas mit dem LED-Blinken testen kann, bescheid sagen.

  • Externe LED und kurzes Aufblitzen kann getestet werden ;) .

    Ist in github.


    Außerdem sendet die Firmware jetzt kurz nachdem der PC per Fernbedienung eingeschaltet wurde einen Signal-IR-Code (FF0000000000). Dadurch weiß man im PC, dass der PC nicht durch einen Timer, sondern vom Empfänger gestartet wurde. Dies kann dann dafür benutzt werden, ein Skript zu starten (z.B. mittels irmpexec).


    Bitte ausgiebig testen und rückmelden (auch auf welchem Board getestet wurde) :) .

  • Danke erstmal für die extrem schnelle Lösung!

    Wie ich sehe hast du auch Binaries gebaut. Sind diese mit externer LED oder alle mit Reset-Feature? Wenn letzteres, dann weiß ich bescheid, dass ich mit eigener Config selber kompilieren muss.

  • LED habe ich jetzt auch dran. Ich habe jetzt mal einen Vorwiderstand von 120 Ohm dran. Wie klein darf der denn werden? Hast du im Kopf wieviel Strom der entsprechende Pin laut Datenblatt treiben darf?

    LED sowohl extern als auch direkt am Stick sieht sehr gut aus. Den Rest vom Kabelbaum (für Anschluss am Mainboard) löte ich dann morgen.

  • Ich habe mir das jetzt mal im Detail angeschaut. Der Widerstand, der schon auf der Platine sitzt, ist ein 22 Ohm Widerstand. Zumindest bei beiden Sticks (eine und zwei LEDs). Das reicht definitiv nicht als LED-Vorwiderstand. Hier ist noch ein passender "Zusatzwiderstand" nachzuschalten. Vom berechneten Wert kann man ja ggf. die 22 Ohm abziehen wenn man auf maximale Helligkeit aus ist.


    Die 120 Ohm, die ich verbaut habe, reichen für ein dezentes Leuchten bei einer grünen LED. Zusammen mit den 22 Ohm auf der Platine ist man sogar bei einem Kurzschluss nach dem Widerstand noch gerade so im erlaubten Bereich für den Strom am Ausgang. In den meisten Fällen dürfte das passen. In jedem Fall ist der maximal erlaubte Strom 25mA. Dieser darf in keinem Fall überschritten werden.

  • Doch, die neue Lösung geht auch bei Red und Blue.

    Das ist nur drin für die Rückwärtskompabilität mit der alten Bauweise und wird aktiviert durch/* uncomment this for legacy boards with pulldown resistor for USB reset */

    //#define PullDown

    Dadurch haben auch Boards, die vor USB Reset mittels PA12 hergestellt wurden, etwas von der Firmware-Weiterentwicklung.

    Du könntest also auch deine alten Sticks mit Pulldown Widerstand noch updaten (ich teste allerdings nicht auf den alten Boards).


    Der Vorwiderstand hängt auch noch von der Durchlassspannung der LED ab (Google: „LED Vorwiderstand berechnen“).

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!