Spielereien mit asm_pio + MicroPython auf dem PI PICO Auf dem PI PICO kann man komfortabel mit MicroPython arbeiten und nebenbei kleine, taktgenau arbeitende Erweiterungen in ASM auf den PIO's hinzufügen, die unabhängig vom restlichen Programmcode ablaufen und weder Speicherplatz noch zusätzliche Rechenzeit beanspruchen. "Just for fun" hier meine Spielereien mit asm_pio und MicroPython, in denen ich ausloten wollte, wie ich als Hobbyist im Bereich Homeautomation diese zusätzliche Hardware für mich nutzen könnte. - Generatoren für symmetrische / asymmetrische Rechtecksignale - Generatoren durch Ausgabe von 32-Bit-Patterns - Timer/Counter für die Messung von Impulszeiten - UART-Transmitter, optional mit Even/Odd Parity-Bit - UART-Transmitter, optional mit 32-Byte Fifo-Sendebuffer - UART-Receiver, optional mit 32-Byte Fifo-Empfangsbuffer - Intervall-Summer - PWM (bis zu 32 Bit) mit exponentieller Interpolation der Zwischenwerte - IR-Remote Transmitter / Receiver (NEC-Protokoll, 38KHz) - Taster zum Ein-/Ausschalten bzw. mit Ein-/Ausschaltverzögerung - Inverter (Not-Gate) Weitere Erläuterungen gibt es im Programmcode und in der Readme.pdf. Michael S.
Michael S. schrieb: > Spielereien mit asm_pio + MicroPython auf dem PI PICO Du liebst understatement... Es ist schon ziemlich geil, fast unvorstellbare Sachen mit Hilfe der PIOs realisieren zu können, selbst aus einer Schriptsprache heraus. Das Problem ist nur: Die Dödels, die schon nicht in der Lage sind, C oder Asm zu lernen, werden auch den Assembler der PIOs nicht lernen wollen oder können. Denn der ist zwar sehr simpel, aber eben deswegen auch ziemlich weit weg von der "normalen Logik" von Programmiersprachen. Sehr viel weiter als auch nur die normalen Asm-Sprachen der MCUs, die auch schon kaum einer lernen will... Und man muss selbst als erfahrener Asm-Programmierer vieler Systeme erstmal lernen, ein wenig "um die Ecke" zu denken, um die PIOs gut nutzen zu können. Von reinen Python-Leuten kannst du das echt nicht erwarten. Also wirst du niemals sehr viele Antworten ernten. Laß' dich davon nicht entmutigen. Mach' weiter, poste weiter.
Habe auch schon einige interessante Dinge mit µPy gemacht, auf STM32F4 und PicoPi. Die sind auch schön mit ARM-Thumb innerhalb von Python zu programmieren. Damit ist dann problemlos 500ksps ADC, Kompression und Übertragung per VCP möglich. Zwei Kerne helfen. ;-) PIO: bis jetzt ein 125MHz Signal erzeugt das mein uraltes analoges 50MHz Scope zum Weinen gebracht hat (PicoPi von 133MHz auf 250MHz übertaktet). Dieser PicoPi hier geht sogar bis 282MHz, dann streckt er aber die Flügel. Werde in den nächsten Tagen mal ADC mit DMA machen. Auf dem STM32F4 läuft das schon absolut problemlos (2.4Msps * 3 Kanäle interleaved). Was ich allerdings feststellen musste, die µPy 1.17 Version für PicoPi braucht noch reichlich Liebe und Zuwendung… Viel Spaß weiterhin.
c-hater >Das Problem ist nur: Die Dödels, die schon nicht in der Lage sind, C >oder Asm zu lernen, werden auch den Assembler der PIOs nicht lernen >wollen oder können. Wer oder was genau hat dich beauftragt, irgend jemandem etwas lehren zu müssen?
Hier ist der 125MSPs Funktionsgenerator: https://www.instructables.com/Arbitrary-Wave-Generator-With-the-Raspberry-Pi-Pic/
Noch ein schönes Projekt: https://forum.lvgl.io/t/100-mhz-oscilloscope-with-raspberry-pi-pico-lvgl-v8-and-micropython/5669 Optimieren wo es nötig ist und Hardware richtig nutzen.
Markus schrieb: > Wer oder was genau hat dich beauftragt, irgend jemandem etwas lehren zu > müssen? Niemand. Habe ich auch nirgendwo etwas derartiges behaupted.
Serial over IR mit asm_pio + MicroPython auf dem PI PICO Hier noch eine weitere Spielerei mit dem PI Pico (angeregt durch eine Diskussion im Forum Microcontroller zum Thema "Fragen zur IR-Datenübertragung"). Dem PI PICO fehlen die üblichen WLAN- oder Bluetooth-Schnittstellen. Anstatt aber entsprechende Module anzuflanschen, genügt es unter Umständen, eine einfache serielle Datenübertragung via Infrarot einzurichten. Benötigt werden nur wenige Bauteile, senderseitig eine IR-Diode + Treibertransistor, empfangsseitig ein TSOPxxxx-Receiver. Die Gegenstelle kann ein uC sein, oder ein PC, an den der TSOP über einen Seriell-USB-Adapter angeschlossen ist. Für meine Tests arbeitete auf einem PC ein Python-Script (rx.py), um die eingehenden Daten zu prüfen. Der Sendeteil (tx.py) sendet 100 Datenframes im Abstand von 0.5 Sekunden, der Empfänger gibt die Erfolgsquote aus. Der IR-Sender bestand aus 2 in Reihe geschaltete IR-Dioden (Strombegrenzung auf 100mA), die indirekt gegen eine weiße Wandfläche stahlten (entgegengesetzte Richtung zum Empfänger in ca. 3m Entfernung). Die zuverlässig erreichbare Datenübertragungsrate lag bei 2400 Baud, sowohl bei 38 kHz als auch bei 56 kHz. 4800 Baud waren nur über 56 kHz erreichbar, wenn zusätzlich der Sender direkt in Richtung des Empfängers strahlt. Der Programmcode funktioniert nur auf einem PI PICO, da die relevanten Programmteile in asm_pio geschrieben sind (serial_over_ir.py). Diese Datei wird auf den Pico geladen und von dort importiert. Senderseitig werden bis zu 9 Byte in den TX-Fifos zwischengespeichert, die Senderoutine kehrt in diesem Fall sofort in den aufrufenden Programmteil zurück. Werden mehr als 9 Bytes übertragen, dann blockt die Routine solange, bis n - 9 Bytes versendet sind. Als Nebenprodukt ist noch ein minimierter Beeper entstanden (pio_beeper.py). Er wird aufgerufen mit der Beep-Dauer in Millisekunden als Parameter und beendet sich nach Ablauf der Zeit selbstständig. Michael S.
>Dem PI PICO fehlen die üblichen WLAN- oder Bluetooth-Schnittstellen. >Anstatt aber entsprechende Module anzuflanschen, genügt es unter >Umständen, eine einfache serielle Datenübertragung via Infrarot >einzurichten. Eine nette Idee. Manchmal könnte es sinnvoll sein, den Hardwareaufwand noch weiter zu reduzieren und einfach eine normale LED als Sender und Empfänger zu nutzen: https://github.com/ChrisMicro/LedDataTransmission
Welche IDE nutzt Du für MicroPython? Ich kann mich mit dem Vorhandenden nicht so recht anfreunden. Am gängigsten erscheint die Lösung mit Stubs + rshell, aber das ist auch ein ziemliches Herumgehacke. Die Arduino-Style IDEs finde ich vom Editor her zu einfach. Edit: Habe Pico Go gefunden. Scheint genau das zu sein, was ich haben wollte. http://pico-go.net/docs/start/quick/
:
Bearbeitet durch User
Danke für's Posten. Ein paar PIO Infrarot-Sachen gibt's auch in https://github.com/raspberrypi/pico-examples/ hat viel mehr als https://github.com/raspberrypi/pico-micropython-examples https://github.com/peterhinch/micropython_ir Nutzt alles Hardware IR-Empfänger. https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf
Tim . schrieb: > Ich kann mich mit dem Vorhandenden > nicht so recht anfreunden. Ebenso. Deshalb wollte ich dies hier verlinken: https://www.eevblog.com/forum/projects/usb-sniffer-using-rp2040/ Aber vielleicht hast Du (tim_?) diesen Beitrag schon selber gefunden. Der Umgang mit der PIO in 'capture.c' (inkl. 'pio_asm.h') ist schon recht clever. Das muß ich unbedingt noch selber testen.
m.n. schrieb: > Ich kann mich mit dem Vorhandenden > nicht so recht anfreunden. Damit bezog ich mich allerdings auf die Micropython IDEs, wie z.B. Thonny. Mit "Pico go" (s.O.) habe ich aber dann eine gute Lösung für VC Code gefunden. > Aber vielleicht hast Du (tim_?) diesen Beitrag schon selber gefunden. Ja, gerade heute morgen :) > Der Umgang mit der PIO in 'capture.c' (inkl. 'pio_asm.h') ist schon Hier hat der Autor eine nette Sammlung an "Bare-Metal" Projekten: https://github.com/ataradov/mcu-starter-projects
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.