Raspberry Pi Pico als Rechteck-Signalgenerator mit MCP4725
Der Raspberry Pi Pico ist ein Mikrocontroller mit vielen digitalen Ein- und Ausgängen. Er kann auch digitale Signale in Form eines PWM-Signals ausgeben. Allerdings muss die Frequenz mindestens 10 Hz betragen. Für ein langsameres Signal wird ein Digital-Analog-Wandler (DAC) benötigt. Ein solcher DAC kann im einfachsten Fall ein MCP4725-Modul sein, der vom Raspberry Pi Pico über die I2C-Schnittstelle gesteuert wird.
Ein MCP4725-Modul kann dazu verwendet werdet, um ein Rechtecksignal mit wählbarer Frequenz bis maximal 1 kHz und Tastgrad zwischen 0 und 100 Prozent zu erzeugen.
In der High-Phase hat das Signal eine Spannung nahe der Referenzspannung (VCC) und in der Low-Phase 0 Volt. Die Frequenz und der Tastgrad (Duty Cycle) werden als Parameter eingestellt.
Aufbau und Bauteile

| Raspberry Pi Pico | MCP4725-Modul | |
|---|---|---|
| 3V3 | Pin 36 | 3V3 |
| GND | Pin 33 | GND |
| GPIO0 I2C SDA | Pin 1 | I2C SDA |
| GPIO1 I2C SCL | Pin 2 | I2C SCL |
Programmcode
Der Programmcode erzeugt ein Rechtecksignal mit einem MCP4725-DAC, der von einem Raspberry Pi Pico gesteuert wird.
Die Generierung des Rechtecksignals (PWM) steckt in der Funktion „square_wave(frequency, duty_cycle)“. Dort wird die Periodendauer und die High- und Low-Zeiten des Signals berechnet. In der Folge wird abwechselnd zwischen maximaler Spannung (4095) und 0 Volt umgeschaltet, und damit das Rechtecksignal mit der gewünschten Frequenz und Tastgrad erzeugt.
Die Erzeugung des Signals läuft in einer Endlosschleife. Wenn das Programm beendet wird, dann wird das Rechtecksignal abgeschaltet (0 Volt).
# Bibliotheken laden
import machine
import time
# Konfiguration: Rechteck-Signal
FREQUENCY = 1 # Frequenz in Hz (max. 1000)
DUTY_CYCLE = 50 # Tastgrad in % (0 bis 100)
VALUE_HIGH = 4095 # Amplitude für High-Signal (0 bis 4095)
VALUE_LOW = 0 # Amplitude für Low-Signal (0 bis 4095)
# I2C-Initialisierung
DAC = machine.I2C(0, scl=machine.Pin(1), sda=machine.Pin(0), freq=400000)
# Funktion: Daten an den DAC senden
def write_dac(value):
# Wert zwischen 0 und 4095
value = max(0, min(4095, value))
# Daten an den DAC senden (Fast Mode)
DAC.writeto(0x60, bytes([(value >> 8) & 0x0F, value & 0xFF]))
# Funktion: Rechtecksignal erzeugen
def square_wave(frequency, duty_cycle=50):
if frequency <= 0:
raise ValueError('Frequenz muss > 0 sein')
if not (0 <= duty_cycle <= 100):
raise ValueError('Tastgrad (Duty Cycle) muss zwischen 0 und 100 liegen')
# Zeit zwischen dem Wechsel
period = 1 / frequency
high_time = period * (duty_cycle / 100)
low_time = period - high_time
try:
while True:
write_dac(VALUE_HIGH)
time.sleep(high_time)
write_dac(VALUE_LOW)
time.sleep(low_time)
except KeyboardInterrupt:
pass
finally:
write_dac(0)
print('Beendet')
# Hauptprogramm
print(f"Starte Rechtecksignal mit {FREQUENCY} Hz und Tastgrad von {DUTY_CYCLE}%")
print('Programm mit Strg + C beenden')
print()
square_wave(FREQUENCY, DUTY_CYCLE)
Experimente
Der Programmcode lädt zum Experimentieren ein. Standardmäßig ist im Programmcode die Frequenz auf 1 Hz und der Tastgrad (Duty Cycle) auf 50 Prozent eingestellt. Wenn man möchte, dann kann man den Tastgrad bis 0 verkleinern oder bis 100 vergrößern. Wir er kleiner, dann bleibt die LED länger aus als an und wenn er größer ist, dann bleibt die LED länger an als aus. Über den Tastgrad wird das Verhältnis zwischen Impuls und Pause des Signals eingestellt.
Auch die Frequenz kann verändert werden. Allerdings führen höhere Wert zu einem schnelleren Blinken, was nur in begrenztem Rahmen (bis etwa 12 Hz) sinnvoll ist.
Weitere verwandte Themen:
- Raspberry Pi Pico als Sinus-Signalgenerator mit dem MCP4725
- Raspberry Pi Pico als Sägezahn-Signalgenerator mit dem MCP4725
- Raspberry Pi Pico als Stufen-Signalgenerator mit dem MCP4725
- Raspberry Pi Pico: MCP4725 programmieren
- Raspberry Pi Pico als Signalgenerator mit dem MCP4725
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.






