Fragen zum Pi Pico

  • Hallo zusammen,

    ich baue ja schon viele Jahre an meiner digitalen Orgel Zuhause und optimiere immer etwas. Zur Midifizierung diverser Knöpfe und Manuale nutze ich bisher immer ein Arduino Due. Der Vorteil dort ist, dass ich die Arduinos inzwischen sehr gut kenne und damit ohne Probleme arbeiten kann. Der Nachteil ist aber der recht hohe Stromverbrauch und die DUE haben so viel Leistung die ungenutzt bleibt. Ich habe also über die Idee nachgedacht mal einen Pi Pico zu testen.

    Nun stelle ich mir die folgenden Fragen:

    - Wie ist die Geschwindigkeit? Python ist ja nicht bekannt dafür extrem schnell zu sein und gerade bei Zeitkritischen Dingen bin ich mir da unsicher.

    - Können die Picos als USB Host arbeiten? Beispiel ich schließe den Pico an und er wird als Midi Gerät erkannt und verhält sich dann wie ein Arduino (MIDIUSB) auch so?

    - Kommt der Pico mit komplexeren Programmen zurecht und wie viel des verbauten Arbeitsspeichers kann man tatsächlich nutzen?

    - Habt ihr gute oder eher schlechte Erfahrungen damit gemacht?

  • Gibts zu der Frage Zahlen?

    Micro Python kenne ich selbst nicht, aber Python selbst ist ja im Vergleich zu anderen Sprachen eher gemütlich unterwegs. In den meisten Fällen spielt das keine so große Rolle, aber ich frage ja deshalb wie es sich auf dem Pico verhält. Ich habe auch gelesen dass man scheinbar bestimmte Dinge unabhängig von dem Ablauf des Hauptprogramms wohl in Echtzeit machen kann. Aber näheres finde ich aktuell nicht.

    Wenn ich auf einem Keyboard eine Taste drücke, dann macht es eben in diesem Szenario einen Unterschied ob es 1ms dauert bis das Midi Signal fertig ist oder 0,6ms. Bei anderen Anwendungen wird das wohl eher nicht relevant sein.

  • Hallo,

    Micropython hat die Möglichkeit, CPU Opcode statt Bytecode zu generieren, siehe https://docs.micropython.org/en/latest/refe…ve-code-emitter. Was das bringt - keine Ahnung.

    Bzgl. Speicher: lt. Internet kannst du ca. 185 kB für dein Programm nutzen, der Rest ist für Python belegt. Es gibt ja auch andere Boards mit dem RP2040 Controller, die mehr Speicher haben, z.B. Black Adafruit Feather RP2040. Dann hast du - lt. Info auf der Webseite - ~7 MB Speicher zur Verfügung.

    Gruß, noisefloor

  • So, meine Picos sind angekommen. Betreffend dem Flash Speicher ist es ja so eine Sache, auch wenn der Pico auf dem Papier sehr viel mehr als die meisten Arduinos haben, so ist der Speicher hier doch wegen der Art weniger wert weil viele Zeichen doppelten Speicher brauchen... Aber gut es ist trotzdem mehr als genug.

    Ich habe etwas experimentiert, es gibt ja vier Methoden damit zu arbeiten. Assembler was aber bei mir weg fällt da ich da keine Ahnung habe. c/c++ womit ich mich nicht weiter beschäftigt habe. MicroPython habe ich mir genauer angesehen und meine Befürchtung es könnte zu langsam sein hat sich nicht bewahrheitet in meinem Fall. Was ich auch eher durch Zufall gemerkt habe man kann auch die Arduino IDE mit deren Code nutzen.

    Nun muss ich mal schauen, MicroPython ist natürlich sehr mächtig und Python kenne ich recht gut, gleichzeitig habe ich aber auch meine bisherigen Lösungen für den Arduino geschrieben und einige Dinge sind in MicoPython wie ich finde nicht so elegant. Gerade solche Dinge wie USBMIDI funktionieren mit den Arduino Bibliotheken nicht und ich müsste alles umschreiben für TinyMIDI. Da kann ich auch noch einmal beginnen direkt in MicroPython. Aber ich denke mit beiden Sprachen wird man nicht viel falsch machen. Generell würde ich im Kontext Pico aber vermuten, dass primär Python verwendet werden wird und dort der Support am größten sein wird. Mal sehen.

  • Der RP2040 Pico ist etwas ganz Besonderes. In den Mikroprozessor ist ein programmierbarer IO Controller integriert. Soweit ich weiß maximal 32 Instruktionen auf Assembler-Ebene und das Witzige ist, dass man diesen Code von Mikropython erzeugen kann.

    https://www.mathema.de/blog/raspberry…anner-interface

    und einige Dinge sind in MicoPython wie ich finde nicht so elegant.

    Ja, geht mir genau so. Es ist einfach dem Platz geschuldet.

  • soll wohl einer DER Highlights des RP2040 sein. Keine Ahnung, ob man sich das auch für die Anwendung der TE zu nutze machen kann

    Theoretisch wäre dies gerade bei Midi Anwendungen sehr nützlich. Tasten Matrix scannen und Midi Signal raus fasst ohne Latenz. Aber es würde wohl nur über ein Analoges Midi Sinn machen. Wenn das über den USB Host läuft vermute ich wird der Vorteil nicht mehr sonderlich hoch sein. Da ich kein analoges Midi nutze wäre der Weg über ein MIDI zu USB vermutlich der Ort wo der Vorteil wieder zunichte gemacht wird. In einigen Szenarien könnte es aber wirklich Sinn machen.

    Ja, geht mir genau so.

    Man merkt beim Code eben, Python ist eine alte und flexible Sprache, während das Arduino C eben direkt für den Microcontroller konzipiert wurde. Python wird wohl am Ende des Tages mächtiger sein, aber das hat eben seinen Preis mit einem nicht eleganten Code.

    Ich überlege gerade, es sollte doch theoretisch möglich sein auch fremden Python Code auszuführen. Also z.B einen Speicher wie Speicherkarte einbinden und dort befindlichen Code ausführen lassen. So was wäre vielleicht ganz nützlich. Muss ich mal testen.

  • Okay, langsam muss ich sagen dass mir CircuitPython wirklich gefällt. Ich habe für meine Keyboards einmal eine Tastenmatrix zum Test programmiert. Mit dem Arduino C habe ich etwa 300 Zeilen gebraucht um das inkl. Midi über USB umzusetzen. Beim Pico mit Python nur 58. Von der Geschwindigkeit merke ich kaum einen Unterschied. Was schön sind, sind diese Python Konstrukte die beim Arduino C nicht gehen:

    Code
        if event:
            sendNoteOn(KEYCODE[event.key_number]) if event.pressed else sendNoteOff(KEYCODE[event.key_number])

    Gut, dafür hat man hier wunderbar die Möglichkeit Code zu kreieren den keiner mehr versteht ein weiterer sehr großer Nachteil bei Python ist eben, dass ich im Gegensatz zu C einige Fehler erst finde wenn sie auftreten. Ich denke ja z.B an Zugriffe auf Elemente die es an einer Stelle noch nicht geben kann. Das Debuggen hingegen ist mit Python sehr viel angenehmer.

  • Erst mal kann da die Zeile mit etwas weniger Wiederholung schreiben:

    Python
        if event:
            (sendNoteOn if event.pressed else sendNoteOff)(KEYCODE[event.key_number])

    Und dann sehe ich nicht welches Sprachkonstrukt von Python da jetzt drin steckt was es nicht auch in C beziehungsweise C++ gibt. Das ist doch so ungefähr das hier in C:

    C
        if (event) {
            (event->pressed ? sendNoteOn : sendNoteOff)(KEYCODE[event->key_number]);
        }

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • ps915 30. Januar 2024 um 19:50

    Hat das Label Pico hinzugefügt.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!