KiEdit: Schaltungen auf Lochraster und Steckbrett

Wer eine Schaltung auf einer Lochrasterplatine aufbaut, plant meist mit Bleistift und kariertem Papier: Wo sitzt das IC, wo die Widerstände, wie laufen die Drähte, ohne sich zu kreuzen? Das ist mühsam, und ein vergessener Draht fällt erst beim Löten auf. KiEdit nimmt einem diesen Teil ab: Man beschreibt die Schaltung in ein paar Zeilen Python, und KiEdit legt die Drähte, prüft auf Fehler und zeichnet das Ergebnis.

So sieht das aus

from kiedit.ui.notebook import Perfboard

pb = Perfboard(16, 20)                     # Lochraster, 16 × 20 Löcher
pb.place_lib("U1", (4, 6), "NE555")        # IC aus der Bibliothek
pb.place("R1", (2, 9), (2, 13), "10k")
pb.place("D1", (12, 4), (12, 5), "red")

pb.connect("U1.VCC", "R1.1", net="VCC", color="red")
pb.connect("U1.OUT", "D1.1", net="out")

pb.autoroute()               # alle Drähte legen
pb.check()                   # Kurzschlüsse, offene Pins, fehlende Versorgung
pb.export_svg("board.svg")

Heraus kommt ein Bild wie dieses: ein Lauflicht mit dem Zähler-IC CD4017, vollständig vom Autorouter verdrahtet.

Lochrasterplatine 22 × 28 mit dem Lauflicht: IC in der Mitte, Versorgung rot, Signale blau und grün, Masse schwarz, drei LEDs mit Vorwiderständen unten.

Steckbrett für Bauanleitungen

Für Anleitungen braucht man ein Bild, das genau zeigt, in welches Loch welches Bein kommt. Dafür kennt KiEdit auch das Steckbrett, mit Reihen a bis j und den Plus- und Minusschienen:

from kiedit.ui.notebook import Breadboard

bb = Breadboard("half", rails=True)
bb.place_ic("U1", 12, "LM324")             # IC über den Mittelsteg, Pin 1 unten links
bb.place("R1", "i6", "i13", "10k")
bb.wire("j15", "b+15", color="red")        # Pin 4 (V+) an die untere Plusschiene
bb.note("b+30", "+9 V", color="red")
bb.export_svg("versuch.svg")

Weil das Bild aus derselben Beschreibung entsteht, die KiEdit auch prüft, passen Bild und Schaltung zusammen: Ein Draht, der im Bild fehlt, fehlt auch in der Prüfung.

Was dahintersteckt

Netze ergeben sich aus dem Kupfer. Es gibt keine getrennte Netzliste, die man pflegen muss. Was verbunden ist, rechnet KiEdit aus der Geometrie aus: Löcher, Lötbrücken, Drähte. Ein Union-Find-Verfahren fasst alle Löcher zusammen, die elektrisch zusammenhängen. Prüfung und KiCad-Export lesen beide aus dieser einen Quelle.

Ein echter Autorouter. KiEdit verdrahtet mit Negotiated Congestion (PathFinder), dem Verfahren aus der FPGA-Verdrahtung:

  1. Jedes Netz sucht sich seinen kürzesten Weg, Überschneidungen sind zunächst erlaubt.
  2. Jede Überschneidung kostet einen Preis, der von Durchgang zu Durchgang steigt.
  3. Alle Netze werden wieder herausgerissen und neu gelegt, bis keine Überschneidung mehr übrig ist.

Wo sich zwei Leitungen kreuzen müssen, weicht KiEdit auf eine zweite Lage aus: eine Drahtbrücke auf der Bauteilseite. Netze mit mehr als zwei Pins wachsen als Steiner-Bäume.

Auch die Platzierung wird optimiert. pb.autoplace() verschiebt die Bauteile per Simulated Annealing so, dass die Drähte möglichst kurz werden, und verdrahtet danach neu. Der Router meldet dabei jeden Schritt; daraus entsteht ein Video, in dem man den Drähten beim Wachsen, Zurückweichen und Einpendeln zusehen kann:

Export

Ausprobieren

KiEdit braucht Python 3.13:

git clone https://github.com/blueberrye-io/kiedit.git
cd kiedit
python3.13 -m venv .venv
.venv/bin/pip install -r requirements.txt
PYTHONPATH=. .venv/bin/python demo/JL/11_led_chaser.py

Im Ordner demo/JL/ liegen dreizehn fertige Schaltungen, vom 555-Blinker über Logikgatter und Flipflop bis zum Lauflicht. In einem Jupyter-Notebook zeichnet sich eine Platine von selbst, wenn man die Variable auswertet.

Stand

KiEdit ist ein Werkzeug, das wir selbst regelmäßig für diese Website benutzen, und wird mit jedem neuen Bild ein Stück besser. Es ist kein fertiges Produkt mit Bedienoberfläche: Man arbeitet in Python. Langfristig soll der Kern auf das iPad wandern; deshalb haben die Teile für Modell, Router und Export keine Abhängigkeit von der Oberfläche.


Erstellt: 05.11.2026