{"id":2956,"date":"2026-02-26T00:00:00","date_gmt":"2026-02-25T23:00:00","guid":{"rendered":"https:\/\/staging.elv.eqxt.de\/?p=2956"},"modified":"2026-04-30T17:04:21","modified_gmt":"2026-04-30T15:04:21","slug":"python-micropython-pwm-dac-einsteiger-teil8","status":"publish","type":"post","link":"https:\/\/de.elv.com\/elvjournal\/python-micropython-pwm-dac-einsteiger-teil8\/","title":{"rendered":"Einstieg in Python (Teil 8): Die analoge Welt steuern &#8211; DACs und PWM"},"content":{"rendered":"\n<p class=\"has-gray-light-color has-text-color has-link-color has-h-5-font-size wp-elements-26d182ad2dd9c364e46ae10e890e066f\"><strong>Einstieg in Python (Teil 8)<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Die analoge Welt steuern &#8211; DACs und PWM<\/h1>\n\n\n\n<p><strong>Pulsweitenmodulation (PWM) und Digital-Analog-Wandlung (DAC) sind zwei wichtige Technologien, die es erlauben, analoge Signale zu erzeugen bzw. zu simulieren. Sie bilden in gewisser Weise das Gegenst\u00fcck zu den in Teil 5 dieser Serie behandelten Analog-Digital-Wandler (ADCs). Mithilfe einfacher Python-Programme lassen sich beide Technologien problemlos z. B. f\u00fcr einen Raspberry Pi ein- bzw. umsetzen.<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Pulsweitenmodulation (PWM)<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Die Pulsweitenmodulation (PWM) ist eine Methode, um die Leistung, Spannung oder den Strom an einer elektronischen Last zu steuern. Dabei wird ein digitales Signal erzeugt, das aus einer Reihe von Rechteckimpulsen mit konstanter Frequenz besteht, deren Einschaltzeit, also die Dauer des \u201eHigh&#8220;-Zustands, variiert wird. Diese \u201eon&#8220;-Zeit wird im Verh\u00e4ltnis zur Gesamtperiode des Signals betrachtet und als Tastverh\u00e4ltnis (Duty Cycle) bezeichnet. Das Tastverh\u00e4ltnis gibt an, wie lange das Signal in einer Periode eingeschaltet ist, und wird meist in Prozent angegeben. Ein Duty Cycle von 50 Prozent bedeutet also, dass das Signal innerhalb einer Periode genauso lange eingeschaltet wie ausgeschaltet ist <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">(Bild 1)<\/mark>.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"2000\" height=\"1844\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild01_python_T8.jpg\" alt=\"\" class=\"wp-image-4568\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild01_python_T8.jpg 2000w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild01_python_T8-300x277.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild01_python_T8-1600x1475.jpg 1600w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild01_python_T8-768x708.jpg 768w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild01_python_T8-1536x1416.jpg 1536w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><figcaption class=\"wp-element-caption\">Bild 1: PWM-Signale mit 50 %, 10 % und 90 % Duty Cycle<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Durch die Ver\u00e4nderung des Tastverh\u00e4ltnisses kann die mittlere Leistung, die einer Last zugef\u00fchrt wird, pr\u00e4zise reguliert werden. Die Grundfrequenz bleibt dabei konstant, w\u00e4hrend die Impulsbreite flexibel angepasst wird. PWM findet Anwendung in zahlreichen Bereichen, z. B. zur Steuerung von Motoren, LEDs oder in der Spannungsregelung.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Python-PWM mit dem Raspberry Pi<\/h2>\n\n\n\n<p>In den letzten Artikeln wurde die Bibliothek GPIOZero bereits f\u00fcr verschiedene Anwendungen wie das Ansteuern von LEDs oder das Einlesen von Tastern verwendet. Die Bibliothek bietet auch die einfache M\u00f6glichkeit, PWM-Signale mit Python zu erzeugen. Das folgende Programm (PWM_at_GPIO_04.py) liefert ein pulsweitenmoduliertes Signal an GPIO 4 eines Raspberry Pi 5:<\/p>\n\n\n\n<pre class=\"wp-block-code has-black-background-color has-background\" style=\"padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\"><code>from gpiozero import PWMOutputDevice\nimport time\n\nPWM_PIN = 4\n\npwm = PWMOutputDevice(PWM_PIN, initial_value=0, frequency=1000)\n\nwhile True:\n    for duty_cycle in range(0, 101, 1):\n        pwm.value = duty_cycle \/ 100.0\n        time.sleep(0.01)\n    for duty_cycle in range(100, -1, -1):\n        pwm.value = duty_cycle \/ 100.0\n        time.sleep(0.01)<\/code><\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Wird am entsprechenden Pin ein LED-Modul aus der PAD-Serie oder eine einzelne LED (mit Vorwiderstand) angeschlossen, kann man beobachten, wie die LED ihre Helligkeit kontinuierlich ver\u00e4ndert <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">(Bild 2)<\/mark>. Das Programm erzeugt ein PWM-Signal, dessen Tastverh\u00e4ltnis kontinuierlich ansteigt und wieder abf\u00e4llt.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"2000\" height=\"1639\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild02_python_T8.jpg\" alt=\"\" class=\"wp-image-4569\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild02_python_T8.jpg 2000w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild02_python_T8-300x246.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild02_python_T8-1600x1311.jpg 1600w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild02_python_T8-768x629.jpg 768w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild02_python_T8-1536x1259.jpg 1536w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><figcaption class=\"wp-element-caption\">Bild 2: PWM-gesteuerte LED am Raspberry Pi<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Zun\u00e4chst werden hierf\u00fcr die erforderlichen Bibliotheken importiert:<\/p>\n\n\n\n<pre class=\"wp-block-code has-black-background-color has-background\" style=\"padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\"><code>from gpiozero import PWMOutputDevice\nimport time<\/code><\/pre>\n\n\n\n<p>Die Klasse PWMOutputDevice dient zur Steuerung von PWM-Ausg\u00e4ngen. Danach wird der PWM-Pin definiert:<\/p>\n\n\n\n<pre class=\"wp-block-code has-black-background-color has-background\" style=\"padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\"><code>PWM_PIN = 4<\/code><\/pre>\n\n\n\n<p>Die Anweisung legt fest, welcher GPIO-Pin verwendet wird. Hier wird GPIO 04 gew\u00e4hlt. Es folgt die Initialisierung der PWM-Ausgabe:<\/p>\n\n\n\n<pre class=\"wp-block-code has-black-background-color has-background\" style=\"padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\"><code>pwm = PWMOutputDevice(PWM_PIN, initial_value=0, frequency=1000)<\/code><\/pre>\n\n\n\n<p>Der Befehl PWMOutputDevice erstellt ein PWM-Signal auf dem angegebenen Pin (PWM_PIN). Die Parameter haben die folgenden Funktionen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>initial_value=0:<\/strong> Das PWM-Signal startet mit einem Duty Cycle von 0% (Ausgang ist aus).<\/li>\n\n\n\n<li><strong>frequency=1000:<\/strong> Die Frequenz des PWM-Signals wird auf 1000 Hz (= 1 kHz) festgelegt.<\/li>\n<\/ul>\n\n\n\n<p>Es folgen die Schleifen zur Steuerung des Duty Cycles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die Endlosschleife (while True:) stellt sicher, dass das Programm dauerhaft l\u00e4uft, bis es manuell gestoppt wird.<\/li>\n\n\n\n<li>Die erste Schleife (for duty_cycle in range(0, 101, 1)) \u00fcbernimmt die folgende Aufgabe:\n<ul class=\"wp-block-list\">\n<li>Der Duty Cycle wird von 0 % auf 100 % in Schritten von 1 % erh\u00f6ht.<\/li>\n\n\n\n<li>Der Duty Cycle wird auf einen Wert zwischen 0,0 und 1,0 skaliert<\/li>\n\n\n\n<li>Nach jeder \u00c4nderung des Duty Cycles wartet das Programm 10 Millisekunden, bevor es fortf\u00e4hrt. Dadurch entsteht ein weiches Ansteigen der LED-Helligkeit.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Zweite Schleife (for duty_cycle in range(100, -1, -1)) reduziert die LED Helligkeit:\n<ul class=\"wp-block-list\">\n<li>Der Duty Cycle wird nun von 100 % auf 0 % in Schritten von 1 % verringert. Ansonsten sind die Prozesse dieselben wie in der ersten Schleife, nur in umgekehrter Richtung.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Von der PWM zum Digital-Analog-Converter (DAC)<\/h2>\n\n\n\n<p>Pulsweitenmodulation (PWM) ist eine vielseitige Technik, um analoge Signale mit digitalen Mitteln zu erzeugen. Sie wird h\u00e4ufig genutzt, um LEDs zu dimmen, Motoren zu steuern oder einfache Audio-Signale zu erzeugen. F\u00fcr Anwendungen, die ein \u201eechtes&#8220; analoges Signal erfordern, sind jedoch andere Techniken erforderlich. Hier kommen die sogenannten Digital-Analog-Wandler zum Einsatz. Im einfachsten Fall kann ein solcher Wandler durch eine sogenannte R-2R-Leiter realisiert werden Diese besteht aus einem Netzwerk von Widerst\u00e4nden in einer speziellen Spannungsteiler-Anordnung. Damit werden die von verschiedenen Ports zur Verf\u00fcgung gestellten Spannungspegel so eingeteilt, dass die digitale Eingabe eine proportionale analoge Ausgangsspannung erzeugt.<br>Da der Raspberry Pi keinen echten DAC enth\u00e4lt, muss man sich mit einer R-2R-Leiter behelfen. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild 3<\/mark> zeigt die Schaltung hierf\u00fcr.<br><br>Die Ausgangsspannung dieser Schaltung ist: <br>U = U(P7)\/2 + U(P6) \/ 4 + U(P5) \/ 8 + &#8230; + U(PO)\/256<br><br>Damit kann also \u00fcber einen 8-Bit-Port eine Analogspannung mit einer Aufl\u00f6sung von 5 V\/256=20 mV ausgegeben werden. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild 4<\/mark> zeigt einen Aufbauvorschlag f\u00fcr eine R-2R-Leiter.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large is-resized is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"1600\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild03_python_T8-901x1600.jpg\" alt=\"Bild 3: R-2R-Leiter als DAC\" class=\"wp-image-4570\" style=\"width:295px;height:auto\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild03_python_T8-901x1600.jpg 901w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild03_python_T8-169x300.jpg 169w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild03_python_T8-768x1364.jpg 768w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild03_python_T8-865x1536.jpg 865w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild03_python_T8-1153x2048.jpg 1153w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild03_python_T8-scaled.jpg 1464w\" sizes=\"auto, (max-width: 901px) 100vw, 901px\" \/><figcaption class=\"wp-element-caption\">Bild 3: R-2R-Leiter als DAC<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-image size-large is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1194\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild04_python_T8-1600x1194.jpg\" alt=\"Bild 4: Praktischer Aufbau einer R-2R-Leiter\" class=\"wp-image-4571\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild04_python_T8-1600x1194.jpg 1600w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild04_python_T8-300x224.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild04_python_T8-768x573.jpg 768w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild04_python_T8-1536x1146.jpg 1536w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild04_python_T8.jpg 2000w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-element-caption\">Bild 4: Praktischer Aufbau einer R-2R-Leiter<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>In den PAD-Sets stehen keine 2-k0-Widerst\u00e4nde zur Verf\u00fcgung. Notfalls kann man sich hier durch Serienschaltungen von 1-k0-Werten behelfen. Allerdings wird der Aufbau dadurch deutlich komplexer. Widerst\u00e4nde in normaler Bauform sind dagegen auch mit einem Wert von 2 k\u2126 erh\u00e4ltlich. Sind pr\u00e4zise Ausgangsspannungswerte erforderlich, sollte man Widerst\u00e4nde mit einer Toleranz von 1 % oder besser verwenden. Die Steuerung der Ports erfolgt \u00fcber ein passendes Python-Programm (R2R.py):<\/p>\n\n\n\n<pre class=\"wp-block-code has-black-background-color has-background\" style=\"padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\"><code>from gpiozero import LED\nimport time\n\n# GPIO-Pins f\u00fcr die R-2R-Leiter (anpassen, falls andere verwendet werden)\npins = &#91;17, 27, 22, 5, 6, 13, 19, 26] # Beispiel f\u00fcr 8-Bit-DAC\n\n# LEDs f\u00fcr die GPIO-Pins erstellen\noutputs = &#91;LED(pin) for pin in pins]\n\ndef set_dac(value):\n    \"\"\"\n    Gibt einen digitalen Wert (0-255 f\u00fcr 8-Bit) an die R-2R-Leiter aus.\n    :param value: Integer-Wert zwischen 0 und 255.\n    \"\"\"\n    binary = f\"{value:08b}\" # Bin\u00e4rdarstellung mit 8 Bits\n    for i, bit in enumerate(binary):\n        outputs&#91;i].value = int(bit) # Setze den Pin entsprechend (0 oder 1)\n\ntry:\n    while True:\n        for value in range(256): # Durchlaufe alle Werte von 0 bis 255\n            set_dac(value)\n            time.sleep(0.01) # Warte 10 ms, um die Ausgabe zu sehen\n\nexcept KeyboardInterrupt:\n    print(\"Programm beendet.\")\n\nfinally:\n    for output in outputs:\n        output.off() # Schalte alle GPIO-Pins aus<\/code><\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Zu Beginn des Programms werden die GPIO-Pins definiert, die mit der R-2R-Schaltung verbunden sind. Insgesamt werden acht Pins genutzt, da es sich um einen 8-Bit-DAC handelt. Dabei kommen die Pins 17, 27, 22, 5, 6, 13, 19 und 26 zum Einsatz. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild 5<\/mark> zeigt den zugeh\u00f6rigen Aufbau.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1226\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild05_python_T8-1600x1226.jpg\" alt=\"Bild 5: R-2R-Leiter am Rapsberry Pi\" class=\"wp-image-4572\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild05_python_T8-1600x1226.jpg 1600w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild05_python_T8-300x230.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild05_python_T8-768x589.jpg 768w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild05_python_T8-1536x1177.jpg 1536w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild05_python_T8.jpg 2000w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-element-caption\">Bild 5: R-2R-Leiter am Rapsberry Pi<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Diese Pins werden in einer Liste gespeichert:<br>pins = [17, 27, 22, 5, 6, 13, 19, 26]<\/p>\n\n\n\n<p>Sie werden mithilfe der Klasse LED aus der gpiozero-Bibliothek als digitale Ausg\u00e4nge eingerichtet. Die Funktion <code>set_dac(value)<\/code> ist der zentrale Bestandteil des Programms. Sie nimmt einen ganzzahligen Wert zwischen O und 255 entgegen, wandelt diesen in eine 8-Bit-Bin\u00e4rdarstellung um und steuert damit die GPIO-Pins an. Die Funktion gibt also einen digitalen Wert (zwischen 0 und 255) an die R-2R-Widerstandsleiter aus, indem sie die entsprechenden GPIO-Pins setzt.<\/p>\n\n\n\n<p>Hierzu werden die folgenden Schritte umgesetzt:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Der <code>value<\/code>-Parameter wird als Ganzzahl zwischen 0 und 255 (8-Bit-Wert) \u00fcbernommen<\/li>\n\n\n\n<li>Die Zahl wird in eine 8-stellige Bin\u00e4rzahl umgewandelt (<code>f\"{value:08b}\"<\/code>).<\/li>\n\n\n\n<li>Die folgende Schleife durchl\u00e4uft jedes Bit der Bin\u00e4rzahl.<\/li>\n\n\n\n<li>Die GPIO-Ausg\u00e4nge (<code>outputs[i]<\/code>) werden entsprechend auf 0 oder 1 gesetzt, um die R-2R-Widerstandsleiter mit digitalen Werten zu speisen.<\/li>\n<\/ol>\n\n\n\n<p>Wenn beispielsweise der Wert <code>value = 5<\/code> \u00fcbergeben wird, ergibt sich die Bin\u00e4rdarstellung <code>00000101<\/code>, und die Pins w\u00fcrden folgenderma\u00dfen gesetzt:<\/p>\n\n\n\n<figure class=\"wp-block-table has-text-small-font-size\"><table class=\"has-fixed-layout\"><thead><tr><th>Bitposition<\/th><th>Wert<\/th><th>GPIO<\/th><\/tr><\/thead><tbody><tr><td>7<\/td><td>0<\/td><td>Low<\/td><\/tr><tr><td>6<\/td><td>0<\/td><td>Low<\/td><\/tr><tr><td>5<\/td><td>0<\/td><td>Low<\/td><\/tr><tr><td>4<\/td><td>0<\/td><td>Low<\/td><\/tr><tr><td>3<\/td><td>0<\/td><td>Low<\/td><\/tr><tr><td>2<\/td><td>1<\/td><td>High<\/td><\/tr><tr><td>1<\/td><td>0<\/td><td>Low<\/td><\/tr><tr><td>0<\/td><td>1<\/td><td>High<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Diese bin\u00e4re Ausgabe steuert die R-2R-Widerstandsleiter, die daraus eine analoge Spannung erzeugt. Im Hauptteil des Programms wird eine Endlosschleife verwendet, um kontinuierlich alle m\u00f6glichen Werte von 0 bis 255 zu durchlaufen. F\u00fcr jeden Wert wird die Funktion set_dac (value) aufgerufen, und nach jeder Ausgabe erfolgt eine kurze Pause von 10 Millisekunden. Diese Verz\u00f6gerung dient dazu, die analoge Ausgabe des DACs deutlich sichtbar zu machen und sicherzustellen, dass jede Spannung ausreichend lange gehalten wird. Das Programm ist darauf ausgelegt, durch den Benutzer mit einer Tastenkombination (Strg + C) beendet zu werden. In diesem Fall werden alle GPIO-Pins automatisch deaktiviert, um sicherzustellen, dass keine ungewollten Zust\u00e4nde an den Ausg\u00e4ngen verbleiben.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">PWM und R-2R-Leiter: Vor- und Nachteile<\/h2>\n\n\n\n<p>Die beiden vorgestellten Methoden erlauben es, digitale Signale in analoge Spannungen umzuwandeln. Beide Verfahren haben spezifische Vor- und Nachteile und eignen sich f\u00fcr unterschiedliche Anwendungen. Bei der PWM wird die H\u00f6he der analogen Spannung durch das Verh\u00e4ltnis zwischen Ein- und Aus-Zeit des Signals (Duty Cycle) bestimmt. Durch eine ausreichende Gl\u00e4ttung mittels eines Tiefpassfilters l\u00e4sst sich eine ann\u00e4hernd konstante analoge Spannung erzeugen. PWM ist eine einfache und ressourcensparende Methode, da sie nur einen einzigen GPIO-Pin ben\u00f6tigt und direkt von Mikrocontrollern oder Einplatinencomputern wie dem Raspberry Pi unterst\u00fctzt wird. PWM ist jedoch frequenzabh\u00e4ngig: Eine zu niedrige Frequenz kann zu sichtbaren Fluktuationen (\u201eRipple&#8220;) in der Ausgangsspannung f\u00fchren, w\u00e4hrend bei sehr hohen Frequenzen die Anforderungen an die Filterung steigen. PWM eignet sich besonders f\u00fcr Anwendungen wie Motorsteuerungen, die Regelung von LEDs oder \u00fcberall dort, wo hohe Effizienz bei geringem Hardwareaufwand gefragt ist. Das R-2R-Verfahren ist konzeptionell einfacher, da es ohne Frequenzmodulation auskommt und direkt eine analoge Spannung proportional zur bin\u00e4ren Eingabe liefert. Ein R-2R-DAC ben\u00f6tigt jedoch f\u00fcr jedes Bit des digitalen Eingangs einen separaten GPIO-Pin, was bei hochaufl\u00f6senden DACs (z. B. 16 Bit) schnell viele Pins belegt. Zudem h\u00e4ngt die Genauigkeit der analogen Ausgabe stark von der Pr\u00e4zision der Widerst\u00e4nde ab. R-2R-DACs sind ideal f\u00fcr Anwendungen, die eine gleichm\u00e4\u00dfige und pr\u00e4zise analoge Ausgabe erfordern, wie etwa Audioanwendungen, pr\u00e4zise Messsysteme oder Steuerungen, bei denen eine ausreichende elektronische Filterung mit zu hohem Aufwand verbunden w\u00e4re. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Tabelle 1<\/mark> fasst die Vor- und Nachteile der beiden Verfahren zusammen. Letztendlich h\u00e4ngt die Wahl zwischen beiden Verfahren von den Anforderungen an Kosten, Signalqualit\u00e4t und Geschwindigkeit ab.<\/p>\n\n\n\n<figure class=\"wp-block-table has-text-small-font-size\"><table class=\"has-white-background-color has-background has-fixed-layout\"><thead><tr><th>Kriterium<\/th><th>PWM<\/th><th>R-2R-Leiter<\/th><\/tr><\/thead><tbody><tr><td><strong>Genauigkeit<\/strong><\/td><td>abh\u00e4ngig von der PWM-Aufl\u00f6sung (Bit-Tiefe) und der Gl\u00e4ttung (Filter)<\/td><td>h\u00e4ngt von der Genauigkeit der Widerst\u00e4nde ab (Toleranzen und Stabilit\u00e4t)<\/td><\/tr><tr><td><strong>Geschwindigkeit<\/strong><\/td><td>kann analoge Werte schnell erzeugen, ben\u00f6tigt jedoch eine Filterung f\u00fcr saubere Signale<\/td><td>sehr schnell, da die Umwandlung direkt erfolgt<\/td><\/tr><tr><td><strong>Signalqualit\u00e4t<\/strong><\/td><td>Ohne Filterung entstehen Welligkeiten im Signal (hochfrequentes PWM-Rauschen&#8220;).<\/td><td>saubere analoge Signale direkt ohne Filterung<\/td><\/tr><tr><td><strong>Aufwand<\/strong><\/td><td>ben\u00f6tigt nur einen GPIO-Pin und eventuell einen Tiefpassfilter<\/td><td>ben\u00f6tigt mehrere GPIO-Pins (entsprechend der Bit-Tiefe) und pr\u00e4zise Widerst\u00e4nde<\/td><\/tr><tr><td><strong>Flexibilit\u00e4t<\/strong><\/td><td>einfach zu implementieren, softwaregesteuerte Anpassung (z. B. variable Grundfrequenz)<\/td><td>hardwareabh\u00e4ngig; \u00c4nderungen erfordern Anpassung der Schaltung<\/td><\/tr><tr><td><strong>Kosten<\/strong><\/td><td>minimal, da nur der Raspberry Pi und ggf. ein Widerstand und ein Kondensator f\u00fcr den Filter ben\u00f6tigt werden<\/td><td>h\u00f6her, da pr\u00e4zise Widerst\u00e4nde und ggf. weitere externe Komponenten ben\u00f6tigt werden<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Tabelle 1<\/figcaption><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">F\u00fcr Messtechnikprofis: Arbitrary Function Generator<\/h2>\n\n\n\n<p>In der Welt der Analogelektronik existieren sogenannte Funktionsgeneratoren (engl. Arbitrary Function Generator). Die damit erzeugbaren \u201eFunktionen&#8220; umfassen meist ein Sinus-, ein Rechteck- und ein Dreiecksignal. Diese Signalformen sind mit analog-elektronischen Mitteln leicht zu erzeugen. Andere Signalformen dagegen sind bei solchen Ger\u00e4ten kaum zu finden. Mithilfe von Python und einem Raspberry Pi kann man diese Einschr\u00e4nkung leicht umgehen. Hier k\u00f6nnen nahezu beliebige Signalformen mit hoher Pr\u00e4zision erzeugt werden. Die gew\u00fcnschte Kurvenform kann dabei als Datensequenz in digitaler Form im Speicher des Raspberry abgelegt werden. Die Ausgabe erfolgt \u00fcber einen Parallelport mit angeschlossener R-2R-Leiter. Dazu m\u00fcssen in einem Programm die gew\u00fcnschten Funktionswerte in einem eindimensionalen Array abgelegt werden. Eine Schleife sorgt dann daf\u00fcr, dass die Werte nacheinander an die I\/O-Pins ausgegeben werden. Dort erfolgt mit dem R2R-Netzwerk die Umwandlung in eine analoge Spannung.<br><br>Mit einer Excel- oder LibreOffice-Datei k\u00f6nnen die Funktionswerte komfortabel erzeugt werden. Die Tabelle kann aus Datenfeldern bestehen, die jeweils 256 Werte fassen. Das erste Feld enth\u00e4lt einfach die Zahlen 0 bis 255 als \u201eIndices&#8220;. Im zweiten Feld (\u201eValues&#8220;) kann eine beliebige Funktion eingetragen werden. So liefert <code>=GANZZAHL(127+127*SIN(A_X*2*3,14\/255))<\/code> z. B. einen sinusf\u00f6rmigen Spannungsverlauf. Die gew\u00fcnschte Funktion muss mit Copy &amp; Paste in alle 256 Zellen kopiert werden. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild 6<\/mark> zeigt einen Ausschnitt aus der entsprechenden Tabelle. Ein passendes Spreadsheet-Beispiel (FuncTable.xls) findet sich zudem auch im Download. Um spezielle Funktionen zu erzeugen, kann man nun auch einzelne Zellen manuell ver\u00e4ndern und beliebige Werte zwischen 0 und 255 eintragen. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"1598\" height=\"812\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild06_python_T8.jpg\" alt=\"Bild 6: Daten in einer Tabellenkalkulation\" class=\"wp-image-4573\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild06_python_T8.jpg 1598w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild06_python_T8-300x152.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild06_python_T8-768x390.jpg 768w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild06_python_T8-1536x780.jpg 1536w\" sizes=\"auto, (max-width: 1598px) 100vw, 1598px\" \/><figcaption class=\"wp-element-caption\">Bild 6: Daten in einer Tabellenkalkulation<\/figcaption><\/figure>\n\n\n\n<p>Im Beispiel wurden in den vier Zellen, welche die Maximal- bzw. Minimalwerte des Sinus enthalten hatten, die Zahl 128 eingetragen. Dadurch entsteht die in <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild&nbsp;7<\/mark> gezeigte \u201egest\u00f6rte&#8220; Sinusfunktion, die jeweils an den Scheitelwerten \u201eAussetzer&#8220; aufweist. Damit kann man nun z. B. die Reaktion einer Analogschaltung auf dieses \u201efehlerhafte&#8220; Sinussignal pr\u00fcfen. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"1403\" height=\"897\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild07_python_T8.jpg\" alt=\"Bild 7: \u201eGest\u00f6rte Sinusfunktion\u201c aus Daten einer Tabellenkalkulation\" class=\"wp-image-4574\" style=\"width:739px;height:auto\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild07_python_T8.jpg 1403w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild07_python_T8-300x192.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild07_python_T8-768x491.jpg 768w\" sizes=\"auto, (max-width: 1403px) 100vw, 1403px\" \/><figcaption class=\"wp-element-caption\">Bild 7: \u201eGest\u00f6rte Sinusfunktion\u201c aus Daten einer Tabellenkalkulation<\/figcaption><\/figure>\n\n\n\n<p>Mit dem folgenden Programm (R2R_sinus.py) kann die so erzeugte Funktion \u00fcber die R-2R-Leiter als elektrisches Signal ausgegeben werden:<\/p>\n\n\n\n<pre class=\"wp-block-code has-black-background-color has-background\" style=\"padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\"><code>from gpiozero import LED\nimport time, array\n\n# Ein Array erstellen (Typ 'i' steht f\u00fcr ganze Zahlen)\nzahlen = array.array('i', \n&#91;128,131,134,137,141,144,147,150,153,156,159,162,165,168,171,174,\n177,180,183,186,189,191,194,197,199,202,205,207,209,212,214,217,\n219,221,223,225,227,229,231,233,235,236,238,240,241,243,244,245,\n246,247,248,249,250,251,252,253,253,254,254,255,255,255,255,255,\n255,255,255,255,255,254,254,254,253,253,252,251,250,249,248,247,\n246,245,243,242,240,239,237,236,234,232,230,228,226,224,222,220,\n218,215,213,211,208,206,203,201,198,195,193,190,187,184,181,179,\n176,173,170,167,164,161,158,155,152,148,145,142,139,136,133,130,\n126,123,120,117,114,111,108,104,101,98,95,92,89,86,83,80,\n77,75,72,69,66,63,61,58,55,53,50,48,45,43,41,38,\n36,34,32,30,28,26,24,22,20,19,17,16,14,13,11,10,\n9,8,7,6,5,4,3,3,2,2,1,1,0,0,0,0,\n0,0,0,1,1,1,2,2,3,4,4,5,6,7,8,10,\n11,12,13,15,16,18,20,21,23,25,27,29,31,33,35,37,\n39,42,44,47,49,51,54,57,59,62,65,67,70,73,76,79,\n82,85,88,91,94,97,101,103,106,109,112,115,119,122,125])\n\n# GPIO-Pins f\u00fcr die R-2R-Leiter (anpassen, falls andere verwendet werden)\npins = &#91;4, 17, 27, 22, 18, 23, 24, 25] # Beispiel f\u00fcr 8-Bit-DAC\n\n# Ausg\u00e4nge (\"LEDs\") f\u00fcr die GPIO-Pins erstellen\noutputs = &#91;LED(pin) for pin in pins]\n\ndef set_dac(value):\n    binary = f\"{value:08b}\" # Bin\u00e4rdarstellung mit 8 Bits\n    # print(binary)\n    for i, bit in enumerate(binary):\n        outputs&#91;i].value = int(bit) # Setze den Pin entsprechend (0 oder 1)\n\ntry:\n    while True:\n        for value in range(255): # Durchlaufe alle Werte von 0 bis 255\n            set_dac(zahlen&#91;value])\n            time.sleep(.01) # Warte 10 ms, um die Ausgabe zu sehen\nexcept KeyboardInterrupt:\n    print(\"Programm beendet.\")\n\nfinally:\n    for output in outputs:\n        output.off() # Schalte alle GPIO-Pins aus<\/code><\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild 8<\/mark> zeigt den erzeugten Spannungsverlauf auf einem analogen Oszilloskop. Beim Vergleich der Bilder erkennt man sofort die gute \u00dcbereinstimmung. Die Zahlenwerte in der Excel-Tabelle werden pr\u00e4zise in die analoge, auf dem Oszilloskop dargestellte Ausgabe umgesetzt.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"1278\" height=\"753\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild08_python_T8.jpg\" alt=\"Bild 8: Sinusfunktion mit \u201eSt\u00f6rung\u201c (100 ms bzw. 500 mV pro Skalenteil)\" class=\"wp-image-4575\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild08_python_T8.jpg 1278w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild08_python_T8-300x177.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/bild08_python_T8-768x453.jpg 768w\" sizes=\"auto, (max-width: 1278px) 100vw, 1278px\" \/><figcaption class=\"wp-element-caption\">Bild 8: Sinusfunktion mit \u201eSt\u00f6rung\u201c (100 ms bzw. 500 mV pro Skalenteil)<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Vom R-2R-Netzwerk zum echten Digital-Analog-Wandler<\/h2>\n\n\n\n<p>Ein R-2R-Widerstandsnetzwerk ist eine einfache und kosteng\u00fcnstige Methode, um digitale Signale in analoge Spannungen umzuwandeln. Es basiert auf einer Kette von Widerst\u00e4nden mit den Werten R und 2R, die zusammen einen mehrstufigen Spannungsteiler bilden. Durch Anlegen von digitalen High- oder Low-Pegeln an die Eing\u00e4nge entsteht eine gewichtete Summe, die eine analoge Ausgangsspannung liefert. Aufgrund seiner Einfachheit hat das R-2R-Netzwerk einige Nachteile. Es ist empfindlich gegen\u00fcber Widerstandstoleranzen, die die Genauigkeit der Ausgabe beeinflussen k\u00f6nnen. Zudem kann es bei hohen Schaltfrequenzen zu Verzerrungen kommen, da parasit\u00e4re Kapazit\u00e4ten die Signaltreue beeintr\u00e4chtigen. Ein echter Digital-Analog-Wandler (DAC) hingegen verwendet pr\u00e4zisere Widerstandsnetzwerke oder stromgesteuerte Wandlungsmethoden. Moderne DACs nutzen oft spezielle Ladungspumpen, Sigma-Delta-Modulation oder segmentierte Widerstandsarrays, um eine h\u00f6here Genauigkeit und geringere Verzerrungen zu erreichen. Au\u00dferdem verf\u00fcgen sie \u00fcber eine bessere Linearit\u00e4t, h\u00f6here Aufl\u00f6sung (bis zu 24 Bit) und kurze Wandlungszeiten, was f\u00fcr anspruchsvolle Anwendungen wie Audioverarbeitung oder pr\u00e4zise Sensorsysteme entscheidend ist. Der \u00dcbergang von einem R-2R-Netzwerk zu einem \u201eechten&#8220; DAC verbessert also die Signalqualit\u00e4t erheblich und erm\u00f6glicht Anwendungen, die eine exakte und stabile analoge Ausgangsspannung erfordern. Weitere Details dazu werden in sp\u00e4teren Artikeln behandelt, in welchen auch DACs f\u00fcr spezielle Bussysteme (I2C oder SPI) vorgestellt werden.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Erg\u00e4nzungen und \u00dcbungen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wie k\u00f6nnte ein Analogfilter zur PWM-Ausgabe des Raspberry Pi aussehen (Hinweis: RC-Tiefpass)?<\/li>\n\n\n\n<li>Wie beeinflusst die Grundfrequenz des PWM-Signals den \u201eRipple&#8220;, also das hochfrequente \u201eRauschen&#8220; des Signals?<\/li>\n\n\n\n<li>Wie k\u00f6nnte ein Programm aussehen, das eine 12-Bit-R-2R-Leiter ansteuert?<\/li>\n\n\n\n<li>Wo liegen die praktischen Grenzen einer diskret aufgebauten R-2R-Leiter?<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Ausblick<\/h2>\n\n\n\n<p>In diesem Artikel wurde die Technik der Pulsweitenmodulation (PWM) zur Ansteuerung der Helligkeit einer LED verwendet. Zudem wurden R-2R-Leitern als spezielle Digital-Analog-Converter eingesetzt. Diese erlauben es, mithilfe eines entsprechenden Python-Programms beliebige Analogsignale zu erzeugen. Sie k\u00f6nnen z. B. als universelle Test- und Pr\u00fcfsignale im Elektroniklabor nutzbringend eingesetzt werden. Im n\u00e4chsten Beitrag soll es um den Einsatz von Sensoren gehen. Die Daten dieser in der gesamten Technik so wichtigen Bauelemente k\u00f6nnen mit Python-Programmen eingelesen und verarbeitet werden. Dabei sollen insbesondere auch Signalverarbeitungsmethoden wie Mittelung, Filterung und Signalkonditionierung mit Python n\u00e4her betrachtet werden.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Material<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Raspberry Pi mit Netzteil<\/li>\n\n\n\n<li>jeweils ca. 10 St\u00fcck Widerst\u00e4nde 1 k\u2126 und 2 k\u2126<\/li>\n\n\n\n<li>Breadboard und Jumper-Kabel<\/li>\n<\/ul>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-gray-lightest-100-background-color has-background\" style=\"padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--20)\"><strong>\u00dcber den Autor<br><\/strong>Dr. G\u00fcnter Spanner ist als Autor zu den Themen Elektronik, Sensortechnik und Mikrocontroller einem weiten Fachpublikum bekannt. Schwerpunkt seiner hauptberuflichen T\u00e4tigkeit f\u00fcr verschiedene Gro\u00dfkonzerne wie Siemens und ABB ist die Projektleitung im Bereich Entwicklung und Technologie-Management. Der Dozent fu\u0308r Physik und Elektrotechnik hat zudem zahlreiche Fachartikel und Bu\u0308cher vero\u0308ffentlicht sowie Kurse und Lernpakete erstellt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PWM und DAC sind die Grundlagen, um mit Python und MicroPython digitale Signale in analoge umzuwandeln. Erfahren Sie in Teil 8 der Serie, wie Sie LEDs dimmen, Motoren steuern oder mit einem R-2R-Netzwerk echte Analogsignale am Raspberry Pi erzeugen.<\/p>\n","protected":false},"author":7,"featured_media":864,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[34],"tags":[552,551,549,553,555,554,557,548,550,556],"post-author":[137],"class_list":["post-2956","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python-micropython","tag-dac-python","tag-digital-analog-wandler-raspberry-pi","tag-micropython-pwm","tag-pulsweitenmodulation-raspberry-pi","tag-pwm-led-dimmen","tag-python-dac-beispiel","tag-python-elektronik-einsteiger","tag-python-pwm","tag-r-2r-leiter-dac","tag-raspberry-pi-gpio-programmierung","post-author-dr-guenter-spanner"],"acf":[],"info":{"thumbnail":{"url":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/header_phyton_teil11.jpg","alt":""},"teaserImage":{"ID":3692,"id":3692,"title":"liste-beitrag_python_t8","filename":"Liste-Beitrag_python_t8.jpg","filesize":57396,"url":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8.jpg","link":"https:\/\/de.elv.com\/elvjournal\/python-micropython-pwm-dac-einsteiger-teil8\/liste-beitrag_python_t8\/","alt":"","author":"5","description":"","caption":"","name":"liste-beitrag_python_t8","status":"inherit","uploaded_to":2956,"date":"2025-09-11 16:20:40","modified":"2025-09-11 16:20:40","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/elvjournal.elv.com\/wp-includes\/images\/media\/default.png","width":312,"height":198,"sizes":{"thumbnail":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8-250x198.jpg","thumbnail-width":250,"thumbnail-height":198,"medium":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8-300x190.jpg","medium-width":300,"medium-height":190,"medium_large":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8.jpg","medium_large-width":312,"medium_large-height":198,"large":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8.jpg","large-width":312,"large-height":198,"1536x1536":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8.jpg","1536x1536-width":312,"1536x1536-height":198,"2048x2048":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8.jpg","2048x2048-width":312,"2048x2048-height":198,"gform-image-choice-sm":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8.jpg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":190,"gform-image-choice-md":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8.jpg","gform-image-choice-md-width":312,"gform-image-choice-md-height":198,"gform-image-choice-lg":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t8.jpg","gform-image-choice-lg-width":312,"gform-image-choice-lg-height":198}},"categories":[{"id":34,"name":"Python &amp; MicroPython","slug":"python-micropython"}],"authors":[{"id":137,"name":"Dr. G\u00fcnter Spanner","slug":"dr-guenter-spanner"}],"document":false,"epaper":"","date":"26. Februar 2026","excerpt":"PWM und DAC sind die Grundlagen, um mit Python und MicroPython digitale Signale in analoge umzuwandeln. Erfahren Sie in Teil 8 der Serie, wie Sie LEDs dimmen, Motoren steuern oder mit einem R-2R-Netzwerk echte Analogsignale am Raspberry Pi erzeugen."},"_links":{"self":[{"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/posts\/2956","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/comments?post=2956"}],"version-history":[{"count":9,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/posts\/2956\/revisions"}],"predecessor-version":[{"id":13300,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/posts\/2956\/revisions\/13300"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/media\/864"}],"wp:attachment":[{"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/media?parent=2956"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/categories?post=2956"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/tags?post=2956"},{"taxonomy":"post-author","embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/post-author?post=2956"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}