Forum: Mikrocontroller und Digitale Elektronik Micropython rp2040


von Alexander P. (scientiapotentiaest)


Lesenswert?

Liebes Forum,

meine Frage bezieht sich auf Micropython und den rp2040-µC.
Läuft auf dem µC ein Micropython-Interpreter und das 
Micropython-Programm wird auf den rp2040 geladen oder wird mit der IDE 
(Thonny z.B.), in der dann der Interpreter vorhanden ist, ein Binärfile 
erstellt, das geladen und vom rp2040 abgearbeitet wird?

Viele Grüße, Alexander

von Jack V. (jackv)


Lesenswert?

Der Interpreter läuft auf dem RP2040, dazu muss er natürlich erstmal in 
den Speicher geschrieben werden. Die Python-Files selbst liegen dann 
normal als Textfiles in einer Art virtuellem Dateisystem, wo man sie via 
Thonny oder auch via etwa mpremote/mpr lesen und schreiben kann. 
Einstiegspunkt für Micropython ist dann main.py, von der aus können aber 
andere im Speicher liegende Files normal eingebunden werden.

von Alexander P. (scientiapotentiaest)


Lesenswert?

Danke, darum ging es in der Frage. Letztlich will ich nur wissen, ob 
Programmieren mit Micropython wie fahren mit angezogener Handbremse ist 
und man bei zeitkritischen Programmen besser C verwenden sollte.

Viele Grüße, Alexander

von Jack V. (jackv)


Lesenswert?

Alexander P. schrieb:
> Letztlich will ich nur wissen, ob […] man bei
> zeitkritischen Programmen besser C verwenden sollte.

Ja, sollte man.

von Alexander P. (scientiapotentiaest)


Lesenswert?

... und wenn man dann mit C programmiert, spricht irgendetwas gegen die 
Arduino-IDE?

Viele Grüße, Alexander

von Jack V. (jackv)


Lesenswert?

Alexander P. schrieb:
> ... und wenn man dann mit C programmiert, spricht irgendetwas gegen die
> Arduino-IDE?

Davon ausgehend, dass du immer noch zeitkritische Aufgaben meinst: ja – 
mit Arduino sind präzise Sachen nur schwer bis gar nicht möglich. Für 
Fälle, in denen das Arduino-Framework reicht, könntest du genausogut 
auch Micropython nehmen – hängt dann von deinem persönlichen Geschmack 
ab.

Es gibt übrigens auch die Möglichkeit, PIO-Code aus Micropython heraus 
zu nutzen, sodass man da durchaus auch taktgenau arbeiten kann, wenn 
einem so ist. Ob die Möglichkeit aus dem Arduino-Kram heraus ebenso 
einfach nutzbar ist, weiß ich nicht.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Alexander P. schrieb:
> man bei zeitkritischen Programmen besser C verwenden sollte

Kommt ganz auf deine Definition von Zeitkritisch an. Die beiden Kerne 
laufen mit 125MHz, können lt. Datenblatt 133MHz und lassen sich 
problemlos auf 200% hoch takten. Viele Aufgaben können über die 
Hardware, Interrupts, DMA erledigt werden. Selbst Thumb-Assembler für 
die kleinen ›wirklich‹ zeitkritischen Routinen ist mit Bordmitteln 
möglich.
Meistens braucht man das aber gar nicht, den ADC zB., mit 500.000 
samples pro Sekunde, kann man ohne Probleme mit Python Code fehlerfrei 
lesen.

von Alexander P. (scientiapotentiaest)


Lesenswert?

Es geht konkret um LED-Bargraph-Aussteuerungsanzeigen. Audio und die 
ballistischen Gleichrichter laufen auf einem Teensy 4.1 mit 8 Kanälen. 
Die Momentanwerte werden alle paar ms via UART auf einen µC übertragen, 
der dann
die Pegelwerte berechnet (Logarithmus, float) und diese dann auf die 
LED-Anzeige mappt (TLC5926 Schieberegister LED-Treiber). Da der 
Raspberry pico preisgünstig und vor allem verfügbar ist, habe ich ihn in 
den Blick genommen. Ich möchte nur abschätzen, ob ein Pico reicht oder 
ob ich mehrere nehmen muß. Und da ist es schon interessant, daß zwei 
Kerne an Bord sind und welche Programmiersprache benutzt wird.
Ganz habe ich es mit den Einschränkungen der Arduino-IDE nicht 
verstanden. Kompliziert sind die Programme nicht, einige 
Wertebereichs-Abfragen, float-Arithmetik und UART-Empfang von jeweils 8 
Bytes pro zwei Kanäle.

