Raspberry Pi Pico als Oszilloskop
Der Raspberry Pi Pico eignet sich nicht nur zum Steuern von LEDs oder zum Erfassen von Sensorwerten. Mit den eingebauten Analog-Digital-Wandlern (ADC) kann man Spannungsverläufe erfassen und mit der Option „Drucker anzeigen“ der Kommandozeile darstellen. Auf diese Weise entsteht ein einfaches Oszilloskop.
Dieser Aufbau eignet sich besonders gut, um ein grundlegendes Verständnis von Analog-Digital-Wandlern (ADCs) und der Erfassung analoger Signale zu entwickeln.
Er ist ideal für die Beobachtung langsamer Spannungsverläufe, etwa von analogen Sensorwerten oder PWM-Signalen mit niedriger Frequenz.
Darüber hinaus kann das Projekt hervorragend für Lern- und Experimentierzwecke, zum Debuggen einfacher Schaltungen sowie für Demonstrationen eingesetzt werden.
Dieser Aufbau ist aber nicht für anspruchsvolle Messaufgaben geeignet. Er stößt insbesondere in folgenden Bereichen an seine Grenzen:
- Die Abtastrate eines ADCs ist zu niedrig, um schnelle Signaländerungen zuverlässig darzustellen.
- Auflösung und Genauigkeit des ADCs reichen nicht für exakte Messungen aus.
- Das Messintervall ist nur softwaregesteuert und daher nicht exakt zeitstabil.
Aufbau und Bauteile


Programmcode
Damit der Programmcode sinnvoll ausprobiert werden kann erzeugt er zum Testen ein PWM-Signal GPIO0 (Pin 1). Das wird mit dem GPIO27/ADC1 (Pin 32) gemessen. Die Messwerte werden direkt auf der Kommandozeile ausgegeben. Mit Rechtsklick ist im Optionsmenü „Drucker anzeigen“ zu aktivieren, um das Signal grafisch darzustellen.
Das Programm läuft kontinuierlich, bis es mit STOP oder Strg + C beendet wird. Am Ende wird das PWM-Signal sauber deaktiviert.
# Bibliotheken landen import machine import time # Konfiguration: Pins und GPIOs PIN_PWM = 0 # GPIO 0 / Pin 1
PIN_IN = 27 # GPIO mit ADC1 / Pin 32 # ADC-Parameter V_REF = 3.3 # ADC-Referenzspannung in Volt ADC_MAX = 65535 # ADC-Höchstwert # Sampling-Parameter DELAY = 0.005 # Zeit zwischen Messungen in Sekunden # PWM-Signal initialisieren pwm = machine.PWM(machine.Pin(PIN_PWM)) pwm.duty_u16(ADC_MAX//2) # 50 % Duty Cycle pwm.freq(10) # Frequenz in Hertz (Hz) # ADC-Kanal initialisieren oszi = machine.ADC(PIN_IN) # Hauptprogramm print('Mini-Oszilloskop wird gestartet') print('STOP oder STRG + C zum Beenden') print() time.sleep(1) try: while True: # ADC als Dezimalzahl lesen value = oszi.read_u16() # 16-Bit ADC-Wert (0...65535) # In Spannung umrechnen (optional) #voltage = round(value * V_REF / ADC_MAX, 3) # Ausgabe in der Kommandozeile print(value) #print(voltage) # Verzögerung time.sleep(DELAY) except KeyboardInterrupt: pass except: pass # PWM-Signal abschalten pwm.deinit() print() print('Ende')
Einschränkungen
Natürlich ersetzt dieser Aufbau kein echtes Oszilloskop, bietet aber eine wertvolle Möglichkeit, die Grundprinzipien der Signalerfassung praktisch nachzuvollziehen.
Wer damit experimentiert, lernt die Funktionsweise und die Grenzen von Mikrocontrollern kennen und gewinnt so ein besseres Verständnis für analoge Messungen und digitale Signalverarbeitung.
- Begrenzte Abtastrate: Die Abtastrate des ADC ist relativ gering, sodass sich nur langsame Signale (unter etwa 100 Hz) sinnvoll darstellen lassen. Da die Python-Schleife nicht deterministisch läuft und jede Messung sowie Konsolenausgabe zusätzliche Zeit benötigt, ist die Zeitbasis ungenau und variiert von Messung zu Messung. Ohne den Einsatz von Hardware-Timern oder DMA kommt es zu Jitter, also zeitlichen Schwankungen zwischen den einzelnen Abtastungen.
- Begrenzte Genauigkeit: Der ADC des Raspberry Pi Pico bietet eine physikalische Auflösung von 12 Bit, die intern auf 16 Bit hochgerechnet wird. Daraus ergibt sich zwar theoretisch eine Schrittweite von etwa 0,8 mV bei einer 3,3-V-Referenzspannung, in der Praxis ist die Messgenauigkeit jedoch deutlich geringer. Außerdem ist die Referenzspannung nicht präzise geregelt, was zu leichten Messschwankungen führt. Zudem können Störungen und Rauschen auftreten, insbesondere, wenn wie hier, gleichzeitig ein PWM-Signal erzeugt wird.
- Grafische Darstellung: Die Ausgabe über print() erfolgt vergleichsweise langsam und begrenzt zusätzlich die effektive Messrate. Dadurch wird die Signalwiedergabe nicht in Echtzeit dargestellt, sondern erscheint mit einer spürbaren Verzögerung.
Weitere verwandte Themen:
- Messen mit dem Raspberry Pi Pico
- Raspberry Pi Pico: Frequenz messen
- Raspberry Pi Pico: GPIO als ADC (Experimente mit ADC)
- Raspberry Pi Pico: Grundlagen zur PWM
- Raspberry Pi Pico: Experimente mit PWM
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.






