8 Bit, 18 MHz, 320 LEDs: Schafft der AgonLight eine Pixelwand?
AgonLight-Serie:
- Teil 1: Hardware
- Teil 2: Programmieren
- Teil 3: LED-Wand (dieser Artikel)
Seit einiger Zeit beschäftige ich mich mit dem AgonLight, und es begeistert mich immer noch, was mit 8 Bit und BBC BASIC heute noch geht. In Teil 1 ging es um die Hardware, in Teil 2 ums Programmieren. Jetzt bekommt der Agon eine echte Aufgabe im Verein.
Da ich eh für die Raumausstattung zuständig bin und unser Eingangsbereich etwas unauffällig ist hatte ich schon länger die Idee eine Pixel-Deko über den Eingang zu hängen. Eine einfache Beleuchtung soll es aber nicht werden, sondern ein echtes Pixel-Display: Öffnungszeiten, Infos zum Verein als Lauftext, dazu kleine Pixel-Animationen, flexibel bleiben.
Bisher wollte ich die Steuerung über einen Arduino UNO R4 realisieren. Aber die nächste Idee war für mich naheliegend. Ich liebe den AgonLight und die Idee war geboren die LED-Wand mit 8-Bit zu powern.
Teil 1: Die LED-Module #
Lumanode als Grundlage #
Das Gehäuse musste ich nicht selbst konstruieren. Die Grundlage ist das Lumanode-System von Printable Accessories, ein 3D-druckbares, modulares LED-System. Davon nutze ich das Pixel System: quadratische Module, die du zu einem Raster beliebiger Größe zusammensteckst. Jedes Modul ist in 2×2 Kammern geteilt, jede Kammer ist ein Pixel. Ein weißer Diffusor-Deckel streut das Licht, sodass du keine einzelnen LED-Punkte siehst, sondern gleichmäßig leuchtende Flächen. Pixel halt.

Die Zielgröße: 100 × 40 cm #
Für den Eingangsbereich peile ich eine Fläche von 100 × 40 cm an. Die Rechnung:
| Modulgröße | 10 × 10 cm |
| Anordnung | 10 Module breit, 4 Module hoch |
| Module | 40 |
| Pixel je Modul | 2 × 2 |
| Auflösung | 20 × 8 Pixel = 160 Pixel |
| LEDs je Pixel | 2 |
| LEDs gesamt | 320 |
20 × 8 Pixel klingen nach wenig. Für Lauftext mit einem Font von 5 × 7 Pixeln reicht das aber genau, und aus ein paar Metern Entfernung wirken 5 × 5 cm große Pixel sehr schick.
Die LED-Technik #
In jedem Pixel sitzen zwei LEDs von einem SK6812-RGBNW-Streifen (12 V, 60 LEDs pro Meter). RGBNW heißt: Neben Rot, Grün und Blau hat jede LED einen eigenen neutralweißen Chip. Weiß wird also nicht aus RGB gemischt, was sonst meist leicht bläulich aussieht.
Das Besondere an diesem LED-Band: Jede LED hat ihren eigenen kleinen Controller. Alle 320 LEDs hängen an einer einzigen Datenleitung hintereinander. Die erste LED nimmt sich die ersten 32 Bit (je 8 Bit für Grün, Rot, Blau und Weiß) und reicht alles Weitere an die nächste weiter. Nach einer Pause von mindestens 80 µs übernehmen alle LEDs gleichzeitig ihre neuen Werte.
Einen festen Takt gibt es auf der Leitung nicht. Die LEDs unterscheiden 0 und 1 nur an der Länge des High-Impulses:
| Dauer | |
|---|---|
| Ein Bit | 1,25 µs (800 kHz) |
| „0": High-Phase | 0,3 µs |
| „1": High-Phase | 0,6 µs |
| Toleranz | ± 0,15 µs |
Dazu kommt: Die LEDs erwarten am Dateneingang 5-V-Pegel.
Und hier stellt sich die spannende Frage. Ein 8-Bit-Rechner mit 18 MHz soll Impulse mit einer Genauigkeit von 150 Nanosekunden erzeugen, 10.240 Bit am Stück, und das mehrmals pro Sekunde. Kann der AgonLight das überhaupt? Dazu gleich mehr.
Drucken und Löten #
Gedruckt habe ich auf einem Bambu Lab X2D. Für alle Teile, Gehäuse wie Deckel, nehme ich PETG statt PLA: Die Wand soll im Dauerbetrieb laufen, und PETG verträgt die Wärme der LEDs deutlich besser. Alle Teile drucken ohne Stützstrukturen. Laut Slicer braucht ein Modul (Bodenplatte, Gehäuse, Deckel) 67 g Filament. Für 40 Module kommen also satte 2,7 kg zusammen und eine Druckdauer von etwa 135h.
Der aufwendigere Teil ist die Montage. Pro Modul sind es 12 Lötpunkte: LED-Streifen, Verbindungen zwischen den Kammern und die Stecker zum nächsten Modul. Für die ganze Wand heißt das 480 Mal löten. Das war kein Hexenwerk, aber ein paar Abende gehen gingen dafür.

