|
|
(12 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) |
Zeile 4: |
Zeile 4: |
| Auf [http://goo.gl/maps/vSf0d Google Streetview] ist die Anzeige noch zu sehen. | | Auf [http://goo.gl/maps/vSf0d Google Streetview] ist die Anzeige noch zu sehen. |
| | | |
| + | * [http://www.youtube.com/watch?v=RxWxNWCN0fE Video: Flipdot Spectrum Analyzer] |
| * [http://www.youtube.com/watch?v=X2mXpYzDers Video: Raspberry Pi, USB-Kamera, Flipdot-Display] | | * [http://www.youtube.com/watch?v=X2mXpYzDers Video: Raspberry Pi, USB-Kamera, Flipdot-Display] |
| * [http://www.youtube.com/watch?v=Hcmmq02P28c Video von einem Test unseres Displays] | | * [http://www.youtube.com/watch?v=Hcmmq02P28c Video von einem Test unseres Displays] |
Zeile 93: |
Zeile 94: |
| | | |
| Für größere Installationen eignet sich vermutlich [http://www.amazon.de/dp/B00DQEGBHI dieses 10A-Netzteil]. Anschluss und sicherer Einbau sind dabei aber etwas komplizierter. | | Für größere Installationen eignet sich vermutlich [http://www.amazon.de/dp/B00DQEGBHI dieses 10A-Netzteil]. Anschluss und sicherer Einbau sind dabei aber etwas komplizierter. |
| + | |
| + | Aus dem Netzteil kann man dann gleich noch einen Raspberry Pi betreiben. Spannungswandler von 24V auf 5V gibts [http://www.ebay.de/itm/New-LM2596-Low-Ripple-DC-Converter-Step-Down-Power-Supply-In-4-40V-Out-1-5-35V-/160912296597 günstig] in China. Auf der Ausgangsseite ein halbes [http://www.amazon.de/dp/B003XOZQAY?m=A2MUPZSZIQER8Q USB-Verlängerungskabel] (mit A-Buchse) oder gleich einen Micro-USB-Stecker anlöten. |
| | | |
| | | |
Zeile 139: |
Zeile 142: |
| = Ansteuerung = | | = Ansteuerung = |
| == Logisch == | | == Logisch == |
− | [[File:Flipdotlogic5.png|thumb|400px|right|Flip Dot Ansteuerung]] | + | [[File:Flipdotlogic5.png|thumb|400px|right|Flip Dot Ansteuerung - Pixel X9,Y6 wird weiss, X14,Y6 schwarz]] |
| {| class="wikitable" style="text-align: center;" align="right" | | {| class="wikitable" style="text-align: center;" align="right" |
| |+ IN -> OUT | | |+ IN -> OUT |
Zeile 155: |
Zeile 158: |
| | 1 || 0 || 0 || 1 || style="text-align: left;" | Keine Änderung | | | 1 || 0 || 0 || 1 || style="text-align: left;" | Keine Änderung |
| |} | | |} |
| + | [[File:Flipdotlogic8.png|thumb|400px|right|Flip Dot Ansteuerung optimiert mit bis zu 8MHz Registertakt]] |
| # Zeilen im ROW Register auswählen | | # Zeilen im ROW Register auswählen |
| #* pro vertikalem Modul 16 Daten-Bits schieben | | #* pro vertikalem Modul 16 Daten-Bits schieben |
Zeile 187: |
Zeile 191: |
| * TODO: Display-Größe besser konfigurierbar machen. Z.Zt hartkodiert in flipdot.h | | * TODO: Display-Größe besser konfigurierbar machen. Z.Zt hartkodiert in flipdot.h |
| * TODO: GPIO-Zuordnung besser konfigurierbar machen. Z.Zt hartkodiert in flipdot.h | | * TODO: GPIO-Zuordnung besser konfigurierbar machen. Z.Zt hartkodiert in flipdot.h |
| + | |
| + | |
| + | ====Uhr==== |
| + | <pre> |
| + | #!/bin/bash |
| + | |
| + | trap "sudo flipoff" EXIT |
| + | |
| + | { |
| + | export TZ=Europe/Berlin |
| + | new="" |
| + | old="" |
| + | while :; do |
| + | new=`date "+%M"` |
| + | if [ "$new" != "$old" ]; then |
| + | echo |
| + | date "+%d.%m.%Y %H:%M"|toilet -f 3x5 -w 40 |
| + | echo |
| + | old=$new |
| + | date >&2 |
| + | fi |
| + | sleep 1 |
| + | done |
| + | } |sudo flip_pipe |
| + | </pre> |
| | | |
| | | |
Zeile 208: |
Zeile 237: |
| | | |
| | | |
| + | ====Flipdot Camera==== |
| + | vlc -V flipdot --no-audio v4l2:///dev/video0:width=40:height=16:chroma=GREY:fps=25 --video-filter "adjust{brightness=1.25,brightness-threshold}" |
| + | |
| + | |
| + | ====Lava Lamp==== |
| + | vlc -V flipdot --no-audio --play-and-exit --video-filter "adjust{brightness=1.22,brightness-threshold}" "[http://www.youtube.com/watch?v=nv74T-BybTo HD Green_Yellow Lava Lamp - 10 Minutes-nv74T-BybTo.3gp]" |
| + | |
| + | |
| + | ====FlipArray==== |
| Ein Raspberry Pi sollte ein 3x3 Feld noch mit 25fps ansteuern können. Zusammenschalten mehrerer Pis durch --netsync.<br> | | Ein Raspberry Pi sollte ein 3x3 Feld noch mit 25fps ansteuern können. Zusammenschalten mehrerer Pis durch --netsync.<br> |
| Beispiel für 4 Pis mit je 4x4 Modulen: | | Beispiel für 4 Pis mit je 4x4 Modulen: |
| | | |
| Ggf. auf schnellerem Gerät skalieren und auf schwarz/weiss transcoden: | | Ggf. auf schnellerem Gerät skalieren und auf schwarz/weiss transcoden: |
− | rvlc -L $file --sout '#transcode{width=160,height=128,vfilter=adjust{brightness=1.23,brightness-threshold},deinterlace,fps=25,vcodec=h264,venc=x264{preset=faster,profile=main}}:std{access=udp,dst=239.255.1.2,mux=ts}' | + | rvlc -L $file --sout '#transcode{width=160,height=128,vfilter=adjust{brightness=1.23,brightness-threshold},deinterlace,\ |
| + | fps=25,vcodec=h264,venc=x264{preset=faster,profile=main}}:std{access=udp,dst=239.255.1.2,mux=ts}' |
| | | |
| Pi 10.0.0.1 links oben als netsync-master: | | Pi 10.0.0.1 links oben als netsync-master: |
Zeile 255: |
Zeile 294: |
| * Flipdot-Library-Wrapper für Python et. al. bauen. GUI Galore! | | * Flipdot-Library-Wrapper für Python et. al. bauen. GUI Galore! |
| * netfbd angucken. Linux-Konsole auf Flipdot! | | * netfbd angucken. Linux-Konsole auf Flipdot! |
| + | |
| + | [[Category:Projekt]] |
Aktuelle Version vom 9. Januar 2015, 08:01 Uhr
Flipdot
Wir haben ein Flip Dot Modul mit 20x16 schwarz/weissen Pixeln aus den Beständen des CCC München.
Die Displays stammen von der Parkplatzanzeige der Allianzarena auf der A9 bei München, in der 198 dieser Module zu einer großen Anzeigefläche verbunden waren.
Auf Google Streetview ist die Anzeige noch zu sehen.
Aufbau
Matrix
Flip Dot Matrix Schaltung
Rückseite mit Doppeldioden
Die Flip Dot Matrix besteht aus jeweils einer Spule pro Pixel, die über einen gemeinsamen Eingang pro Zeile und zwei Eingänge pro Spalte geschaltet werden. Je nach Polung dreht sich das mit einem Dauermagneten versehene Plättchen zur einen oder anderen Seite. Wenn Xn auf High und Cn gleichzeitig auf Low geschaltet werden, gibt es einen Kurzschluss in der Spalte. Das Display nimmt nur zum Umschalten der Pixel Strom auf, nicht aber im Ruhezustand.
Pinbelegung Pfostenleiste auf der Rückseite der Flip Dot Matrix
|
32 |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1
|
ST1
|
N1 |
N2 |
? |
? |
Y14 |
Y12 |
Y10 |
Y8 |
Y6 |
Y4 |
Y2 |
Y0 |
C19 |
C18 |
C17 |
C16 |
C15 |
C14 |
C13 |
C12 |
C11 |
C10 |
C9 |
C8 |
C7 |
C6 |
C5 |
C4 |
C3 |
C2 |
C1 |
C0
|
ST2
|
N3 |
? |
? |
? |
Y15 |
Y13 |
Y11 |
Y9 |
Y7 |
Y5 |
Y3 |
Y1 |
X19 |
X18 |
X17 |
X16 |
X15 |
X14 |
X13 |
X12 |
X11 |
X10 |
X9 |
X8 |
X7 |
X6 |
X5 |
X4 |
X3 |
X2 |
X1 |
X0
|
N1,2,3: Verbunden
Schaltzustände der Flip Dot Matrix
Xn |
Cn |
Yn |
|
Z/L |
L |
H |
Flip
|
H |
Z/H |
L |
Flop
|
H |
L |
* |
Kurzschluss
|
Die linke obere Ecke eines Moduls ist auf der Rückseite mit "X0 / Y0" markiert.
An unserem Display ist Pixel X15/Y15 defekt. Wir haben den Fehler noch nicht näher analysiert. Eventuell lässt es sich wiederbeleben. An Pixel X19/Y5 ist ein Teil des Plastiklagers abgebrochen und das Plättchen fehlt.
Treiberplatine
Flip Dot Treiberplatine mit identifizierten ICs
Flip Dot Treiberplatine Rückseite
In unserem Display wird die 20x16 Matrix über zwei Schieberegister und eine Reihe von Transistoren auf der Treiberplatine gesteuert.
Das eine Schieberegister (ROW) ist je Modul 16 Bit lang und selektiert die Zeilen, in denen geschaltet werden soll. Das zweite Register (COL) enthält 24 Bit pro Modul und gibt den X-Zustand in den ausgewählten Zeilen vor. Die Strobe-Eingänge beider Register sind verbunden. Die Daten werden in einem zweiten Registersatz gespiegelt und steuern die H-Brücken für die Pixel an.
Bei einem Zusammenschluss mehrerer Module werden die Spaltenregister horizontal hintereinander geschaltet und die Zeilenregister vertikal.
Aufgrund der Zahl von 20 Pixeln pro Modulzeile endet bei einer ungeraden Anzahl an horizontalen Modulen eine Zeile nicht auf vollen Bytes. Das Spaltenregister enthält pro Modul 4 ungenutzte Bits, die beim Durchschieben berücksichtigt werden müssen.
Bauteile auf der Platine u.a:
- L7805CV (5V Spannungsregler) (7.5V - 35V MAX, 1.5A)
- versorgt die ICs
- eingangsseitig abgesichert mit 160mA Micro Fuse (sieht ähnlich aus)
- 2x 74HC08D (Quad 2-input AND gate) (= 8x 2-input AND)
- jeweils AND von Eingangssignal und VCC (Ausnahme: OE0 / OE1)
- Signalregenerierung zum Ausgleich der 1kΩ Widerstände am Eingang
- 10x 74HC4094 (8-stage shift register) (= 80 Bit)
- 2x ROW und 3x COL pro Registersatz
- der zweite Registersatz wird parallel befüllt
- Daten im 2. COL-Register werden invertiert
- OE0 und OE1 schalten die Output Enable jeweils eines Registersatzes
- XOR verhindert Kurzschluss durch gleichzeitiges Einschalten beider OE
- 6x ULN2003A (7x Darlington Array) (= 42x Darlington)
- zwischen Schieberegistern und P-MOSFETs
- 36x MTP2955E (P-Channel MOSFET)
- 36x MTD3055EL (N-Channel MOSFET)
- 74HC02 (Quad 2-input NOR gate) (= 4x 2-input NOR)
- 74HC14 (Hex Schmitt-Trigger Inverter) (= 6x Inverter)
- 74HC74 (Dual D-Type Flip-Flop) (= 2x Flip-Flop)
- 1Ω(?) (zwischen V+ und P-MOSFETs)
- Schmelzsicherung 2.5A
Anschluss
Stromversorgung
Das Display wird mit 24V DC betrieben. Wir haben ein passendes 3A-Netzteil bei Reichelt besorgt. Ans Display angeschlossen wird es über diese praktische Buchse. Parallel dazu wird noch ein 2200µF Elko geklemmt. Getestet mit zwei horizontal geschalteten Modulen.
Für größere Installationen eignet sich vermutlich dieses 10A-Netzteil. Anschluss und sicherer Einbau sind dabei aber etwas komplizierter.
Aus dem Netzteil kann man dann gleich noch einen Raspberry Pi betreiben. Spannungswandler von 24V auf 5V gibts günstig in China. Auf der Ausgangsseite ein halbes USB-Verlängerungskabel (mit A-Buchse) oder gleich einen Micro-USB-Stecker anlöten.
Daten
Pinbelegung am Flachbandstecker
1 |
Durchgeschleift |
11 |
GND
|
2 |
COL Data |
12 |
GND
|
3 |
Strobe |
13 |
GND
|
4 |
OE0 |
14 |
GND
|
5 |
OE1 |
15 |
GND
|
6 |
ROW Clock |
16 |
GND
|
7 |
COL Clock |
17 |
GND
|
8 |
ROW Data |
18 |
GND
|
9 |
ROW DO |
19 |
GND
|
10 |
NB |
20 |
NA
|
Achtung: ROW DO führt 5V Level!
NA: Wird durch Darlington auf Masse gezogen wenn N1 == H
NB: Wird durch Darlington auf Masse gezogen wenn N2 == H
Horizontale Kaskadierung
- Flachbandstecker des rechten Moduls auf die Buchse des linken Moduls stecken
Vertikale Kaskadierung
- ROW Data des unteren Moduls mit ROW DO des oberen Moduls verbinden
- Alle anderen Signale des unteren Moduls mit dem oberen Modul parallel schalten
Ansteuerung
Logisch
Flip Dot Ansteuerung - Pixel X9,Y6 wird weiss, X14,Y6 schwarz
IN -> OUT
ROWn |
COLn |
OE0 |
OE1 |
Pixel
|
0 |
* |
* |
* |
Keine Änderung
|
1 |
1 |
1 |
0 |
Keine Änderung
|
1 |
0 |
1 |
0 |
Flip (weiss)
|
1 |
1 |
0 |
1 |
Flop (schwarz)
|
1 |
0 |
0 |
1 |
Keine Änderung
|
Flip Dot Ansteuerung optimiert mit bis zu 8MHz Registertakt
- Zeilen im ROW Register auswählen
- pro vertikalem Modul 16 Daten-Bits schieben
- es können mehrere Zeilen gleichzeitig mit den gleichen Pixeldaten beschaltet werden. Dabei den Strom pro Modul und Stromversorgung beachten!
- COL Register mit Daten füllen
- pro horizontalem Modul zuerst 4 Dummy-Bits, dann 20 Daten-Bits schieben
- STROBE kurz auslösen (>25ns)
- OEx kurz auslösen (>500µs)
- OE0 flippt die 0-Bits in COL zur weissen Seite
- OE1 flippt die 1-Bits zur schwarzen Seite
- OEx wieder abschalten! Ggf. OE-Puls gegen Abbruch durch SIGTERM/SIGKILL u.ä. sichern
Jedes gleichzeitig geschaltete Pixel erhöht die Stromspitze. Bei geringerer Framerate kann man evtl. Pixel nacheinander ändern.
Software
libFlipdot
Der Hardware-Layer für Raspberry Pi funktioniert:
https://github.com/lampeh/libflipdot
Mit der Library lassen sich Bitmaps auf dem Display wiedergeben. Dabei werden nur die wirklich veränderten Pixel angesteuert. Eine Beschreibung der Funktionen findet sich im README.
Mit dem Beispiel "flip_pipe" können auch einfache ASCII-Bitmaps verwendet werden, wie z.B. die Ausgabe von figlet:
while :; do date "+%s" |toilet -f ./3x5.flf -w $DISP_COLS; echo; sleep 1; done |sudo ./examples/flip_pipe
- beliebige H * V Modulanordnung
- sollte durch Austauschen der _hw_*() Funktionen auch für andere Hardware mit GPIOs verwendbar sein
- Bitmap: Pixel-Array ohne Gap zwischen horizontalen Modulen
- Frame: Pixel-Array mit Gap
- die bcm2835-Library braucht root für mmap() der GPIO-Register in /dev/mem
- Codequalität verbesserungswürdig: globale #defines, langsame Bit-Copies, ...
- TODO: Display-Größe besser konfigurierbar machen. Z.Zt hartkodiert in flipdot.h
- TODO: GPIO-Zuordnung besser konfigurierbar machen. Z.Zt hartkodiert in flipdot.h
Uhr
#!/bin/bash
trap "sudo flipoff" EXIT
{
export TZ=Europe/Berlin
new=""
old=""
while :; do
new=`date "+%M"`
if [ "$new" != "$old" ]; then
echo
date "+%d.%m.%Y %H:%M"|toilet -f 3x5 -w 40
echo
old=$new
date >&2
fi
sleep 1
done
} |sudo flip_pipe
vlc-plugin
Das Video-Output-Plugin für vlc funktioniert:
https://github.com/lampeh/libflipdot/tree/master/vlc
- vlc -V flipdot
- funktioniert auch für Visualizer-Windows u.ä.
- für FFT ist der Pi leider zu langsam :(
- skaliert automatisch auf die Display-Größe
- schwarz/weiss Schwellwert einstellbar mit "adjust" Modul
- --video-filter "adjust{brightness=1.3,brightness-threshold}"
- TODO: Hardware-Konfiguration hartkodiert in libFlipdot. siehe dort
- Plugin-Konfiguration für Displaygröße, Schwellwert-Default
- TODO: "vlc läuft nicht als root" vs "root-Rechte für bcm2835"
- TODO: Funktioniert flipdot output zusammen mit dem HW-Decoder?
Flipdot Camera
vlc -V flipdot --no-audio v4l2:///dev/video0:width=40:height=16:chroma=GREY:fps=25 --video-filter "adjust{brightness=1.25,brightness-threshold}"
Lava Lamp
vlc -V flipdot --no-audio --play-and-exit --video-filter "adjust{brightness=1.22,brightness-threshold}" "HD Green_Yellow Lava Lamp - 10 Minutes-nv74T-BybTo.3gp"
FlipArray
Ein Raspberry Pi sollte ein 3x3 Feld noch mit 25fps ansteuern können. Zusammenschalten mehrerer Pis durch --netsync.
Beispiel für 4 Pis mit je 4x4 Modulen:
Ggf. auf schnellerem Gerät skalieren und auf schwarz/weiss transcoden:
rvlc -L $file --sout '#transcode{width=160,height=128,vfilter=adjust{brightness=1.23,brightness-threshold},deinterlace,\
fps=25,vcodec=h264,venc=x264{preset=faster,profile=main}}:std{access=udp,dst=239.255.1.2,mux=ts}'
Pi 10.0.0.1 links oben als netsync-master:
rvlc -V flipdot --no-audio --control netsync --netsync-master --video-filter "croppadd{cropbottom=64,cropright=80}" udp://@239.255.1.2:1234
Pi 10.0.0.2 rechts oben:
rvlc -V flipdot --no-audio --control netsync --netsync-master-ip 10.0.0.1 --video-filter "croppadd{cropbottom=64,cropleft=80}" udp://@239.255.1.2:1234
Pi 10.0.0.3 links unten:
rvlc -V flipdot --no-audio --control netsync --netsync-master-ip 10.0.0.1 --video-filter "croppadd{croptop=64,cropright=80}" udp://@239.255.1.2:1234
Pi 10.0.0.4 rechts unten:
rvlc -V flipdot --no-audio --control netsync --netsync-master-ip 10.0.0.1 --video-filter "croppadd{croptop=64,cropleft=80}" udp://@239.255.1.2:1234
Code
Unklar / TODO
Hardware
- Was ist das unbekannte SOT23-3 Bauteil zwischen Shunt und Flip-Flop? PNP-Transistor würde Sinn machen. Bei Kurzschluss/Überstrom werden durch das Flip-Flop die OE-Signale gesperrt und können erst durch STROBE-Impuls wieder freigegeben werden
- Wie funktioniert die Schaltung mit N*?
- mit Pull-Ups an N1,2 würde es evtl. Sinn machen, um eine gelockerte oder fehlende Matrix im Display zu erkennen
- QS1 == L, STROBE == L -> N0 = H -> N3 wird gegen Masse gezogen und zieht bei richtig angeschlossener Matrix N1,2 mit
- Wenn eine Matrix im Feld nicht richtig sitzt, bleibt mindestens ein N1,2 auf H -> NA,B werden gegen Masse gezogen
- Open-collector bus
- Keine Pull-Ups auf der Platine gefunden
- Kann man damit die Module zählen?
- Wie hoch ist der Strom beim Umschalten einer Zeile wirklich? Die Analognadel am Labornetzteil ist zu träge
- DC-Widerstand einer Spule messen
- Rauchmelder installieren ;)
- Evtl. 1-Wire DS18B20 an jede Treiberplatine kleben, über Pin 1 verbinden und mit dem Raspberry Pi abfragen
Software
- manchmal flippt ein Flipper nicht so, wie er soll. Warum?
- Plättchen bleibt in der Mitte stehen: Zu schnell, zu kurz geflippt
- Plättchen bleibt auf einer Seite hängen: Magneto-Fnord, Degaussing durch schnelles Flippen
- Flipdot-Library-Wrapper für Python et. al. bauen. GUI Galore!
- netfbd angucken. Linux-Konsole auf Flipdot!