{"id":4352,"date":"2026-02-21T09:38:17","date_gmt":"2026-02-21T08:38:17","guid":{"rendered":"https:\/\/staging.elv.eqxt.de\/?p=4352"},"modified":"2026-04-30T17:02:12","modified_gmt":"2026-04-30T15:02:12","slug":"einstieg-python-teil-3-digitale-logik-raspberry-pi","status":"publish","type":"post","link":"https:\/\/de.elv.com\/elvjournal\/einstieg-python-teil-3-digitale-logik-raspberry-pi\/","title":{"rendered":"Einstieg in Python (Teil 3): Digitale Logik und Schaltungstechnik"},"content":{"rendered":"\n<p class=\"has-gray-light-color has-text-color has-link-color has-h-5-font-size wp-elements-aa24a08a516629a9b57906d7740c96bd\"><strong>Einstieg in Python, Teil 3<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Digitale Logik und Schaltungstechnik<\/h1>\n\n\n\n<p><strong>Der Raspberry Pi findet als vielseitiger Einplatinencomputer in der Digitaltechnik eine Vielzahl von Anwendungen. Ein wichtiger Einsatzbereich ist unter anderem die Verwendung als kosteng\u00fcnstige Lernplattform. Die Digitaltechnik ist zur unverzichtbaren Grundlage der modernen Elektronik geworden und die Programmiersprache \u201ePython&#8220; kann verwendet werden, um Grundlagen dieser zentralen Disziplin zu vermitteln. Auch wenn die klassische Digitaltechnik mit einzelnen Logikgattern oder Z\u00e4hler-ICs zunehmend in den Hintergrund tritt \u2013 ohne solide Kenntnisse der digitalen Schaltungstechnik k\u00f6nnen weder Mikrocontroller noch FPGAs (Free Programmable Gate Arrays), EPLDs (Electronically Programmable Logic Devices), Prozessoren, Displays oder Speichersysteme entwickelt und aufgebaut werden.<\/strong><\/p>\n\n\n\n<p>Der Raspberry Pi eignet sich bestens dazu, digitale Schaltungen und Prototypen zu entwickeln und zu testen, da er \u00fcber GPIO-Pins verf\u00fcgt, die als digitale Ein- und Ausg\u00e4nge dienen k\u00f6nnen. Dadurch ist er als Steuerungseinheit f\u00fcr verschiedene Sensoren und Aktoren in digitalen Schaltungen verwendbar. Zudem kann mit dem Raspberry Pi z.&nbsp;B. ein Smart-Home-System aufgebaut werden, in dem python-gesteuerte Hardware als zentrale Steuereinheit dient, um verschiedene IoT-Ger\u00e4te wie beispielsweise digitale Sensoren f\u00fcr Temperatur, Feuchtigkeit, Bewegung und Lichtsteuerung auszuwerten.<\/p>\n\n\n\n<p>In diesem Beitrag soll deshalb die Funktion der Pins als Eing\u00e4nge genauer beschrieben werden. Dabei werden die folgenden Themen und Python-Programmstrukturen vorgestellt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Logische Funktionen in Python: AND, OR, NOT, NAND, NOR, EXOR<\/li>\n\n\n\n<li>Bitshift-Funktionen (\u00ab, \u00bb)<\/li>\n\n\n\n<li>Bin\u00e4rz\u00e4hler und Sieben-Segment-Displays<\/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\">Logik mit Python<\/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>F\u00fcr einfache Logikschaltungen wie UND, ODER, NICHT (engl. AND, OR und NOT) wurden \u00fcber Jahrzehnte hinweg sogenannte TTL- oder CMOS-Bausteine eingesetzt. F\u00fcr umfangreichere Aufgaben entstanden so regelrechte \u201eTTL-Gr\u00e4ber&#8220;<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\"> (Bild&nbsp;1)<\/mark>, deren Name auf die regelm\u00e4\u00dfige Anordnung der digitalen ICs zur\u00fcckgeht, die an Gr\u00e4berfelder gro\u00dfer Friedh\u00f6fe erinnerte.<\/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=\"1254\" height=\"406\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild1_Python3.jpg\" alt=\"Klassisches &quot;TTL-Grab&quot;\" class=\"wp-image-6471\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild1_Python3.jpg 1254w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild1_Python3-300x97.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild1_Python3-768x249.jpg 768w\" sizes=\"auto, (max-width: 1254px) 100vw, 1254px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Mit dem Aufkommen programmierbarer Bausteine fand diese \u00c4ra ihr Ende. Heute k\u00f6nnen sogar die komplexesten Aufgaben von einem einzelnen Controller oder Mikroprozessor \u00fcbernommen werden. F\u00fcr die Programmierung mit Python stehen umfangreiche Logikfunktionen als Softwarevariante zur Verf\u00fcgung, z.&nbsp;B.:<\/p>\n\n\n\n<figure class=\"wp-block-table has-text-small-font-size\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>a<\/strong><\/td><td><strong>not a<\/strong><\/td><\/tr><tr><td>True<\/td><td>False<\/td><\/tr><tr><td>False<\/td><td>True<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-table has-text-small-font-size\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>a<\/strong><\/td><td><strong>b<\/strong><\/td><td><strong>a and b<\/strong><\/td><td><strong>a or b<\/strong><\/td><\/tr><tr><td>True<\/td><td>True<\/td><td>True<\/td><td>True<\/td><\/tr><tr><td>True<\/td><td>False<\/td><td>False<\/td><td>True<\/td><\/tr><tr><td>False<\/td><td>True<\/td><td>False<\/td><td>True<\/td><\/tr><tr><td>False<\/td><td>False<\/td><td>False<\/td><td>False<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Auch die Bitoperatoren k\u00f6nnen in Python durch die folgenden Anweisungen dargestellt werden:<\/p>\n\n\n\n<p>&amp;   bitweise AND-Verkn\u00fcpfung<br>I     bitweise OR-Verkn\u00fcpfung<br>^    bitweise XOR-Verkn\u00fcpfung<br>~    bitweise NOT<\/p>\n\n\n\n<p>In Python wie auch in vielen anderen Programmiersprachen gibt es also zwei Arten von Operatoren: Standardoperatoren und bitweise Operatoren. Der Hauptunterschied zwischen ihnen liegt in der Art und Weise, wie sie Operanden verarbeiten.<\/p>\n\n\n\n<p>Bitweise Operatoren f\u00fchren Operationen auf der Bit-Ebene aus. Sie behandeln ihre Operanden als Bitsequenzen und f\u00fchren alle Funktionen auf den entsprechenden Bits durch. Sie sind n\u00fctzlich, um spezifische Manipulationen an den Bits von Ganzzahlen vorzunehmen, insbesondere in Bezug auf Flags, Masken und Portmanipulationen. Zun\u00e4chst kann man sich mit den Operatoren \u00fcber die Konsole vertraut machen. Das folgende Beispiel verdeutlicht den Unterschied.<\/p>\n\n\n\n<p>So liefert die Eingabe<\/p>\n\n\n\n<p>          &gt;&gt;&gt; a=4                             #a = 0100 bin\u00e4r<br>          &gt;&gt;&gt; b=10                           #b = 1010 bin\u00e4r<br>          &gt;&gt;&gt; print(bool(a and b))<\/p>\n\n\n\n<p>den Wert \u201eTrue&#8220; als Ergebnis. Dagegen liefert <strong>&gt;&gt;&gt; print(bool(a &amp; b))<\/strong> den Wert \u201eFalse\u201d. Die Standardverkn\u00fcfung (a and b) liefert \u201eTrue\u201d, da beide Operanden ungleich null, also \u201eTrue&#8220; sind. Das bitweise AND (&amp;) liefert \u201eFalse&#8220;<\/p>\n\n\n\n<p>                     0100<br>          &amp;         1010<br>          =       0000<\/p>\n\n\n\n<p>da an keiner Bin\u00e4rstelle von a und b gleichzeitig eine Eins steht. Das Ergebnis ist also die Bitfolge 0000 und damit \u201eFalse&#8220;. Hier ist in der Programmierpraxis also gro\u00dfe Aufmerksamkeit gefordert, da die beiden Verkn\u00fcpfungen leicht verwechselt werden k\u00f6nnen. <br>Die Shift-Operatoren sind ebenfalls verf\u00fcgbar:<\/p>\n\n\n\n<p>          &lt;&lt; Bits nach links verschieben<br>          &gt;&gt; Bits nach rechts verschieben<\/p>\n\n\n\n<p>Die folgenden Beispiele verdeutlichen wieder die Anwendung:<\/p>\n\n\n\n<p>          &gt;&gt;&gt; a = 0b01010<br>          &gt;&gt;&gt; bin(a&lt;&lt;1)<\/p>\n\n\n\n<p>liefert <strong>&#8218;0b10100&#8216;<\/strong> als Resultat. Die Bitfolge wurde also um eine Bin\u00e4rstelle nach links verschoben. Mathematisch entspricht dies einer Multiplikation mit 2:<\/p>\n\n\n\n<p>          &gt;&gt;&gt; a = 0b1010<br>          &gt;&gt;&gt; a<br>          10<br>          &gt;&gt;&gt; a&lt;&lt;1<br>          20<\/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\">LED-Logik<\/h2>\n\n\n\n<p>\u00dcber die IO-Pins k\u00f6nnen die Logik-Operatoren auch in der realen Welt eingesetzt werden. Das folgende Python-Programm emuliert ein AND-Gatter(AND_emulation.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, Button\nimport time\n\nLED1 = LED(2) # LED @ pin 2\nbutton1 = Button(4, pull_up=False) # button @ pin 3\nbutton2 = Button(17, pull_up=False) # button @ pin 4\n\nprint(button1); print(button2)\n\nwhile True:\n    if (button1.is_pressed &amp; button2.is_pressed):\n        LED1.on()\n    else:\n        LED1.off()<\/code><\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\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 Taster m\u00fcssen hierzu an die Pins 4 und 17 des Pi angeschlossen werden. Die LED bzw. das LED-Modul wird \u00fcber Pin 2 angesteuert. Den Schaltplan dazu zeigt <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild&nbsp;2<\/mark>.<\/p>\n\n\n\n<p>Um den Eing\u00e4ngen in jedem Fall definierte Pegel zu geben, wurden jeweils 10-k\u2126-Pull-down-Widerst\u00e4nde (siehe Teil 2 der Beitragsserie: <a href=\"https:\/\/de.elv.com\/python-micropython-programmieren-lernen-fuer-einsteiger-gpios-steuern-die-welt-254101\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">GPIOs steuern die Welt<\/a>) verwendet. Die LED erh\u00e4lt einen 470-\u2126-Vorwiderstand, dieser kann bei Verwendung von PAD-Modulen entfallen.<\/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 alignright size-full is-resized is-style-bordered\" style=\"margin-top:0;margin-bottom:0\"><img loading=\"lazy\" decoding=\"async\" width=\"1113\" height=\"1236\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild2_Python3.jpg\" alt=\"Schaltbild einer Gatterfunktion mit dem Raspberry Pi\" class=\"wp-image-6472\" style=\"width:451px;height:auto\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild2_Python3.jpg 1113w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild2_Python3-270x300.jpg 270w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild2_Python3-768x853.jpg 768w\" sizes=\"auto, (max-width: 1113px) 100vw, 1113px\" \/><figcaption class=\"wp-element-caption\">Bild 2: Schaltbild einer Gatterfunktion mit dem Raspberry Pi<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Nach dem Start des Programms ist die LED zun\u00e4chst aus bzw. es leuchtet die rote LED am Logic-Level-Modul, falls dieses verwendet wird (siehe Teil&nbsp;2 der Beitragsserie: GPIOs steuern die Welt). Wird entweder Taster&nbsp;1 oder Taster&nbsp;2 gedr\u00fcckt, \u00e4ndert sich nichts. Erst wenn Taster&nbsp;1 und Taster&nbsp;2 gleichzeitig bet\u00e4tigt werden, geht die LED an bzw. das Logic-Level-Modul \u00e4ndert seinen Port-Zustand von rot auf gr\u00fcn.<\/p>\n\n\n\n<p class=\"has-gray-lightest-100-background-color has-background\"><strong>Hinweis:<\/strong> Der Pin GPIO3 kann hier nicht als Eingang verwendet werden, da er intern fest mit einem Pull-up-Widerstand verdrahtet ist. Deshalb werden die Ports 4 und 17 eingesetzt.<\/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\">Bitshift in Aktion<\/h2>\n\n\n\n<p>Um die etwas abstrakten Bitshift-Operationen praktisch anzuwenden, kann das folgende Programm verwendet werden (BitshiftChaser.py). Zur Demonstration der Shift-Operation wird hier vorgegriffen. Die im Programm verwendeten Zeichenkettenoperationen usw. werden jedoch in sp\u00e4teren Beitr\u00e4gen ausf\u00fchrlich erl\u00e4utert.<\/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\nfrom time import sleep\n\nled_pins = &#91;2,3,4,17,27,22,10,9]\nleds = &#91;LED(pin) for pin in led_pins]\n\nn=1\n\nwhile True:\n    bit_pattern = str(bin(n)&#91;2:])\n    bit_pattern = \"\".join(reversed(bit_pattern))\n    print(bit_pattern)\n    for i in range(len(bit_pattern)):\n        if bit_pattern&#91;i] == '1':\n            leds&#91;i].on()\n        else:\n            leds&#91;i].off()\n\n    n=n&lt;&lt;1 # bitshift left\n\n    sleep(.1)\n\n    if n&gt;=255:\n        for i in range(len(bit_pattern)):\n            leds&#91;i].off()\n        sleep(.1)\n        n=1<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Das Programm sorgt daf\u00fcr, dass ein Lichtpunkt eine Reihe von LEDs von links nach rechts durchl\u00e4uft. Nach dem Einbinden der Bibliotheken und dem Initialisieren der verwendeten LED-Pins wird die Z\u00e4hlervariable \u201en&#8220; auf 1 gesetzt. In der folgenden Endlosschleife wird nun ein passendes Bitmuster erzeugt: <strong>bit_pattern = str(bin(n)[2:])<\/strong><\/p>\n\n\n\n<p>Dies liefert eine Bin\u00e4rzahl (bin()) als Zeichenmuster, beispielsweise f\u00fcr n = 5 die Zeichenfolge: <strong>n = 5 bit_pattern = 101<\/strong><br>Die Anweisung [2:] sorgt daf\u00fcr, dass das Bin\u00e4rzahlenpr\u00e4fix (0b&#8230;) entfernt wird. Mit <strong>bit_pattern = &#8222;&#8220;.join(reversed(bit_pattern))<\/strong> wird die Reihenfolge des Bitmusters umgedreht, damit die Bit-Reihenfolge mit den LEDs \u00fcbereinstimmt. Die folgende \u201efor&#8220;-Schleife sorgt daf\u00fcr, dass immer genau die LED eingeschaltet wird, an deren Stelle eine \u201e1&#8243; im Bitmuster steht. Dann folgt die entscheidende Anweisung <strong>n = n &lt;&lt; 1<\/strong> in welcher der eigentliche Bitshift ausgef\u00fchrt wird. Die verbleibenden Programmzeilen sorgen dann nur noch daf\u00fcr, dass beim Erreichen der letzten LED wieder von vorne begonnen wird. Um das Programm zu testen, m\u00fcssen nun lediglich 8 LEDs (oder das Level-Modul) an die Ports <strong>2, 3, 4, 17, 27, 22, 10 und 8<\/strong> angeschlossen werden<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\"> (Bild&nbsp;3)<\/mark>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized is-style-bordered\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\"><img loading=\"lazy\" decoding=\"async\" width=\"1118\" height=\"1009\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild3_Python3.jpg\" alt=\"Schaltbild zum Aufbau eines Lauflichts\" class=\"wp-image-6473\" style=\"width:450px\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild3_Python3.jpg 1118w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild3_Python3-300x271.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild3_Python3-768x693.jpg 768w\" sizes=\"auto, (max-width: 1118px) 100vw, 1118px\" \/><figcaption class=\"wp-element-caption\">Bild 3: Schaltbild zum Aufbau eines Lauflichts<\/figcaption><\/figure>\n\n\n\n<p>Parallel dazu kann das Bitmuster in der Thonny-Shell beobachtet werden <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">(Bild&nbsp;4)<\/mark>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-bordered\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"776\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild4_Python3-1600x776.jpg\" alt=\"Ausgabe Bitshift-Funktion in der Shell\" class=\"wp-image-6474\" style=\"width:550px\"\/><figcaption class=\"wp-element-caption\">Bild 4: Ausgabe Bitshift-Funktion in der Shell<\/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\">Logik-Analyzer in Python<\/h2>\n\n\n\n<p>Dass mit Python nicht nur veraltete Hardware ersetzt werden kann, sondern auch andere komplexere und n\u00fctzliche Anwendungen m\u00f6glich sind, soll in diesem Abschnitt demonstriert werden. Mit dem folgenden Aufbau entsteht beispielsweise ein Logik Analyzer. Er ist in der Lage, die Wahrheitstabelle eines beliebigen Gatters aufzuzeichnen. Hierf\u00fcr m\u00fcssen lediglich zwei IO-Pins als Ausg\u00e4nge und ein Pin als Eingang konfiguriert werden. Das folgende Programm zeigt eine einfache Version eines solchen Logik-Analyzers (LogicAnalyzer.py):<\/p>\n\n\n\n<p>Das folgende Python-Programm sorgt daf\u00fcr, dass die LED im Sekundentakt blinkt (blink_LED_1_Hz.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>import RPi.GPIO as GPIO\nimport time\n\noutput1_pin=2\noutput2_pin=3\ninput_pin=4\n\nGPIO.setmode(GPIO.BCM)\nGPIO.setup(output1_pin, GPIO.OUT)\nGPIO.setup(output2_pin, GPIO.OUT)\nGPIO.setup(input_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)\n\nwhile True:\n    print(\"A B Out\")\n    # 00\n    GPIO.output(output1_pin, GPIO.LOW)\n    GPIO.output(output2_pin, GPIO.LOW)\n    print(0,0, GPIO.input(input_pin))\n    time.sleep(1)\n\n    # 01\n    GPIO.output(output1_pin, GPIO.LOW)\n    GPIO.output(output2_pin, GPIO.HIGH)\n    print(0,1, GPIO.input(input_pin))\n    time.sleep(1)\n\n    # 10\n    GPIO.output(output1_pin, GPIO.HIGH)\n    GPIO.output(output2_pin, GPIO.LOW)\n    print(1,0, GPIO.input(input_pin))\n    time.sleep(1)\n\n    # 11\n    GPIO.output(output1_pin, GPIO.HIGH)\n    GPIO.output(output2_pin, GPIO.HIGH)\n    print(1,1, GPIO.input(input_pin))\n    time.sleep(3)\n\nprint()<\/code><\/pre>\n\n\n\n<p>Hier wird wieder die RPi.GPIO importiert, um auf die GPIO-Pins des Raspberry Pi zugreifen zu k\u00f6nnen. Es werden drei Pins konfiguriert:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>output1_pin (Pin 2) als Ausgang<\/li>\n\n\n\n<li>output2_pin (Pin 3) als Ausgang<\/li>\n\n\n\n<li>input_pin (Pin 4) als Eingang mit internem Pull-Up-Widerstand<\/li>\n<\/ul>\n\n\n\n<p>In der Endlosschleife (while True) werden die folgenden Aktionen wiederholt:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>&#8222;A B Out&#8220; <\/strong>wird ausgegeben, um anzuzeigen, welche Kombinationen von output1_pin und output2_pin derzeit aktiv sind.<\/li>\n\n\n\n<li>Die GPIO-Pins werden in allen m\u00f6glichen Kombinationen angesteuert:<br><br><strong>&#8222;00&#8220;<\/strong>: output1_pin und output2_pin werden auf LOW gesetzt, um die Kombination 00 zu repr\u00e4sentieren. Dann wird der Zustand des input_pin (Pin 4) ausgegeben.<br><strong>&#8222;01&#8220;<\/strong>: output1_pin wird auf LOW und output2_pin auf HIGH gesetzt, um die Kombination 01 zu repr\u00e4sentieren. Dann wird der Zustand des Input-Pins ausgegeben.<br><strong>&#8222;10&#8220;<\/strong>: output1_pin wird auf HIGH und output2_pin auf LOW gesetzt, um die Kombination 10 zu repr\u00e4sentieren. Der Zustand wird wieder ausgegeben.<br><strong>&#8222;11&#8220;<\/strong>: output1_pin und output2_pin werden auf HIGH gesetzt, um die Kombination 11 zu repr\u00e4sentieren. Es folgt wieder die Ausgabe des Zustands.<\/li>\n<\/ol>\n\n\n\n<p>Nach jeder Ausgabe wird eine Pause von einer Sekunde bzw. drei Sekunden nach der Kombination \u201e11&#8243; eingelegt, um die Ausgaben lesbar zu halten.<\/p>\n\n\n\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild 5 <\/mark>zeigt die Schaltung unter Verwendung eines PAD-Moduls (AND-Gatter).<\/p>\n\n\n\n<p class=\"has-gray-lightest-100-background-color has-background\"><strong>Hinweis: <\/strong>Bitte genau auf den korrekten Aufbau achten. Wenn durch fehlerhafte Verdrahtung z.&nbsp;B. zwei Ausg\u00e4nge verbunden werden, kann dies zu Hardwaredefekten f\u00fchren. Im Zweifelsfall k\u00f6nnen sicherheitshalber vor alle Raspberry-Pi-Eing\u00e4nge 1-k\u2126-Widerst\u00e4nde eingef\u00fcgt werden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized is-style-bordered\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\"><img loading=\"lazy\" decoding=\"async\" width=\"1013\" height=\"772\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild5_Python3.jpg\" alt=\"Schaltung zum Logik-Analyzer mit PAD-AND-Gate-Modul\" class=\"wp-image-6475\" style=\"width:450px\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild5_Python3.jpg 1013w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild5_Python3-300x229.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild5_Python3-768x585.jpg 768w\" sizes=\"auto, (max-width: 1013px) 100vw, 1013px\" \/><figcaption class=\"wp-element-caption\">Bild 5: Schaltung zum Logik-Analyzer mit PAD-AND-Gate-Modul<\/figcaption><\/figure>\n\n\n\n<p>Wenn damit ein UND-Gatter analysiert wird, sieht das Ergebnis so aus wie in<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\"> Bild&nbsp;6<\/mark>. Ein Vergleich mit den darin dargestellten Logiktabellen best\u00e4tigt die korrekte Funktion.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized is-style-bordered\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\"><img loading=\"lazy\" decoding=\"async\" width=\"635\" height=\"394\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild6_Python3-e1760615617869.jpg\" alt=\"UND-Gatter im Logik-Analyzer\" class=\"wp-image-6476\" style=\"width:350px\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild6_Python3-e1760615617869.jpg 635w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild6_Python3-e1760615617869-300x186.jpg 300w\" sizes=\"auto, (max-width: 635px) 100vw, 635px\" \/><figcaption class=\"wp-element-caption\">Bild 6: UND-Gatter im Logik-Analyzer<\/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\">Graphische Darstellung von Logiktabellen: Time Charts<\/h2>\n\n\n\n<p>In Datenbl\u00e4ttern und in der technischen Literatur werden die Pegelverl\u00e4ufe von Logikschaltungen h\u00e4ufig grafisch in ihrem zeitlichen Verlauf (\u201etime charts&#8220;) dargestellt. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild&nbsp;7<\/mark> zeigt ein entsprechendes Beispiel. Mit kleineren Modifikationen kann auch der Logik-Analyzer aus dem letzten Abschnitt Time Charts liefern<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\"> (Bild&nbsp;8)<\/mark>.<\/p>\n\n\n\n<div class=\"wp-block-columns are-vertically-aligned-bottom is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-bottom is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:65%\">\n<figure class=\"wp-block-image size-full is-style-bordered\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\"><img loading=\"lazy\" decoding=\"async\" width=\"1217\" height=\"475\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild7_Python3.jpg\" alt=\"Time Chart einer digitalen Schaltung\" class=\"wp-image-6477\" style=\"object-fit:cover\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild7_Python3.jpg 1217w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild7_Python3-300x117.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild7_Python3-768x300.jpg 768w\" sizes=\"auto, (max-width: 1217px) 100vw, 1217px\" \/><figcaption class=\"wp-element-caption\">Bild 7: Time Chart einer digitalen Schaltung<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-bottom is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full is-style-default\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\"><img loading=\"lazy\" decoding=\"async\" width=\"884\" height=\"636\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild8_Python3.jpg\" alt=\"Time Chart einer AND-Funktion in der Thonny-Shell\" class=\"wp-image-6478\" style=\"object-fit:cover\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild8_Python3.jpg 884w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild8_Python3-300x216.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild8_Python3-768x553.jpg 768w\" sizes=\"auto, (max-width: 884px) 100vw, 884px\" \/><figcaption class=\"wp-element-caption\">Bild 8: Time Chart einer AND-Funktion in der Thonny-Shell<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Der Code dazu (Logic-Analyzer_graphical.py) sieht wie folgt aus:<\/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>import RPi.GPIO as GPIO\nimport time\n\noutput1_pin=2\noutput2_pin=3\ninput_pin=4\nlength=7\n\n# available pins: 2,3,4,17,27,22,10,9\nGPIO.setwarnings(False)\nGPIO.setmode(GPIO.BCM)\nGPIO.setup(output1_pin, GPIO.OUT)\nGPIO.setup(output2_pin, GPIO.OUT)\nGPIO.setup(input_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)\n\n# 00\nfor n in range(length):\n    GPIO.output(output1_pin, GPIO.LOW)\n    GPIO.output(output2_pin, GPIO.LOW)\n    print(0, 2, 4+GPIO.input(input_pin))\n# 01\nfor n in range(length):\n    GPIO.output(output1_pin, GPIO.LOW)\n    GPIO.output(output2_pin, GPIO.HIGH)\n    print(0, 3, 4+GPIO.input(input_pin))\n# 10\nfor n in range(length):\n    GPIO.output(output1_pin, GPIO.HIGH)\n    GPIO.output(output2_pin, GPIO.LOW)\n    print(1, 2, 4+GPIO.input(input_pin))\n# 11\nfor n in range(length):\n    GPIO.output(output1_pin, GPIO.HIGH)\n    GPIO.output(output2_pin, GPIO.HIGH)\n    print(1, 3, 4+GPIO.input(input_pin))<\/code><\/pre>\n\n\n\n<p>Im Vergleich zur numerischen Ausgabe wurde hier daf\u00fcr gesorgt, dass keine st\u00f6renden Zeichen ausgegeben werden. Die einzelnen Grafikkan\u00e4le wurden zudem durch entsprechende Offsetzahlen voneinander getrennt. Weitere Informationen und Details zu grafischen Ausgaben folgen in sp\u00e4teren Beitr\u00e4gen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bin\u00e4rz\u00e4hler<\/h2>\n\n\n\n<p>Neben den Logikfunktionen spielen vor allem Z\u00e4hler und Timer eine wichtige Rolle in der Digitaltechnik. Als n\u00e4chste Stufe soll daher ein Digitalz\u00e4hler in Python realisiert werden. Diese Version ersetzt die fr\u00fcher \u00fcbliche Kaskadierung von Flip-Flops und kann daher den Hardware-Aufwand in digitalen Systemen erheblich reduzieren. Das folgende Programm (BinaryCounter.py) z\u00e4hlt an den Ports 2, 3, 4, 17, 27, 22, 10, 9 im Bin\u00e4rcode:<\/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>0000 0000 0\n0000 0001 1\n0000 0010 2\n0000 0011 3\n0000 0100 4\n....\n1111 1111 255<\/code><\/pre>\n\n\n\n<p>Wird der Wert 255 erreicht, beginnt die Z\u00e4hlung wieder bei null.<\/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>import RPi.GPIO as GPIO\nimport time\n\nLED=&#91;2,3,4,17,27,22,10,9]\nEXP2=&#91;1,2,4,8,16,32,64,128]\n\nprint(\"Binary counter\")\nGPIO.setmode(GPIO.BCM) # access pins by their number\n\nfor n in LED: # Configure all pins to output mode\n    GPIO.setup(n, GPIO.OUT)\n\ncnt = 0\n\ntry:\n    while True:\n        for n in range(1,8):\n            GPIO.output(LED&#91;n], cnt &amp; EXP2&#91;n])\n        time.sleep(0.1)\n        cnt = (cnt + 1) % 256\n\nexcept KeyboardInterrupt:\n    GPIO.cleanup()\n    print(\"Bye...\")<\/code><\/pre>\n\n\n\n<p>Nach dem Import der Bibliotheken RPi.GPIO und \u201etime&#8220; werden zwei Listen definiert. Eine legt die Pins fest, an denen die Bin\u00e4rzahlen ausgegeben werden. Die andere enth\u00e4lt eine Folge von Zweierpotenzen. Dann werden die GPIO-Pins im BCM-Modus (Broadcom-Konfiguration) konfiguriert und als Ausg\u00e4nge 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>for n in LED:\n    GPIO.setup(n, GPIO.OUT)<\/code><\/pre>\n\n\n\n<p>Anschlie\u00dfend wird die Hauptschleife gestartet. In jeder Iteration wird der bin\u00e4re Z\u00e4hler auf den LEDs dargestellt. Dabei wird der Z\u00e4hlwert (cnt) bitweise mit den Zweierpotenzen aus der EXP2-Liste verkn\u00fcpft, um den Zustand der LEDs entsprechend zu setzen. Nach jeder Iteration wird eine kurze Pause von 0,1 Sekunden eingelegt, damit der aktuelle Wert abgelesen werden kann. Der Z\u00e4hler wird unverz\u00fcglich bei Erreichen der Zahl 256 zur\u00fcckgesetzt, um sicherzustellen, dass er im Bereich von 0 bis 255 bleibt. Der Rest des Programms dient wieder dem Abbruch bei einer entsprechenden Tastaturanweisung (Ctrl+C). Der Aufbau ist in <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">Bild 9<\/mark> dargestellt. Die LEDs sind hier wie \u00fcblich an den folgenden Ports angeschlossen <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">(siehe z.&nbsp;B. Bild&nbsp;3)<\/mark>:<\/p>\n\n\n\n<figure class=\"wp-block-table has-text-small-font-size\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>LED<\/strong><\/td><td>1<\/td><td>2<\/td><td>3<\/td><td>4<\/td><td>5<\/td><td>6<\/td><td>7<\/td><td>8<\/td><\/tr><tr><td><strong>Pi Port #<\/strong><\/td><td>2<\/td><td>3<\/td><td>4<\/td><td>17<\/td><td>27<\/td><td>22<\/td><td>10<\/td><td>9<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Nach dem Starten des Programms in Thonny leuchten die gr\u00fcnen LEDs im Anzeigemodul in der Folge eines Bin\u00e4rz\u00e4hlers (s. o.) auf.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\" style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20)\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"906\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild9_Python3-1600x906.jpg\" alt=\"Bin\u00e4rz\u00e4hler zeigt die Zahl 17 (10001000)\" class=\"wp-image-6479\" style=\"width:550px\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild9_Python3-1600x906.jpg 1600w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild9_Python3-300x170.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild9_Python3-768x435.jpg 768w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild9_Python3-1536x870.jpg 1536w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild9_Python3.jpg 1868w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><figcaption class=\"wp-element-caption\">Bild 9: Der Bin\u00e4rz\u00e4hler zeigt die Zahl 17 (10001000).<\/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\">Sieben-Segment-Display<\/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\" style=\"flex-basis:65%\">\n<p>Wenn ein Bin\u00e4rz\u00e4hler zur Verf\u00fcgung steht, ist es nur noch ein kleiner Schritt zu den bekannten Sieben-Segment-Displays. Diese zeigen Zahlen durch eine spezielle Anordnung von LEDs an. Besonders sch\u00f6n ist dies im PAD-Sieben-Segment-Modul zu sehen, da hier alle LEDs einzeln sichtbar sind <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">(Bild&nbsp;10)<\/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-large is-style-bordered\"><img loading=\"lazy\" decoding=\"async\" width=\"1355\" height=\"1600\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bildx_Python3-1355x1600.jpg\" alt=\"Zweistelliges Sieben-Segment-Display als PAD-Modul\" class=\"wp-image-6482\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bildx_Python3-1355x1600.jpg 1355w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bildx_Python3-254x300.jpg 254w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bildx_Python3-768x907.jpg 768w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bildx_Python3-1301x1536.jpg 1301w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bildx_Python3.jpg 1458w\" sizes=\"auto, (max-width: 1355px) 100vw, 1355px\" \/><figcaption class=\"wp-element-caption\">Bild 10: Zweistelliges Sieben-Segment-Display als PAD-Modul<\/figcaption><\/figure>\n<\/div>\n<\/div>\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>Bei anderen Sieben-Segment-Anzeigen sind die LEDs als rechteckige Leuchtfelder ausgef\u00fchrt, sodass die Ziffern noch deutlicher zu erkennen sind <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\">(Bild&nbsp;11)<\/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=\"800\" height=\"458\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild10_Python3.jpg\" alt=\"Kommerzielles vierstelliges Sieben-Segment-Display\" class=\"wp-image-6480\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild10_Python3.jpg 800w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild10_Python3-300x172.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild10_Python3-768x440.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Bild 11: Kommerzielles vierstelliges Sieben-Segment-Display<\/figcaption><\/figure>\n<\/div>\n<\/div>\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>Um die Bin\u00e4rzahlen 0 bis 9 als Ziffern anzuzeigen, m\u00fcssen nur die LEDs 1 bis 4 mit den Eing\u00e4ngen A, B, C und D des Ziffernmoduls verbunden werden<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-blue-color\"> (Bild&nbsp;12)<\/mark>. Nach dem Start des Programms z\u00e4hlt das Ziffernmodul nun automatisch von 0 bis 9.<\/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=\"1393\" height=\"854\" src=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild11_Python3.jpg\" alt=\"Digitalz\u00e4hler zeigt die Zahl 4\" class=\"wp-image-6481\" srcset=\"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild11_Python3.jpg 1393w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild11_Python3-300x184.jpg 300w, https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Bild11_Python3-768x471.jpg 768w\" sizes=\"auto, (max-width: 1393px) 100vw, 1393px\" \/><figcaption class=\"wp-element-caption\">Bild 12: Der Digitalz\u00e4hler zeigt die Zahl 4.<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Diese Anwendung ist ein sch\u00f6nes Beispiel daf\u00fcr, wie eine Software-Logikfunktion im Raspberry Pi mit der Hardware-Logik eines Ziffernanzeigemoduls effizient kombiniert werden kann.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-style- has-gray-lightest-100-background-color has-background is-layout-constrained wp-container-core-group-is-layout-df8428a5 wp-block-group-is-layout-constrained\" style=\"padding-top:0;padding-right:var(--wp--preset--spacing--30);padding-bottom:0;padding-left:var(--wp--preset--spacing--30)\">\n<h2 class=\"wp-block-heading\">\u00dcbungen und Anregungen<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00c4ndern Sie das AND-Programm so ab, dass eine ODER oder ein EXOR-Funktion entsteht!<\/li>\n\n\n\n<li>Wie ist es m\u00f6glich, mehr als zwei digitale Eing\u00e4nge zu verkn\u00fcpfen?<\/li>\n\n\n\n<li>Wie muss das Programm zum LED-Lauflicht aussehen, damit der Lichtpunkt von rechts nach links l\u00e4uft?<\/li>\n\n\n\n<li>Wie kann man den Punkt von rechts nach links und zur\u00fcck \u201ependeln&#8220; lassen?<\/li>\n\n\n\n<li>Testen Sie alle weiteren Gatter wie ODER, NOR, EXOR etc. mit dem Logik-Analyzer!<\/li>\n\n\n\n<li>Wie kann man den Logik-Analyzer auf mehrere Kan\u00e4le erweitern?<\/li>\n\n\n\n<li>Kann man auch Logikgatter mit f\u00fcnf Eing\u00e4ngen testen? Wenn ja, wie?<\/li>\n\n\n\n<li>Wie muss man den Bin\u00e4rz\u00e4hler erweitern, um im Sieben-Segment-Display von 0 bis 99 zu z\u00e4hlen?<\/li>\n\n\n\n<li>Wie k\u00f6nnte ein vierstellliges Sieben-Segment-Display angesteuert werden?<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Ausblick<\/h2>\n\n\n\n<p>Nachdem in diesem Beitrag die Logikfunktionen in Python detailliert vorgestellt und praktisch angewendet wurden, sollen im n\u00e4chsten Beitrag Programmabl\u00e4ufe und -strukturen genauer unter die Lupe genommen werden. Bereits in diesem Artikel wurde im Vorgriff von verschiedenen Schleifen und Entscheidungstechniken Gebrauch gemacht. Im n\u00e4chsten Beitrag sollen diese grundlegenden Programmelemente detailliert erl\u00e4utert werden, sodass auch bisher noch nicht vollst\u00e4ndig erkl\u00e4rte Programmteile verst\u00e4ndlich werden. In weiteren Beitr\u00e4gen werden dann die in diesem Artikel bereits verwendeten Stringoperationen behandelt, sodass dann auch diese letzte L\u00fccke geschlossen wird.<\/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<\/ul>\n\n\n<div class=\"alignnone wp-block-dhsv-product-teaser\">\n    <div data-component=\"ProductTeaser\" data-props=\"{&quot;productIds&quot;:&quot;153753,155858&quot;,&quot;view&quot;:&quot;list&quot;,&quot;slider&quot;:true,&quot;sliderMobile&quot;:true,&quot;align&quot;:&quot;none&quot;}\"><\/div>\n<\/div>\n\n\n\n<div style=\"height:50px\" 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>Sie lernen, wie Sie mit Python am Raspberry Pi digitale Logik praktisch umsetzen: von AND\/OR\/NOT und bitweisen Operatoren \u00fcber Bitshift-Effekte bis zu Bin\u00e4rz\u00e4hler, 7-Segment-Anzeige und Logik-Analyzer. Mit Schaltpl\u00e4nen, GPIO-Beispielen und robustem Code f\u00fcr Ihre eigenen Prototypen.<\/p>\n","protected":false},"author":30,"featured_media":864,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[34],"tags":[1025,1022,1026,1023,654,1024],"post-author":[137],"class_list":["post-4352","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python-micropython","tag-binaerzaehler","tag-bitoperationen","tag-logik-analyzer","tag-logikgatter-and-or-not","tag-raspberry-pi-gpio","tag-sieben-segment-display","post-author-dr-guenter-spanner"],"acf":[],"info":{"thumbnail":{"url":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/header_phyton_teil11.jpg","alt":""},"teaserImage":{"ID":4827,"id":4827,"title":"liste-beitrag_python_t3_neu","filename":"Liste-Beitrag_python_t3_neu.jpg","filesize":97038,"url":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu.jpg","link":"https:\/\/de.elv.com\/elvjournal\/einstieg-python-teil-3-digitale-logik-raspberry-pi\/liste-beitrag_python_t3_neu\/","alt":"","author":"5","description":"","caption":"","name":"liste-beitrag_python_t3_neu","status":"inherit","uploaded_to":4352,"date":"2025-09-29 12:19:08","modified":"2025-09-29 12:21:14","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/elvjournal.elv.com\/wp-includes\/images\/media\/default.png","width":433,"height":274,"sizes":{"thumbnail":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu-250x250.jpg","thumbnail-width":250,"thumbnail-height":250,"medium":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu-300x190.jpg","medium-width":300,"medium-height":190,"medium_large":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu.jpg","medium_large-width":433,"medium_large-height":274,"large":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu.jpg","large-width":433,"large-height":274,"1536x1536":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu.jpg","1536x1536-width":433,"1536x1536-height":274,"2048x2048":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu.jpg","2048x2048-width":433,"2048x2048-height":274,"gform-image-choice-sm":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu.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_t3_neu.jpg","gform-image-choice-md-width":400,"gform-image-choice-md-height":253,"gform-image-choice-lg":"https:\/\/elvjournal.elv.com\/wp-content\/uploads\/Liste-Beitrag_python_t3_neu.jpg","gform-image-choice-lg-width":433,"gform-image-choice-lg-height":274}},"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":"21. Februar 2026","excerpt":"Sie lernen, wie Sie mit Python am Raspberry Pi digitale Logik praktisch umsetzen: von AND\/OR\/NOT und bitweisen Operatoren \u00fcber Bitshift-Effekte bis zu Bin\u00e4rz\u00e4hler, 7-Segment-Anzeige und Logik-Analyzer. Mit Schaltpl\u00e4nen, GPIO-Beispielen und robustem Code f\u00fcr Ihre eigenen Prototypen."},"_links":{"self":[{"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/posts\/4352","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\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/comments?post=4352"}],"version-history":[{"count":9,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/posts\/4352\/revisions"}],"predecessor-version":[{"id":13288,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/posts\/4352\/revisions\/13288"}],"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=4352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/categories?post=4352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/tags?post=4352"},{"taxonomy":"post-author","embeddable":true,"href":"https:\/\/de.elv.com\/elvjournal\/wp-json\/wp\/v2\/post-author?post=4352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}