Viele Grüße, Alexander

von Jürgen L. (temp1234)


Lesenswert?

Jack V. schrieb:
> Davon ausgehend, dass du immer noch zeitkritische Aufgaben meinst: ja –
> mit Arduino sind präzise Sachen nur schwer bis gar nicht möglich. Für
> Fälle, in denen das Arduino-Framework reicht, könntest du genausogut
> auch Micropython nehmen – hängt dann von deinem persönlichen Geschmack
> ab.
>
> Es gibt übrigens auch die Möglichkeit, PIO-Code aus Micropython heraus
> zu nutzen, sodass man da durchaus auch taktgenau arbeiten kann, wenn
> einem so ist. Ob die Möglichkeit aus dem Arduino-Kram heraus ebenso
> einfach nutzbar ist, weiß ich nicht.

Also entweder ich kann C++ und Arduino, dann brauche ich kein Python 
oder ich benutze Python weil mir C++ zu schwer ist. Wenn ich in C++ 
Arduino benutzen, dann hauptsächlich wegen der Unmengen an Libs.
Bei zeitkritische Sachen schränkt mich Arduino nicht ein. Man kann die 
PinWackelFunktionen o.ä. von Arduino nutzen, muss es aber nicht. Bei den 
Highlevel-Libs wie USB Ethernet u.s.w hat Arduino keine zeitlichen 
Nachteile.
Den Interrupts ist es auch egal ob da irgendwo was von Arduino im Flash 
liegt oder nicht.

von Jürgen L. (temp1234)


Lesenswert?

Alexander P. schrieb:
> Ganz habe ich es mit den Einschränkungen der Arduino-IDE nicht
> verstanden. Kompliziert sind die Programme nicht, einige
> Wertebereichs-Abfragen, float-Arithmetik und UART-Empfang von jeweils 8
> Bytes pro zwei Kanäle.

Alexander P. schrieb:
> Es geht konkret um LED-Bargraph-Aussteuerungsanzeigen. Audio und die
> ballistischen Gleichrichter laufen auf einem Teensy 4.1 mit 8 Kanälen.
> Die Momentanwerte werden alle paar ms via UART auf einen µC übertragen,
> der dann

Das gibts keinen Arduino Einschränkungen. So was triviales schafft der 
RP2040 auch unter Arduino im Hintergrund zum Bitcoin schürfen...

von Norbert (der_norbert)


Lesenswert?

Ja das ist ein echtes Problem! ;-)
Da wird der Pico sich wohl zu 99% langweilen und in der Sonne räckeln.

Vorsichtig und konservativ geschätzt sollten viele 10.000 FLOPS drin 
sein.
Die UARTs haben einstellbare Puffer oder FIFOs (und alle paar ms ist 
sowieso eine Ewigkeit)

von Mi N. (msx)


Lesenswert?

Alexander P. schrieb:
> ... und wenn man dann mit C programmiert, spricht irgendetwas gegen die
> Arduino-IDE?

Alexander P. schrieb:
> Kompliziert sind die Programme nicht, einige
> Wertebereichs-Abfragen, float-Arithmetik und UART-Empfang von jeweils 8
> Bytes pro zwei Kanäle.

Man kann die PIOs auch gut in reinem C programmieren. Was ich als 
"zeitkritisch" bei Arduino sehe, ist die ewig lange Zeit zum 
Überbersetzen und Laden des neuen Programmes. Hinzu kommt, daß jegliches 
sinnvolles Debugging fehlt.
Frage an Norbert: "Bei Python doch auch, oder?"

Wenn RP2040, dann besser mit einem SWD-Programmierer/Debugger, der aber 
derzeit schwer beschaffbar und teuer ist. Das wäre egal, wenn Du eine 
Serie mit 100 Stück planst.
Für ein Einzelstück und wenn es nicht zwingend ein RP2040 sein muß, 
würde ich einen kleinen STM32 auf einem Nucleo-Board empfehlen. 
STM32G431 zum Beispiel kostet netto bei Mouser 12 Euro und hat schon 
einen ST-Link auf dem Board.

von Alexander P. (scientiapotentiaest)


Lesenswert?

