This is an old revision of the document!


Flipdot

Name:
Flipdot
Beschreibung:

Die Flipdotmatrix die uns zukam in Betrieb nehmen

Source:
https://github.com/muccc/flipdots
Lizenz:
--
Beteiligt:
sepi, jan, lilafisch, martin, krobin, fpletz
Termine:
termine
Statu:
api und protokoll definieren, mehr testen
Kategorie:
Hardware, Software
Verwandtes:
Display, Schaufenster

Howto

Beliebiges Bild an Wand schicken. Es wird automatisch skaliert. Schwarz-Weiß Bilder erzeugen bessere Ergebnisse.

nc 2001:7f0:3003:cafe:ba27:ebff:fe23:60d7 2323 < <file> 

Animiertes senden (noch sehr buggy):

#!/bin/bash
rm -rf ouput
mkdir output

convert $1 output/$1.png

for i in `ls -v output/*`
do
	nc 2001:7f0:3003:cafe:ba27:ebff:fe23:60d7 2323 < $i
	sleep 0.2
done

rm -rf output

Aktuelles

  • 2013-10-20:

IPs:

links 2001:7f0:3003:cafe:ba27:ebff:fe86:8697
mitte 2001:7f0:3003:cafe:ba27:ebff:fe23:60d7
rechts 2001:7f0:3003:cafe:ba27:ebff:fe71:dd32
  • 2013-10-19: fehlende Kanthölzer und zusätzlich Holzbretter (Holzbretter als Netzteil-Unterlage zum mit'rollen) wurden besorgt und Flipdotpanel für das linke Schaufenster wurde mit vielen Helfern fertiggestellt.
  • 2013-10-14: Holzspäne vom Vorkonstrukteur gekehrt!; alle Gewindestangen geflext, entgratet und gestapelt; Rollflipdotpanel in das linke Schaufenster gerollt; ein Kantholz gesägt und mit einem weiteren Flipdotpanel gebohrt und geschraubt; das dritte Flipdotpanel schräg dazu gestellt; 3x Kanthölzer werden vermisst bzw. nicht gefunden zum weiter machen; rest-Flipdotmaterial in eine Kiste gepackt; das Werkzeug vom Vorkonstrukteur!! und das eigene weggeräumt; den eigenen dreck wie Holzspäne gekehrt. Siehe:
  • 2013-09-30: Das 48×120 gross Display ist jetzt unter 2001:7f0:3003:cafe:ba27:ebff:fe71:dd32 zu erreichen. In eventuellen Skripten einfach die IP und groesse anpassen. Das Netzteil ist normalerweise aus und muss mit dem Netzkabel erst mit Strom versorgt werden. Der Treiber startet automatisch.
  • 2013-09-2x: Ein Netzteil, Treiberplatine und rpi wurden zusammengeschaltet. Ein schnell gehackter Treiber steuert alles an.
  • 2013-09-07: fpletz, argv und martin haben versucht den MAX7301 unter Linux zum Laufen zu bekommen
    • Kernel-Anpassungen nötig, daher erstmal Aufsetzen eines Cross-Build-Environments für RPi Kernel: elinux kernel compile guide
    • Wir nehmen als Basis raspberrypi/linux/rpi-3.11.y
      • Um den gpio-max7301 GPIO Device Treiber zu benutzen, muss man entweder Platform Code ändern/schreiben oder Device Table benutzen
        • Wir machen Platform Code, weil DT neuen Bootloader und damit mehr Fnord erfordert hätte Commit
      • Der RPi GPIO Treiber bcm2708_gpio ist kaputt, man kann nicht mehrere GPIO Devices haben…
      • TODO: Der RPi SPI Treiber spi-bcm2708 ist, diplomatisch ausgedrückt, unvollständig
        • Der MAX7301 kann eigentlich nur 16 Bit pro Word, testweise auf 8 Bit runter (wegen Schieberegister), aber Fail-Commit
        • Der BCM2708 kann erstmal nur 8 Bit pro Word, oder mehr wenn man DMA benutzt, der Treiber kann weder DMA noch mit anderen Wordsizes umgehen
    • Wir brauchen einen Logic Analyzer (es sollen diverse im Club sein, aber keinen gefunden), da total unklar ist was auf dem SPI Bus wirklich passiert
  • 2013-09-0x: jan hat Extension Boards für RaspberryPi mit MAX7301 per SPI gebastelt

Einführung

Wir haben 198 schwarze und 4 blaue Panels mit je 20×16 Pixeln

Bisher wurden nur die schwarzen verbaut.

Davon stecken insgesamt

  • 54 x in den drei großen Displays fürs Schaufenster
  • 2 x im Minidisplay Hauptraum

Unterwegs sind

  • 4 x bei den Ingolstädtern; designated!
  • 1 x bei Karsten (Student-Robotics-Student von lila)
  • 4 (oder 6?) x bei Flop
  • 6 x Hannover, Mcfly
  • 2 x Hamburg, Mcfly
  • 1 × datenwolf
  • 6 x Metalab Wien, overflo
  • 8 x Dortmund, Eimann
  • 3 x Karlsruhe
  • 3 x Darmstadt

Nomenklatur

Um dem Chaos ausnahmsweise entgegen- und nicht zu-zuwirken legen wir hier feste Worte für die einfachere Kommunikation fest!

  • Panel == 1 Object voll mit Dots; besteht aus: Dot-Matrix mit 16 Zeilen und 20 Spalten. Hat hinten noch die Treiberplatine dran.
    • FIXME: Sollte man nicht lieber 16 Spalten × 20 Zeilen verwenden? Dann entspräche eine Modulzeile einem 16 Bit Wort, was auch die interne Aufteilung von üblichen Framebuffern entspricht.
    • Treiberplatine == nimmt seriell Daten entgegen und gibt dieses Parallel auf die Dot-Matrix eines Moduls.
    • Panelzeile == horizontal aggregierte Ansammlung von Dots, typischerweise 20 Dots
    • Panelspalte == vertikal aggregierte Ansammlung von Dots, typischerweise 16 Dots
    • Der Ursprung ist oben links (wenn man von vorne draufschaut) und mit X0Y0 beschriftet
  • Assembly == Ein bis mehrere Panel sind zu einem größeren Aggregat zusammengebaut worden und haben eine gemeinsame Steuerungseinheit. Im Club stehen drei Assemblys im Schaufenster rum.
  • Display == Ein Display besteht aus einer bis mehreren Assemblies und ist für den Betrachter eine zusammenhängende Installation. Z.B. die drei Assemblies im Clubschaufenster, eine Assembly die aus einer “Zeile” panels besteht und im Clubhauptraum den ganzen Raum umrundet. Eine Einpanelassembly die nur den Clubstatus anzeigt.
  • Window == Ein Rechteckiger bereich in einem Display. Diese Bereiche können als Resource an verschiedene Teilnehmer vergeben werden die darauf schreiben dürfen.

ACHTUNG: Eventuell ist im Rest der Wikiseite alles vertauscht. Das sollte später gefixt werden!

Steuerplatine

  • 10 8-Stufe Schieberegister (80 bit) 74HC_HCT4094
    • Aufgeteilt in row + column register
  • Normalbetrieb am orginal-'Tafelrechner': 23V (24V?!), 0.2A → 0.5 Watt
  • Einmal komplettes Durchschieben: 1.6A fuer ca. 2 Sekunden → 74 Joule, 37 Watt
    • FIXME: Wo kommt die Zahl her, gilt das für ein Modul, also eine Steuerplatine?

Thx an x5444 von den Ingolstädern für das PIN-Layout!

Das row register ist 24px lang. (effektiv werden beim chainen noch 4px fnord mitgeschickt)
Das col register is 16px lang.

1 ?1 2 ?2
3 ROW_DATA 4 GND
5 STROBE 6 GND
7 ROW_OE 8 GND
9 COL_OE 10 GND
11 COL_CLOCK 12 GND
13 ROW_CLOCK 14 GND
15 COL_DATA 16 GND
17 DO 18 GND
19 ?2 20 GND

?1 == durchverbunden, kann man wohl am abschluss für nen rückkanal nutzen, so dass man die anzahl der segmente zählen kann
DO == Ausgang des zweiten nichtinvertierten Schieberegisters für die Spalten auf der input Seite bei Kaskadierung von Modulen
?2 == ind ein wenig komisch, die sind jeweils ein bestimmter pegel (hab ich grad nicht im kopf) sobald an einer der steuerplatinen in der kette die matrix die tatsächliche display-einheit verbunden ist

Schaufenster

Das Fenster ist ca. 210x215cm, die es zu füllen gilt. Damit braucht es dann 7×9, also 63 Panele.

[deprecated] Krobin und Sepi's Vorschlag

  • uC: ATMEGA162 (~3-5€ für 100, 1 Stück)
  • ethernet: ENC28J60 (~3€ ab 1 Stück)
  • ethernet buchse mit magnetics: ~2€ / Stück
  • Step-down converter LM2675-3.3: 2€ / 100 Stück oder 4€ einzeln
  • total/board min 11€
  • total: 200*11€ = 2200€

Da noch platinen hergestellt werden müssten und ethernetkabel

Jedes Modul bekommt einen Modulcontroller. Er ist mit einem AVR mit SPI bestückt. Desweiteren hat er einen ENC28J60 SPI Ethernet controller an Bord. Zusätzlich braucht die Platine noch diverse Widerstände, Kondensatoren, zwei Quarze, zwei Linearspannungsregeler, zwei Quarze und eine RJ45-Buchse mit Magnetics. Als Treiber für den Ethernet-MAC kommt https://code.google.com/p/enc28j60-avr/ zum Einsatz. Ein Modulkontroller sollte nicht mehr als 10€ kosten (Könnte schwierig werden).

Alle Module werden über eien Hub mit einem Raspberry PI oder anderem Linux Rechner verbunden. Auf dem Raspi läuft ein eigener Framebuffertreiber, der über Ethernet mit den Modulen spricht. Mehrere Framebuffer können konfiguriert werden und somit mehrere logische Flipdotanzeigen separat treiben. Multicast/Broadcast wäre auch möglich. Die MAC-Adressen der Module werden aus der Geometrie & einer Startadresse berechnet. Die Geometrie kann man bestimmt über Parameter bei der Framebufferinitialisierung konfigurieren.

Module bekommen ein ganzes Bild (16*20 = 320 Pixel ~ 40Byte) pro Ethernet frame übertragen. Man könnte auch eine Art Diff übertragen um höhere Framerates zu erlauben.

Framebuffer hat den Vorteil dass man sehr viel Inhalt dafür hat: Mplayer, X11, eigenes Zeug, Konsole, SDL, etc. Ethernet ist gut weil die Verkabelung einfach ist, weil man Switches benutzen kann, weil die Ansteuerung einfach ist, evenutell später auf UDP/IP umsteigen kann, es multicast und broadcast kann, es grosse Reichweiten hat, zuverlässig ist, einfach zu debuggen ist, standard ist.
AVR hat den Vorteil einer guten freien Toolchain, relative niedrigen Preises, genügender Performance.

  • Atmega core 4MHz@3V = 5mA
  • I/O Pin = max 40mA
  • ENC28J60 TX = 180mA
  • Total ~ 500mA

Also wären 1A@3.3V ganz nett

  • flipdot/start.1385812570.txt.gz
  • Last modified: 2021/04/18 12:32
  • (external edit)