BlinkenArea

ein blinkender Vortrag zum Easterhegg 2004

Stefan '1stein' Schürmans

& Stephan 'ST' Kambor

copyleft - all rights reversed

Ablauf:

150 Minuten

Ende

v.0.8 alpha [ 08.04.2004 ]

https://blinkenarea.org/

Vorgeschichte (falls nötig)

Hardware Projekte mit 144 Pixeln

Dateiformate

Hardware Projekte mit 520 Pixeln

Netzwerkprotokolle

Software Projekte

Zukunft?

Vorgeschichte

copyleft - all rights reversed

12.September 2001 - 23.Februar 2002

Weltweit größe Lichtinstallation in dieser Art

12.9.1981 - 2001

20 Jahre Chaos, Diskord und Spaß am Gerät

[https://www.ccc.de/xxccc]

[http://www.blinkenlights.de]

Haus des Lehrers [Berlin-Alex]

Zukunft:

In den Orbit oder Sanierung?

Aktuell:

Umbau / Sanierung für 26 Mio. Euro

[http://www.bcc-alex.de]

Blinkenlights Installation:

obere 8 Stockwerke mit je 18 Fenstern

Baustrahler

Wandfarbe an den Fenstern

Pong / Loveletters

5 Monate und 23 Tage Laufzeit

1000 Filme davon 300 Liebesbriefe

DTH Video

https://blinkenarea.org/

Vorgeschichte

copyleft - all rights reversed

14. Juli 2002

Bushfire - Nation of Gondwana Open Air Festival

[http://blinkenlights.de/bushfire.de.html]

[http://blinkenlights.de/arcade/]

Paris, 25. September - 6. Oktober 2002

Arcade - Bibliothèque nationale de France

22.12. - 04.01.2004

Blinkenlights Reloaded

[http://blinkenlights.de/reloaded.de.html]

https://blinkenarea.org/

copyleft - all rights reversed

Problem:

Jede Lampe benötigt zu einem bestimmten Zeitpunkt ein definiertes Signal [0/1]

144 Lampen benötigen 144 Ausgänge am PC

Parallele Schnittstelle ~> 25 Pins (nicht alle können als Ausgang genutzt werden)

Lösung:

1. 3 ISA Karten mit je 48 Ausgängen ~> hohe Kosten

2. MCUs und Ethernet ~> hohe Kosten

3. irgend eine andere Lösung ...

4. mit 8 Bit Schieberegistern

HW mit 144 Pixeln

Wie steuere ich 144 Pixel (preiswert) mit einem Rechner an?

https://blinkenarea.org/

copyleft - all rights reversed

Schieberegister

Wie funktioniert ein 8 Bit Schieberegister?

mehrere miteinander gekoppelte Speicherzellen

Dateneingang ~> Bitkombination [10100101]

Takt

8 Ausgänge

Daten werden bei jedem Takt von Speicherzelle zu Speicherzelle weitergeschoben

Wie sieht ein 8 Bit Schieberegister aus?

IC - Integrated Circuit

16 Pins

https://blinkenarea.org/

copyleft - all rights reversed

Schieberegister

Beispiel 8 Bit Schieberegister:

[...]

Bitkombination wird bei jedem

Takt um ein Bit in das Register

geschoben

~> "Lämpchen" leuchten

Takt ist so hoch, dass das

Schieben für das menschliche

Auge nicht sichtbar ist

8 "Lampen" können mit einem

Ausgang des Parallelports

gesteuert werden ~> 18 Ausgänge

~> immernoch zuviele

https://blinkenarea.org/

copyleft - all rights reversed

Schieberegister

Register haben auch Ausgänge

~> kaskadieren möglich

16 Lampen ~> 2 Spalten ~> 1 Ausgang

9 Ausgänge werden benötigt

https://blinkenarea.org/

copyleft - all rights reversed

https://blinkenarea.org/

LittleLights

Hardware / genereller Aufbau

Garry ~> Rechner

Paula ~> Steuerplatine

Agnus ~> Verstärkerplatine

Denise ~> Haus [Gehäuse]

copyleft - all rights reversed

https://blinkenarea.org/

LittleLights

Hardware / Paula

Daten von Garry

Register

Ausgänge zu Agnus

9 x Daten

1 x Masse

1 x Strobe

1 x Clock

1 x Output Enable

18 Register

144 Signale zu

Agnus

copyleft - all rights reversed

https://blinkenarea.org/

LittleLights

Hardware / Agnus

Paula ~> 5V

Registerausgänge nicht belastbar

Lampen ~ 36 V

Verstärkung notwendig

144 N-Kanal Anreicherungs MOS-FETs in low-side-Verstärkerschaltung

copyleft - all rights reversed

https://blinkenarea.org/

LittleLights

Hardware / Garry

Standard PC:

[1] Mainboard

[Prozessor: AMD K6 II 450 MHz / 256 MB RAM]

[2] Netzteil

[230 Watt ATX]

[3] Festplatte

[IDE 545,5 MB]

Garry bereitet die Daten für Paula auf

Netzwerkschnittstelle / UDP

Prozessor untertaktet auf 400 MHz ~> geringere Wärmeentwicklung

copyleft - all rights reversed

https://blinkenarea.org/

BlinkenLEDs

http://blinkenleds.spline.de/

http://www.moddingmeister.de/

http://www.blinkenleds.de/

http://www.jalcdsforum.de/

und noch viele mehr...

copyleft - all rights reversed

https://blinkenarea.org/

XMasLights

288 Lichterkettenbirnchen

288 BC337 NPN-Transistoren

288 Widerstände

20 74164 TTL-Schieberegister

At90s2313

Max232

viel Kabel und Lötzinn

Ansteuerung über serielle Schnittstelle (9600Baud 8N1)

http://www.elektronikseiten.de/anderes/blinkenlights/

BLINKENmini - Graustufen

copyleft - all rights reversed

https://blinkenarea.org/

Linux-Kernel-Modul

Taktgenerator

2kHz

Parallelport

IRQ7

ACK (Pin 10)

PWM

bmdrv

Schieberegister

LEDs

Verstärker

Dateiformate *.blm

BlinkenLights Movie

copyleft - all rights reversed

https://blinkenarea.org/

Eine *.blm Datei besteht aus einem Header und den Nutzdaten die angeben,

zu welchem Zeitpunkt welche Lampe leuchtet.

Die Headerdaten erklären sich soweit von selbst (Beispiel: Littlelights Intro):

# BlinkenLights Movie 18x8	// Dateiformat

# name = LittleLights	// Name des Films

# description = LittleLights Intro	// zusätzliche Beschreibung

# creator = Blinkenpaint 2.4	// Programm mit dem es erstellt wurde

# author = ST	// Author

# width = 18	// Breite in Pixeln

# height = 8	// Höhe in Pixeln

# loop = no	// Wiederholung

# duration = 27450	// Dauer in ms

Die Nutzdaten bestehen aus mehreren Bildern, wobei eine 1 für eine eingeschaltene Lampe, eine 0 für eine ausgeschaltene Lampe steht. Die Zahl nach dem @ bestimmt, wieviel ms das Bild dargestellt werden soll.

Dateiformate *.bmm

BlinkenMini Movie

copyleft - all rights reversed

https://blinkenarea.org/

Eine *.bmm Datei besteht aus einem Header und den Nutzdaten die angeben,

zu welchem Zeitpunkt welche Lampe wie hell leuchtet.

Die Headerdaten erklären sich soweit von selbst:

# BlinkenMini Movie 18x8	// Dateiformat

# name = Test	// Name des Films

# creator = vi	// Programm mit dem es erstellt wurde

# author = 1stein	// Author

# width = 18	// Breite in Pixeln

# height = 8	// Höhe in Pixeln

# loop = no	// Wiederholung

# duration = 27450	// Dauer in ms

Die Nutzdaten bestehen aus mehreren Bildern, wobei 0xFF für eine voll eingeschaltene Lampe, 0x00 für eine ausgeschaltene Lampe steht. Die Zahl nach dem @ bestimmt, wieviel ms das Bild dargestellt werden soll.

@800

0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0x00 0x00 0x00 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00

0x00 0x00 0x00 0xFF 0x7F 0x7F 0x7F 0xFF 0x00 0xFF 0x7F 0x7F 0x7F 0xFF 0x00 0x00 0x00 0x00

0x00 0x00 0xFF 0x7F 0x7F 0x7F 0x7F 0x7F 0xFF 0x7F 0x7F 0x7F 0x7F 0x7F 0xFF 0x00 0x00 0x00

0x00 0x00 0xFF 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0xFF 0x00 0x00 0x00

0x00 0x00 0x00 0xFF 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0x7F 0xFF 0x00 0x00 0x00 0x00

0x00 0x00 0x00 0x00 0xFF 0xFF 0x7F 0x7F 0x7F 0x7F 0x7F 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00

0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0x7F 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00

0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

copyleft - all rights reversed

https://blinkenarea.org/

Dateiformate *.bml

Blinkenlights Markup Language

<?xml version="1.0" encoding="UTF-8"?>

<blm width="18" height="8" bits="4" channels="1">

<header>

<title>bbo-bbm</title>

<description>Auto-Generated Vertical Color Test</description>

<creator>Perlscript</creator>

<author>CAVAC</author>

<email>cavac@grumpfzotz.org</email>

<loop>no</loop>

</header>

<frame duration="50">

<row>89ABCDEFEDCBA98765</row>

<row>789ABCDEFEDCBA9876</row>

<row>6789ABCDEFEDCBA987</row>

<row>56789ABCDEFEDCBA98</row>

<row>456789ABCDEFEDCBA9</row>

<row>3456789ABCDEFEDCBA</row>

<row>23456789ABCDEFEDCB</row>

<row>123456789ABCDEFEDC</row>

</frame>

...

...

...

</blm>

ähnlich blm nur im XML Format

pro Pixel sind nicht nur 2 Zustände möglich

links 16 [hex 0 - F]

HW mit 520 Pixeln

copyleft - all rights reversed

- Matrix aus 520

oder 1040 LEDs

https://blinkenarea.org/

[https://www.arcademini.schuermans.info/]

- 16 Rot-Stufen (PWM)

- standalone

- programmierbar

- Compact-Flash

- USB

- 2 SNES-Pads

RotArcade

- Propeller-Clock-Prinzip:

- 20 LEDs rotieren mit 3000 U/min

- 8 Rot-Stufen (PWM)

- 512 x 20 Pixel

- Filme im Mikrocontroller gespeichert

- IR-Verbindung zum PC

[https://wiki.ccc.de/bin/view/Camp2003/RotArcade]

ARCADEmini gibt es teilweise als Bausatz

ARCADEmini - Hardware

copyleft - all rights reversed

https://blinkenarea.org/

LED-Matrix

ARCADEmini-Platine

USB-Chip USBN9604

Microcontroller

PIC18F8520

Spannungs-versorgung:6-10V =

USB-Port

am PC

2 SNES-Pads

Compact-Flash

8 Knöpfe

ARCADEmini - Software

copyleft - all rights reversed

https://blinkenarea.org/

ARCADEmini-Binary

Blinkenlights-Movie

BLINKENmini-Movie

blm2ambin

bmm2ambin

Blinkenlights-Markup

-Language

BlinkenPaint 3.14

TODO

ARCADEmini-Assembler

am_asm

NW-Protokolle - BLP

copyleft - all rights reversed

https://blinkenarea.org/

- jedes Frame ein UDP-Paket

- schwarz/weiss, 1 Kanal

+---------------------+

| magic |

| 0xDE 0xAD 0xBE 0xEF |

+---------------------+

| frame number |

| 0x00 0x00 0x00 0x00 |

+---------------------+

| width |

| 0x00 0x00 0x00 0x12 |

+---------------------+

| height |

| 0x00 0x00 0x00 0x08 |

+---------------------+

| pixels |

| 0x01 0x01 0x00 0x00 |

| 0x00 0x00 0x00 0x00 |

| ... |

| 0x00 0x00 0x00 0x00 |

+---------------------+

BLP – Blinkenlights-Protocol

- Pixel zeilenweise

- von links nach rechts

- von oben nach unten

Dynamische Erweiterung

- periodische Anfrage

- z.B. alle 10s

+---------------------+

| magic |

| 0xDE 0xAA 0xBE 0xCD |

+---------------------+

| command |

| 'R' 'E' 'F' 'R' |

| 'E' 'S' 'H' |

+---------------------+

- Ende-Mitteilung (optional)

+---------------------+

| magic |

| 0xDE 0xAA 0xBE 0xCD |

+---------------------+

| command |

| 'C' 'L' 'O' 'S' |

| 'E' |

+---------------------+

NW-Protokolle - EBLP

copyleft - all rights reversed

https://blinkenarea.org/

- jedes Frame ein UDP-Paket

- Graustufen, 1 Kanal

+---------------------+

| magic |

| 0xFE 0xED 0xBE 0xEF |

+---------------------+

| frame number |

| 0x00 0x00 0x00 0x00 |

+---------------------+

| width |

| 0x00 0x00 0x00 0x12 |

+---------------------+

| height |

| 0x00 0x00 0x00 0x08 |

+---------------------+

| pixels |

| 0xFF 0xCC 0x99 0x66 |

| 0x33 0x00 0x00 0x00 |

| ... |

| 0x00 0x00 0x00 0x00 |

+---------------------+

EBLP – extended Blinkenlights-Protocol

- Pixel zeilenweise

- von links nach rechts

- von oben nach unten

Dynamische Erweiterung

- periodische Anfrage

- z.B. alle 10s

+---------------------+

| magic |

| 0xDE 0xAA 0xBE 0xCD |

+---------------------+

| command |

| 'R' 'E' 'F' 'R' |

| 'E' 'S' 'H' '2' |

| '5' '6' |

+---------------------+

- Ende-Mitteilung (optional)

+---------------------+

| magic |

| 0xDE 0xAA 0xBE 0xCD |

+---------------------+

| command |

| 'C' 'L' 'O' 'S' |

| 'E' '2' '5' '6' |

+---------------------+

NW-Protokolle - MCUF

copyleft - all rights reversed

https://blinkenarea.org/

- jedes Frame ein UDP-Paket

- Graustufen, mehrere Kanäle

+-----------------------+

| magic |

| 0x23 0x54 0x26 0x66 |

+-----------+-----------+

| height | width |

| 0x00 0x14 | 0x00 0x1A |

+-----------+-----------+

| channels | maxval |

| 0x00 0x01 | 0x00 0xFF |

+-----------+-----------+

| pixels |

| 0xFF 0xCC 0x99 0x66 |

| 0x33 0x00 0x00 0x00 |

| ... |

| 0x00 0x00 0x00 0x00 |

+-----------------------+

MCUF – Microcontroller Frame Unit

- alle Kanäle pro Pixel

- Pixel zeilenweise

- von links nach rechts

- von oben nach unten

Dynamische Erweiterung (BlinkenProxy)

- periodische Anfrage

- z.B. alle 10s

+---------------------+

| magic |

| 0x42 0x42 0x42 0x42 |

+---------------------+

| reserved |

| 0x00 0x00 0x00 0x00 |

| 0x00 0x00 0x00 0x00 |

+---------------------+

- Ende-Mitteilung (optional)

+---------------------+

| magic |

| 0x42 0x42 0x42 0x43 |

+---------------------+

| reserved |

| 0x00 0x00 0x00 0x00 |

| 0x00 0x00 0x00 0x00 |

+---------------------+

- zulässige Werte für Pixel:

0 .. maxval

Software - bl_proxy

copyleft - all rights reversed

https://blinkenarea.org/

- Blinkenlights-Streams ...

... empfangen

... filtern

... konvertieren

... auswählen

... verteilen

bl_proxy - Blinkenlights-Proxy

- Unterstützung für BLP-, EBLP- und MCUF-Protokoll

- Unterstützung für dynamische Protokollerweiterungen

- kann auf mehreren UDP-Ports empfangen

- iptables-ähnliche Filterung der ankommenden Streams

- prioritätsbasierte Stream-Auswahl aus den aktiven Streams

- Konvertierung zwischen Formaten (Breite, Höhe, Graustufen)

- Fernsteuerung über TCP-Verbindung möglich

blccc

proxy.blinkenlights.de

BlinkenPlayer

-Extreme

BlinkenPlayer

-Extreme

Littlelights

BLINKENmini

ARCADEmini

BlinkenSimVB

blinkensim

weitere Software - Linux

copyleft - all rights reversed

https://blinkenarea.org/

- blib - [Blinkenlights Library] - Spiele

- blccc [Blinkenlights Chaos Control Center]

- blinkenisdn

- blinkentools

- blinkensim

- blinkenthemes

- blinkenjava

- udp2telnet

- Kernelmodule für Schieberegister HW

- bmgames

- bmsim

- net2bmdrv

...

st@blccc:~/blccc/playlist> blccc localhost

bl_playlist_new: successfully loaded 'playlist.default' with 162 movies

bl_movie_load: successfully loaded '21st_century_man.blm'

isdn_state_changed: onhook onhook

bl_movie_load: successfully loaded '3D_cube.blm'

bl_movie_load: successfully loaded '3rd_advent.blm'

bl_movie_load: successfully loaded '4th_advent.blm'

bl_movie_load: successfully loaded 'allyourbase.blm'

bl_movie_load: successfully loaded 'antiwar.blm'

...

weitere Software - Windows

copyleft - all rights reversed

https://blinkenarea.org/

- Blinkenleds Player

- BlinkenTool

- BlinkenPlayer Exxtreme

- Blinkensim VB

- PhoneSim

- Pong, Tetris, Snake

- jaLCDs

- ...

shutdown -h now

copyleft - all rights reversed

https://blinkenarea.org/

BlinkenArea

ein blinkender Vortrag zum Easterhegg 2004

2003-03-23T01:45:34