Ich kann beides bzw. ich habe in den letzten Jahren C++/Arduino-IDE 
genutzt. In der Arduino-IDE habe ich von Earle F. Philhower (der III.) 
die rp2040-Lib eingebunden. Allerdings weiß ich nicht, wie verläßlich 
diese Lib ist. Micropython ist nicht uninteressant, da sich manches 
kompakter als mit C++ ausdrücken läßt und so auch das Ausprobieren 
vereinfacht wird.
Für meine Anwendung habe ich schon vor einiger Zeit für vier Kanäle den 
Teensy-LC benutzt, der aber wohl nicht mehr verfügbar ist. Das 
C++-Programm werde ich aber wohl ohne weiteres auf den rp2040 portieren 
können und muß nicht einmal die Arduino-IDE verlassen. Es wird 
allerdings auf die beiden Kerne anzupassen sein. Zum Glück habe ich ja 
eine natürliche "Kanalzerlegung".
Als neugieriger Mensch wollte ich auch einmal mit Micropython 
herumspielen"...


Viele Grüße, Alexander

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Alexander P. schrieb:
> Als neugieriger Mensch wollte ich auch einmal mit Micropython
> herumspielen"...
Dann tue das doch!
Was hält dich ab?

von Steve van de Grens (roehrmond)


Lesenswert?

Jürgen L. schrieb:
> Bei zeitkritische Sachen schränkt mich Arduino nicht ein.

Genau, das wollte ich auch dazu sagen.

von Alexander P. (scientiapotentiaest)


Lesenswert?

Ein wenig Aufwand steht schon dahinter. Es können pro Balken 40, 80 oder 
120 LEDs verwendet werden. Pegelanzeige mit Balken und Peak-Hold mit 
Einzel-Led sind vorhanden. Die Pegelbereiche können verändert werden und 
es können auch Spreizanzeigen verwendet werden, bei denen beispielsweise 
niedrige Pegelwerte eine gröbere Auflöung als hohe Pegelwert haben...

von Stefan K. (stk)


Lesenswert?

Mi N. schrieb:
> Wenn RP2040, dann besser mit einem SWD-Programmierer/Debugger, der aber
> derzeit schwer beschaffbar und teuer ist.

Ist das so? Reicht da nicht ein Raspbery Pi Pico oder eine Raspberry Pi 
Debug Probe mit der Open Source Firmware Picoprobe?

Beitrag #7411364 wurde vom Autor gelöscht.
von Jack V. (jackv)


Lesenswert?

Stefan K. schrieb:
> Ist das so? Reicht da nicht ein Raspbery Pi Pico oder eine Raspberry Pi
> Debug Probe mit der Open Source Firmware Picoprobe?

Nein, ist nicht so, und ja: ein Pico mit Picoprobe tut den Job ganz 
ausgezeichnet.

von C-hater (c-hater)


Lesenswert?

Norbert schrieb:

> Kommt ganz auf deine Definition von Zeitkritisch an. Die beiden Kerne
> laufen mit 125MHz, können lt. Datenblatt 133MHz und lassen sich
> problemlos auf 200% hoch takten.

Solange der Code aus dem Flash läuft, nutzt das nur relativ wenig. Je 
umfangreicher der Code, desto weniger.

Aber da der RP2040 eine ganze Menge RAM hat, kann man oft alles, was 
besonders schnell sein muss, dorthin laden und von dort ausführen. Damit 
erspart man sich die dauernden "Schluckaufs", die durch das (Um-)Füllen 
des Cache aus dem seriellen Flash entstehen.

> Viele Aufgaben können über die
> Hardware, Interrupts, DMA erledigt werden.

Ja. Aber dran denken: ISRs sind auch Code. Die gehören auf jeden Fall in 
den RAM. Kein Mensch kann hohe Interruptlatenzen gebrauchen.

> Meistens braucht man das aber gar nicht

Nunja, das kommt ja wohl stark darauf an, was man mit dem Teil tut...

von C-hater (c-hater)


Lesenswert?

Jack V. schrieb:
> Stefan K. schrieb:
>> Ist das so? Reicht da nicht ein Raspbery Pi Pico oder eine Raspberry Pi
>> Debug Probe mit der Open Source Firmware Picoprobe?
>
> Nein, ist nicht so, und ja: ein Pico mit Picoprobe tut den Job ganz
> ausgezeichnet.

Das kann ich 100%ig bestätigen.

Nur ein kleines Problem gibt es: die Pins eines Pico sind weder 
kurzschluss- noch überspannungsfest. Und ein kleiner Fehler beim 
Anstöpseln oder Zuschalten der Spannungen passiert in Versuchsaufbauten 
in der Entwicklung doch recht schnell mal.