Teil 2: Den AgonLight programmieren #
Reicht die Geschwindigkeit? #
Kurz zusammengefasst nochmal die Spezifikation der LEDs: eine Datenleitung, 1,25 µs pro Bit, ± 150 ns Toleranz, 32 Bit pro LED, 5-V-Pegel. Zeit für eine Rechnung.
Der eZ80 könnte theoretisch bis zu 50 MHz, im Agon Light 2 ist er aber mit 18,432 MHz getaktet. Ein Takt dauert damit 54 ns, ein Bit für die LEDs sind 23 Takte. Die „0" braucht 6 Takte High, die „1" 12 Takte. Für die Ausgabe selbst gilt:
| Wert | |
|---|---|
| Zeit pro LED (32 Bit × 1,25 µs) | 40 µs |
| 320 LEDs | 12,8 ms |
| plus Latch-Pause | ≈ 13,1 ms pro Frame |
| Obergrenze allein durch die Leitung | ≈ 76 fps |
Die Leitung selbst wäre also kein Problem. Der Agon muss die Daten aber auch vorbereiten. Gemessen habe ich am echten Gerät mit 288 LEDs: 37,8 Frames pro Sekunde, einschließlich Vorbereitung. Das sind rund 92 µs pro LED. Hochgerechnet ergibt das:
| Wert | |
|---|---|
| Zeitbudget bei 30 fps | 33,3 ms |
| maximal ansteuerbar bei 30 fps | ≈ 360 LEDs, also ≈ 180 Pixel |
| unsere Wand: 320 LEDs | ≈ 29 ms pro Frame, also ≈ 34 fps |
Der Plan geht also auf, mit etwas Luft. Allerdings nur mit einem Kern in Assembler. Reines BASIC wäre zu langsam: Schon ein einzelner BASIC-Befehl kostet ein Vielfaches der 23 Takte, die für ein ganzes Bit zur Verfügung stehen.
Die Lösung: BASIC plus 23 Takte Assembler #
Die Arbeit ist deshalb aufgeteilt. BBC BASIC macht alles, was Spaß macht: Texte, Farben, Animationen. Das Ergebnis landet in einem Framebuffer, vier Byte pro Pixel. Dann ruft BASIC die Assemblerroutine auf:
1210 DEF PROCsend
1220 IF ?&B0000<>&C3 THEN OSCLI("LOAD ws2812.bin &B0000")
1230 !&B0008=fb% : !&B000C=bf% : !&B0010=np%*4
1240 CALL &B0000
1250 ENDPROCDie Routine in eZ80-Assembler entpackt den Framebuffer zuerst in einen Bitpuffer: ein Byte pro Datenbit, das schon das fertige Muster für den Port enthält. Dabei verdoppelt sie jeden Pixel (zwei LEDs pro Pixel) und begrenzt die Helligkeit, damit das Netzteil nicht überlastet wird. Danach sperrt sie die Interrupts und schiebt die Bits raus. Die innere Schleife ist genau 23 Takte lang:
loop: ld a,$10 ; 2 Pin high
out (c),a ; 3
ld a,(hl) ; 2 Bitmuster holen: $10 oder $00
inc hl ; 1
out (c),a ; 3 nach 6 Takten: bleibt high ("1") oder fällt ("0")
nop ; 1
nop ; 1
xor a ; 1
out (c),a ; 3 nach 12 Takten: Pin sicher low
dec de ; 1
ld a,d ; 1
or e ; 1
jr nz,loop ; 3 = 23 TakteDas Schöne daran: Die Schleifensteuerung (dec de, ld a,d, or e, jr nz) füllt genau die Takte, die sonst mit NOPs aufgefüllt werden müssten. Die Ausgabe läuft nahtlos zwischen den Bytes durch. Auf dem Papier ergibt das 325 ns für eine „0", 651 ns für eine „1" und 1248 ns pro Bit. Passt.
Eine Einschränkung gibt es: Die Geschwindigkeit von BASIC beim Berechnen von Bilder und Mustern. Ein Effekt, der alle 160 Pixel neu ausrechnet, schafft in BASIC nur wenige Bilder pro Sekunde. Für Lauftext, Uhr und langsame Farbverläufe reicht das. Für aufwändigere Animationen müsste man auch dafür in Assembler ausweichen. Aber für den Moment reicht uns das Setup.
Von 3,3 V auf 5 V: der Pegelwandler #
Die GPIO-Pins des Agon arbeiten mit 3,3 V und sind nicht 5-V-tolerant. Die LEDs wollen 5 V sehen. Dazwischen sitzt deshalb ein SN74AHCT125, ein Buffer-IC, der 3,3-V-Signale sauber als 5-V-Signale weitergibt. Der Aufbau:
- Daten kommen von Pin 21 (PC4) des Agon an den Eingang des 74AHCT125.
- Der 74AHCT125 wird aus dem 5-V-Pin des Agon versorgt, mit 100 nF direkt am IC.
- 390 Ω in der Datenleitung zur ersten LED dämpfen Reflexionen.
- 8,2 kΩ Pull-down am Eingang sorgen dafür, dass beim Einschalten keine Zufallsmuster auf die LEDs rauschen.
- Die LEDs hängen an einem eigenen 12-V-Netzteil. Zum Agon gehen nur Masse und Daten. Die gemeinsame Masse ist Pflicht.
Wichtig: Vom 5-V-Teil führt nie ein Kabel zurück an einen Agon-Pin.
Der Code #
Den kompletten Code findest du im Repository LumAgon auf GitHub. Dort liegen das BASIC-Programm mit Vorschau und Demos, die Assemblerroutine ws2812.asm, ein Kalibrierprogramm für die Verdrahtung und eine Schritt-für-Schritt-Anleitung für den Pegelwandler auf dem Breadboard.
Ein Wort zur Transparenz: Die Baupläne und der Code sind mit Unterstützung von KI entstanden. Die Zyklenrechnung, die Schaltung und die Tests am echten Gerät habe ich trotzdem selbst geprüft. Ohne echte Hardware ging es ohnehin nicht, denn der Emulator bildet das Timing der GPIO-Pins nicht ab.
Teil 3: Der Test #
Ein Modul am Agon #
Der Versuchsaufbau ist übersichtlich: ein Agon Light 2, ein Breadboard mit dem 74AHCT125 und ein Lumanode-Modul mit eigenem 12-V-Netzteil.

