Difference between revisions of "Flipdot"

From RevSpace
Jump to navigation Jump to search
(Controller)
m
 
(11 intermediate revisions by 2 users not shown)
Line 20: Line 20:
 
* https://c-hack.de/projekte/abgeschlossen/flipdot-hack/
 
* https://c-hack.de/projekte/abgeschlossen/flipdot-hack/
 
* https://www.fingers-welt.de/wiki/index.php?title=FlipDot
 
* https://www.fingers-welt.de/wiki/index.php?title=FlipDot
 +
* https://reaktor23.org/projects/flipdot/
 +
 +
[https://reaktor23.org/projects/flipdot/fp2800-datasheet.pdf FP2800 datasheet]
  
 
== 50-pin connector ==
 
== 50-pin connector ==
Line 29: Line 32:
 
[https://github.com/entropia/flipdot This software] drives a pixel like this:
 
[https://github.com/entropia/flipdot This software] drives a pixel like this:
 
* select a row by making one ROW signal high: choose ROW_H_x if you want to set a pixel, or ROW_L_x if you want to clear a pixel. The rest of the ROW_H/ROW_L lines are made low.
 
* select a row by making one ROW signal high: choose ROW_H_x if you want to set a pixel, or ROW_L_x if you want to clear a pixel. The rest of the ROW_H/ROW_L lines are made low.
* select a column through the COL_ADDR_x pins. The encoding is a bit tricky: a panel of 28 pixels wide has 4 groups of 7 columns each. Pins COL_ADDR_A3/A4 control which group to select, pins COL_ADDR_A0-A2 select a column within the group.
+
* select a column through the COL_ADDR_x pins. The encoding is a bit tricky: a panel of 28 pixels wide has 4 groups of 7 columns each. Pins COL_ADDR_A3/A4 control which group to select, pins COL_ADDR_A0-A2 select (column+1) within the group.
 
* the polarity of the pixel (set/clear) is encoded on the DATA line
 
* the polarity of the pixel (set/clear) is encoded on the DATA line
 
* a strobe (pulse) is sent to one of the panels by toggling one of the Ex lines high then low, to actually update the pixel
 
* a strobe (pulse) is sent to one of the panels by toggling one of the Ex lines high then low, to actually update the pixel
Line 35: Line 38:
 
It appears that the ROW_H_x/ROW_L_x signals are driven directly at high voltage (18V or so) from the control board, while the COL_ADDR_x signals are at logic level.
 
It appears that the ROW_H_x/ROW_L_x signals are driven directly at high voltage (18V or so) from the control board, while the COL_ADDR_x signals are at logic level.
 
The FP2800 on the back of each flipdot panel then takes these logic-level signals and turns them into high-voltage (18V or so) column signals.
 
The FP2800 on the back of each flipdot panel then takes these logic-level signals and turns them into high-voltage (18V or so) column signals.
 +
 +
Probably we can update an entire column at a time, by making several ROW_H_y/ROW_H_y signals high at the same time. Not sure if it is possible to both set and clear pixels in one go, or if it needs two passes: one to set pixels and another to clear pixels.
 +
 +
== Driving a pixel ==
 +
[[File:pixel_wiring.png|200px|How individual pixels are wired in a flipdot display (from: Reaktor23 web page)]]
 +
 +
The image above shows an example of how 4 pixels are wired with respect to the ROW_H, ROW_L and column signals.
 +
 +
The logic table describes what happens for combinations of ROW_L(reset), COL and ROW_L(set):
 +
 +
{| class="wikitable"
 +
! ROW_L !! COL !! ROW_H !! What happens
 +
|-
 +
| 0 || 0 || 0 || -
 +
|-
 +
| 0 || 0 || 1 || short-circuit from ROW_H to ROW_L!
 +
|-
 +
| 0 || 1 || 0 || current goes right from COL to ROW_L
 +
|-
 +
| 0 || 1 || 1 || short-circuit from ROW_H to ROW_L!
 +
|-
 +
| 1 || 0 || 0 || - (lower diode blocks)
 +
|-
 +
| 1 || 0 || 1 || current goes left from ROW_H to COL
 +
|-
 +
| 1 || 1 || 0 || - (upper diode blocks)
 +
|-
 +
| 1 || 1 || 1 || -
 +
|}
 +
 +
* we should avoid the short-circuit combinations, where ROW_L is low and ROW_H is high
  
 
=Serial werkend krijgen=
 
=Serial werkend krijgen=
Line 72: Line 106:
  
 
[[File:B1mDBTYNSmOXexG3iw9wKw.jpg|200px]]
 
[[File:B1mDBTYNSmOXexG3iw9wKw.jpg|200px]]
 +
 +
=Characters=
 +
 +
Er zijn diverse characters weer te geven, niet allemaal even logisch.
 +
 +
De characters die leuk worden weergegeven zijn onder andere: "!@#%^&*()_+"
  
 
=Foto's=
 
=Foto's=
 
[[File:41EDFE20-B18A-4F13-89EB-838BC4CF7F17.jpg|200px]] [[File:E0270E068FF3.jpg|200px]]
 
[[File:41EDFE20-B18A-4F13-89EB-838BC4CF7F17.jpg|200px]] [[File:E0270E068FF3.jpg|200px]]

Latest revision as of 22:12, 21 May 2019

Project FlipDot
SGoKHyK6TbG5VyLyKMMVBg.jpg
Status In progress
Contact User:Sebastius
Last Update 2019-05-21

Status

Het bord hangt aan de muur! Te bereiken via MQTT op topic revspace/flipdot

Controller

Schema

Project op github waarbij een LAWO display wordt aangestuurd door een STM32, met daarin o.a. een pinout van de 50-pins connector met zinnige namen, als ROW_H_0..15, ROW_L_0..15, COL_ADDR_1..4.

Dimensions: 84x16 pixels, distributed over 3 panels of 28x16 pixels each. Each panel has an FP2800 column driver chip.

Interesting links:

FP2800 datasheet

50-pin connector

the 50-pin connector

There is a 50-wire cable going from the control board to the actual flipdot-boards. The image on the left shows the pinout of the connector.

This software drives a pixel like this:

  • select a row by making one ROW signal high: choose ROW_H_x if you want to set a pixel, or ROW_L_x if you want to clear a pixel. The rest of the ROW_H/ROW_L lines are made low.
  • select a column through the COL_ADDR_x pins. The encoding is a bit tricky: a panel of 28 pixels wide has 4 groups of 7 columns each. Pins COL_ADDR_A3/A4 control which group to select, pins COL_ADDR_A0-A2 select (column+1) within the group.
  • the polarity of the pixel (set/clear) is encoded on the DATA line
  • a strobe (pulse) is sent to one of the panels by toggling one of the Ex lines high then low, to actually update the pixel

It appears that the ROW_H_x/ROW_L_x signals are driven directly at high voltage (18V or so) from the control board, while the COL_ADDR_x signals are at logic level. The FP2800 on the back of each flipdot panel then takes these logic-level signals and turns them into high-voltage (18V or so) column signals.

Probably we can update an entire column at a time, by making several ROW_H_y/ROW_H_y signals high at the same time. Not sure if it is possible to both set and clear pixels in one go, or if it needs two passes: one to set pixels and another to clear pixels.

Driving a pixel

How individual pixels are wired in a flipdot display (from: Reaktor23 web page)

The image above shows an example of how 4 pixels are wired with respect to the ROW_H, ROW_L and column signals.

The logic table describes what happens for combinations of ROW_L(reset), COL and ROW_L(set):

ROW_L COL ROW_H What happens
0 0 0 -
0 0 1 short-circuit from ROW_H to ROW_L!
0 1 0 current goes right from COL to ROW_L
0 1 1 short-circuit from ROW_H to ROW_L!
1 0 0 - (lower diode blocks)
1 0 1 current goes left from ROW_H to COL
1 1 0 - (upper diode blocks)
1 1 1 -
  • we should avoid the short-circuit combinations, where ROW_L is low and ROW_H is high

Serial werkend krijgen

0381C9273B09.jpg

Pin 2 en 3 van de 74HC14 loshalen. Daarna werken de RX en TX pins op het bord met een USB-Serial TTL. GND niet vergeten...

1200Baud, 7E2 (7 bits, Even Parity, 2 Stop bits)

stty -f /dev/ttyUSB0 1200 cs7 parenb -parodd cstopb

STTY blinkt niet uit in duidelijke parameters...

Code

Met dank aan Juerd:

#!/usr/bin/perl -w
use strict;
use autodie;
open my $fh, ">/dev/ttyUSB0";

my $bla = "regel 1\nregel 2";

my $output = "aA11000\n$bla\n\n\r";

my $xor = 0x7f;
$xor ^= ord for split //, $output;

$output .= chr $xor;
syswrite($fh, $output);

MQTT ESP

VDPxDd7bR3mCYU7mlO1W6w.jpg

Een NodeMCU hangt aan de serial. Code geschreven in Arduino. Er is een beter printje in bestelling om het netter op te lossen. De secundaire TX pin van de NodeMCU wordt gebruikt (GPIO 15) zodat bij een boot/reboot van de ESP het bord er geen last van heeft.

Reparatie

1 IC socket was verteerd door batterijschade. Ook de 4072 vervangen. Kloppen op het IC leverde een reboot namelijk.

B1mDBTYNSmOXexG3iw9wKw.jpg

Characters

Er zijn diverse characters weer te geven, niet allemaal even logisch.

De characters die leuk worden weergegeven zijn onder andere: "!@#%^&*()_+"

Foto's

41EDFE20-B18A-4F13-89EB-838BC4CF7F17.jpg E0270E068FF3.jpg