Zum Glück ist es recht einfach, auf ein anderes Pinpaar umzuziehen, so 
das nicht gleich das Picoprobe durch so ein Malheur komplett unbrauchbar 
wird. Aber auf lange Sicht ist es wohl doch ziemlich sinnvoll, das 
"Standard-Picoprobe" durch entsprechende Schutzschaltungen zu ergänzen, 
wie sie bei "richtigen" Programmern aus gutem Grund auch absolut üblich 
sind.

von Ben S. (bensch123)


Lesenswert?

Micopython käme für mich niemals in Frage, aber läuft da echt ein 
Interpreter auf dem µC? Bin ich der Einzige, der das total behämmert 
findet? C++ ist nun wirklich nicht schwer.

von C-hater (c-hater)


Lesenswert?

Ben S. schrieb:

> Micopython käme für mich niemals in Frage, aber läuft da echt ein
> Interpreter auf dem µC?

Ja.

> Bin ich der Einzige, der das total behämmert
> findet?

Nein.

von Norbert (der_norbert)


Angehängte Dateien:

Lesenswert?

Bei MicroPython liegt der Bytecode im RAM und der komplette Interpreter 
mitsamt aller Module im FLASH.
Hier die Geschwindigkeiten bei jeweils 100_000 log() Berechnungen:
1
CPU: 33 MHz    14390  17463  18938 FLOPS/core
2
CPU: 66 MHz    28665  35097  37680 FLOPS/core
3
CPU:133 MHz    57765  70724  75931 FLOPS/core
4
CPU:266 MHz   115990 140767 152656 FLOPS/core
In der Reihenfolge ›normaler‹ Code, ›native‹ Code, ›viper‹ Code. Die 
FLASH waitstates wirken sich bis zu 266MHz nicht aus.
Wenn ich richtig gerechnet habe, wären das also (in der schnellsten 
Version) 6,55µs pro math.log() pro Kern.

von Alexander P. (scientiapotentiaest)


Lesenswert?

Danke für die ausführliche Information. Wenn ich Audiosignalverarbeitung 
mit ft=48kHz im Blick habe, passen drei Log-Berechnungen in einen 
Zeitrahmen. Das ist, verglichen mit Festkomma-DSPs, recht bescheiden, 
denn da benötige ich ca. 25 Clock-Zyklen für einen Logarithmus, was bei 
250MHz Prozessortakt ca. 200 Berechnungen im Audiotakt entspricht.

Viele Grüße, Alexander

von Vincent H. (vinci)


Lesenswert?

Ben S. schrieb:
> Micopython käme für mich niemals in Frage, aber läuft da echt ein
> Interpreter auf dem µC? Bin ich der Einzige, der das total behämmert
> findet? C++ ist nun wirklich nicht schwer.

Echt ein guter Satire Post. :)

von Norbert (der_norbert)


Lesenswert?

Alexander P. schrieb:
> Das ist, verglichen mit Festkomma-DSPs, recht bescheiden,

Ja, für so etwas sollte man einen besseren/passenderen µC nehmen.
Der RP2040 hat keinen Divisions-Befehl sondern nur eine etwas spezielle 
Implementation für Division eingebaut.
Die braucht für 32Bit-Wort ÷ 32Bit-Wort genau 8 Zyklen. Man kann während 
der Wartezeit zwar noch etwas anderes machen, aber das sprengt dann doch 
Python, C, C++. Mit dem Assembler ginge es problemlos (wenn der 
Algorithmus es hergibt)

von Christoph M. (mchris)


Lesenswert?

Mal auf den Punkt gebracht:

1. Der Microptyhon-Interpreter läuft auf dem Prozessor, man kann ihn 
auch ohne IDE direct mit dem Terminal programmieren. Eine IDE wie Thonny 
macht es nur etwas bequemer
2. Micropthon ist im Vergleich zu C-oder C++ ziemlich langsam und 
Resourcen fressend, schließt aber Anwendungen bei der es auf 
Entwicklungsgeschwindigkeit oder bestimmter, nützlicher 
Python-Bibliotheken ankommt, nicht aus
3. Benutzt man das Arduino-Framework zusammen mit einem Debugger (z.B. 
einen zweiten PiPico mit passender Firmware) kann man z.B. mit VS-Code 
und Platform-IO debuggen
4. C++ im Arduino Framework kann man auch für Echtzeitaufgaben 
verwenden, wenn man bestimmte Peripheriefunktionen selbst programmiert.

von Alexander P. (scientiapotentiaest)


Lesenswert?

5. Man bekommt das Board für wenig Geld. Berrybase hat 3997 verfügbar zu 
4,10€ das Stück.

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
Noch kein Account? Hier anmelden.