Erst messen, dann leuchten #
Bevor die erste LED etwas zu sehen bekam, habe ich mir das Signal mit dem Oszilloskop angesehen. Oben (gelb) kommt es direkt vom Agon-Pin, unten (türkis) hinter dem Pegelwandler.

Drei Dinge siehst du hier auf einen Blick:
- Der Pegel stimmt. Der Agon liefert gut 3 V, hinter dem 74AHCT125 sind es saubere 5 V. Genau das wollen die LEDs sehen.
- Das Timing stimmt. Bei 500 ns pro Kästchen liegen die Flanken rund 1,3 µs auseinander, knapp über dem Sollwert von 1,25 µs und locker in der Toleranz. Die kurzen High-Phasen von rund 0,3 µs sind „0"-Bits, so wie es die Zyklenrechnung vorhergesagt hat.
- Der Wandler gibt das Signal unverändert weiter. Beide Kurven laufen im Gleichschritt. Das leichte Überschwingen oben ist typisch, wenn du auf dem Breadboard misst.
Die automatische Messung rechts passt für Kanal 1: 768 kHz entsprechen gut 1,3 µs pro Bit. Die Werte für Kanal 2 (2,84 V, 427 kHz) sind eine Fehlmessung des Scopes. Die Kurve selbst zeigt klar 5 V und denselben Takt wie oben.
Zuerst habe ich mit einem einzigen Modul getestet, und es funktionierte auf Anhieb. Das Testprogramm läuft in sechs Schritten durch alle Farben und Kanäle. Die Zyklenrechnung aus dem Handbuch stimmte auch am echten Gerät, ich musste keinen einzigen NOP nachjustieren.

Der Agon läuft dabei übrigens ohne Monitor. Beim Einschalten startet ein kleines Menü, das sich mit Tönen meldet. Über USB kann ich am PC mitlesen und neue Programme auf die SD-Karte schieben, ohne die Karte umzustecken.
Sechs Module in Reihe #
Als Nächstes kamen sechs Module in einer Kette, auch das lief ohne Probleme. Damit ist klar: Die Technik funktioniert, jetzt ist es nur noch Fleißarbeit.
Die finale Version mit allen 40 Modulen ist demnächst bei uns im Verein zu sehen.
Teil 4: Fazit #
Der AgonLight begeistert mich immer noch. Ein 8-Bit-Rechner mit 18 MHz steuert rechnerisch 320 LEDs über BBC BASIC und einer Schleife von 13 Assemblerbefehlen. Das ist ein schönes Beispiel das Technik von gestern auch heute noch Anwendungsfälle hat. Okay ein Arduino hätte es auch getan, aber das kann ja jeder.
Live kannst du das LED-Display auf dem Flashback Symposium #3 sehen: vom 6. bis 8. November 2026 im Gemeindezentrum Jößnitz. Drei Tage Retro-Hardware, Livemusik, Nerdquiz, Demo-Competition und eine große Bomberman-Session. Wir sind als Verein mit sechs Tischen vertreten. Komm vorbei, schau dir gern mein LED-Setup an.
Wer nicht so lange warten will: Am Retro-Mittwoch steht der AgonLight bei uns im Verein und ich mache gerne den Promoter für dieses moderne Retroprojekt.
Bis dahin!
Die ganze AgonLight-Serie:
- Teil 1: AgonLight – Der schnellste 8-Bit-Mikrocomputer der Welt im Test
- Teil 2: AgonLight programmieren – Von BBC BASIC bis Inline-Assembler
- Teil 3: LED-Wand mit dem AgonLight (dieser Artikel)