Raspberry Pi PicoHet Raspberry Pi project is begonnen met de Raspberry Pi 1, de '$35 Linux computer'. Oorspronkelijk opgezet om kinderen weer in aanraking te laten komen met'echte computers' in plaats van kant-en-klare kastjes is dit project wereldwijd in de belangstelling gekomen, en gegroeid tot een ideaal low-cost hobby-platform. Pagina is nog onder constructie! Nog te weinig tijd...
Nu (februari 2021) ook de Raspberry Pi Pico!!! Geen Linux, maar een '$4' embedded processor vergelijkbaar met de Arduino Nano (maar dan veelkrachtiger). Heeft een door Raspberry Pi ontworpen RP2040 microcontroller chip met dual-core ARM M0+ op 133 MHz, plus dual-core PIO: simpele cores voor allerlei real-time I/O zoals NeoPixel (WS2812) LEDs. De $4 is zonder BTW, verzendkosten etc, maar heb er twee tegelijk gekocht, kosten me €7.50 per stuk incl verzendkosten; goed te doen. Zie ook de vergelijkingspagina hoe dit vergelijkt met andere bordjes. Eerste stappenVandaag binnengekregen en getest: in mijn Ubuntu systeem geprikt (microUSB), MicroPython er op
gekopieerd, een terminal window geopend naar de USB poort ( Boot, en MicroPython direct op de Raspberry Pico draaiend... Timer en ThreadMet wat regels Python (hieronder) op de Pico knippert de on-board LED via een onafhankelijke timer-taak; je kan dus ondertussen gewoon verder met Python. from machine import Pin, Timer En de LED knippert! Schrijf dit als een file ' Geen Linux, maar ... Fuzix?Zie Fuzix on the Raspberry Pi Pico... Een lichtgewicht Unix-achtig OS op de Pico. Het voorbeeld boven draait als een timer-taak op de eerste core ( import _thread, time Simpel... En terwijl dit draait kan je op de command line gewoon verder werken: dit loopt
tenslotte op de tweede core, de eerste is weer vrij. Type maar in " Het bordjeHet printje, ongeveer 2 bij 5 cm Het bordje (Pico documentatie) ziet er leeg uit... Een teken dat het Raspberry Pi team goed heeft nagedacht wat er allemaal in de chip moest; weinig extra onderdelen nodig. De belangrijkste punten op een rijtje (van de RPI Pico web site, waar je ook heel goede documentatie van zowel het bordje als de chip vind):
Is wel een boot-knop, maar geen reset: soms niet handig als je vaak nieuwe programma's test. Is makkelijk zelf toe te voegen, of kies een kant-en-klare oplossing: de 'Resetti'. De voedingWel mooi dat er een geschakelde voeding op zit; hierdoor kan het zowel met batterijen als met USB gevoed worden: voeding van 1.8 Volt tot 5.5 Volt: dus twee normale of NiMH batterijen, een Li-Ion batterij, .... Nadeel is dat de ruststroom misschien wat groter is. De pinoutHieronder de pinout van het bordje. Alle GPIO pinnen zijn 3,3 Volt (1,8 Volt compatible, maar niet geschikt voor 5 Volt)! Een high-res versie van de pin-out is te vinden op de RPi Pico web site. <meer uitleg> De ProcessorOf eigenlijk, de RP2040 microcontroller (met daarin 2x een ARM M0+ processor core). Best gewaagd, je eigen chip ontwerpen in plaats van een bestaande van een grote fabrikant te nemen! Zitten dan ook een aantal mooie features in voor hobbyisten. Goed over nagedacht! Moet natuurlijk altijd afwegingen maken (prijs moet goed blijven, en dat is gekoppeld aan het oppervlak van de chip). Vooral de PIO lijkt me een mooie uitbreiding. <meer uitleg> De PIOPIO (Programmable I/O): twee extra 'cores' om real-time low-level I/O (bit-banging) overbodig te maken, en de echte ARM cores hiervan te ontlasten. Eigenlijk twee groepen van ieder 4 state machines, programmeerbaar in een soort microcode. Kan DMA en interrupts gebruiken, en GPIO lijnen aansturen; en heeft ieder 2x4 FIFO's voor interne communicatie-buffering. Krachtig en neemt je het real-time aansturen van pinnen voor bijvoorbeeld seriële LEDs uit handen (bijvoorbeeld voor WS2812B LED aansturing, die nogal nauw komt qua timing op 800 kHz). Ook voor andere protocollen als I2S, VGAS video output, 6800/8080 bus emulatie, ... <meer uitleg, maar zie ook deze PIO uitleg van CNX> OntwikkelomgevingMicroPythonMicroPython is een gestripte versie van Python 3, passend gemaakt voor microcontrollers. Als volledig Python: een interpreter/compiler waarbij je direct en interactief op de Pico kan programmeren; je hoeft niet eerst als bij C/C++ op je PC te compileren maar kan direct op het bord commando's uitvoeren. De beschikbare MicroPython (documentatie) draait
dus direct op de Pico. Eenmalig de goede UF2 installatiefile naar je Pico slepen; terminal er aan,
en je kan programmeren (zie voorbeeld bovenaan de pagina). Alternatief is er ook een (wat beperkte)
ontwikkelomgeving 'Thonny' voor op je normale computer
beschikbaar, als je dat makkelijker vind typen. Hiervanuit kan je je programma direct naar de Pico
downloaden. Debugging lijkt nog niet te werken, of is daar een uitbreiding voor nodig? En er zullen
nog wel meer omgevingen volgen. Installatie op Ubuntu: CircuitPython van Adafruits is een uitbreiding op MicroPython, met meer support voor allerlei I/O devices (150+ device libraries). Aan de andere kant: géén support voor interrupts of voor de 2e core... Nog niet geprobeerd (downloadlink). <meer uitleg> C/C++C/C++ programmeren geeft meer mogelijkheden, maar het opzetten van de ontwikkelomgeving en vervolgens het programmeren is ook complexer (documentatie). De standaard-omgeving ... GCC/CGB... Eclipse... (documentatie). Debug mogelijkheden... Er komt ook een Arduino-variant. Voor kleine projecten veel makkelijker, plus je hebt het voordeel van veel libraries voor allerlei uitbreidingen (maar, geen goede debug-mogelijkheden; voor grotere projecten is een 'echte' C omgeving toch aan te raden). Ook is Arduino bezig een eigen printje met de RP2040 processor te maken (in ontwikkeling, met WiFi and Bluetooth). <meer uitleg> RustOok de programmeertaal 'Rust' komt naar de Pico: Rust, RT-Thread OS & FreeRTOS come to the Raspberry Pi Pico. Rust lijkt op C++, maar is moderner en met name veiliger; voorkomt veel gemaakte fouten met pointers en zo. Maar, zal wel even wennen zijn. ProjectenLEDs aansturenAl even wat gespeeld met de PIO (voorbeeldcode): zoals aansturen van WS2812B LEDS aan de hand van dit voorbeeld in MicroPython. Werkt gelijk. Wel jammer dat in MicroPython de transfers niet via DMA gaan; de moeilijke timing wordt met de PIO opgelost, maar nog steeds moet de processor wachten tot er weer plek in de FIFO is voor de volgende 3 bytes (op te lossen met DMA in C++, maar wil liever in Python). Nu mijn eigen draai aan de LEDs geven... Maar, eigenlijk is de Pico bedoeld voor mijn PWM-geregelde LED's: op dit moment aangestuurd met
een ATtiny2313, maar deze heeft maar 2 PWM kanalen van 16-bit, de rest is
8 bit. Ik heb er meer nodig; het menselijk oog is (vooral 's nachts) erg gevoelig en niet lineair,
en stappen van 1/256 zijn bij lage helderheid te grof. De Pico (in microPython) kan 16-bit op alle
PWM-kanalen. Als eerste zet: het voorbeeld van de knipperende LED uit 'eerste stappen' is makkelijk aan te passen om van PWM gebruik te maken. Door
de stappen kwadratisch te maken lijkt de fade-in/fade-out voor het oog juist mooi gelijkmatig.
Teller <meer uitleg> |
op mijn site |