Flippie
Generic FP2800A/BROSE based FlipDot display controller board using ESP8266 WiFi chip
Install / Use
/learn @545ch4/FlippieREADME
flippie

Basic idea and some background
Usual story: no money, lots of deadlines, unsustainable promises, social responsibility, no time at all, but the unique opportunity to get an additional time-sink. Yeah. Seconds later, I got two huge flip-dot displays I couldn't even carry myself and a lot of single modules. Soon (measured in seasons) it became obvious, that reverse engineering the RS485 based IBIS bus would not make me very happy in the long run. So I decided to throw away the original controller board and drive the flip-dot modules myself. The goal would be a non intrusive board to directly connect any BROSE display (or array of the same) through the proprietary 60-pin connector... So, this is the story of that effort...
Flip-dot display in general
A flip-dot display consists of a grid of small magnet embedded discs that are black on one side and a bright color on the other (typically white or yellow). The discs are attached to an axle with separate solenoids arranged at the ends or side. By pulsing the solenoid coil with the appropriate electrical polarity, the permanent magnet on the discs align itself with the magnetic field and thus turning (flipping) the disc.
The matrix schematic arranged on a two-dimensional area is shown below.
<img src="https://github.com/545ch4/flippie/raw/master/board/docs/flipdot.png" alt="flip-dot solenoid schematic" title="flip-dot solenoid schematic" width="400px" />BROSE flip-dot
Most BROSE flip-dots are equipped with an origial FP2800A (or clone) decoder driver as column-selector. It drives one line addressed by 5-bits (A0, A1, A2, B1 and B2) in the direction of D (GND or +VS). Based on the truth-table, 28 independent column-lines can be driven.
The address lines (ADDR1..ADDR8) are compared to an DIP-switch on each module using a 74HCT688. The output of that comparison drives the ENABLE pin of the FP2800A (through a discrete inverter).
All data and address lines are at 24V logic level. The VS line should be current limited to 350-400 mA, because the coils and/or the FP2800A may blow at higher current.
I did a reverse engineering of the 24V logic at the BROSE display just for illustration. Download as PDF or Eagle SCH.
BROSE 60-pin connector

flippie board
The board was designed to drive every serial assembly of modules or single ones non-intrusively - without soldering or modifying the module(s) - simply by connection the proprietary 60-pin BROSE connector. The main MCU ESP8266 is mounted on a USB-interfaced USB-to-Serial converter for convenient programming and WiFi on board. Please see wemos D1 mini documentation. Usually you need some driver for the converter to be detected as serial port depending on your OS. The wemos D1 mini comes with a Jiangsu Qinheng CH340/CH341/CH34X or Silicon Labs CP210x chip.
Block diagram

Schematics
Since this is my first PCB, the schematic may be slightly unusual. But it works... Suggestions are very welcome. Get the Eagle SCH file or see the PDF file.
Layout

Download the Eagle BRD file and/or the generated GERBER files as ZIP archive. All design rules are taken from SparkFuns Extended Gerber Format.
BOM
| Part | Value | Device | Package | Description | |------|------------|---------------|---------------|-------------| | Part Value | Device | Package | Description | | C1 | 100uF/50V | CPOL-EU_E | PANASONIC_E | Polarized capacitor, 50V | | C2 | 10uF/50V | C-EU_C1206 | C1206 | X7R Ceramic Capacitor, 50V | | C3 | 1uF/50V | C-EU_C1206 | C1206 | X7R Ceramic Capacitor, 50V | | IC1 | 74HCT245DW | 74HCT245DW | SO20W | Octal BUS TRANSCEIVER, 3-state, TTL/CMOS | | IC2 | FPF2702MX | FPF2700 | SO8N | AccuPower 0.4~2 A Adjustable Over-Current Protection Load Switch | | IC3 | SN74AHC595D | SN74AHC595D | SO16N | 8 bit Shift registers | | ... | ... | ... | ... | ... | | IC9 | SN74AHC595D | SN74AHC595D | SO16N | 8 bit Shift registers | | IC10 | TD62783AFG | UDN2981LW | SO18W | PMOS Darlington transistor array | | IC11 | TD62783AFG | UDN2981LW | SO18W | PMOS Darlington transistor array | | IC12 | TD62783AFG | UDN2981LW | SO18W | PMOS Darlington transistor array | | IC13 | ULN2803A | ULN2803ADW | SO18W | NMOS Darlington transistor array | | ... | ... | ... | ... | ... | | IC17 | ULN2803A | ULN2803ADW | SO18W | NMOS Darlington transistor array | | JP1 | 3V3 | JP1E | JP1 | 3.3V Rail Jumper | | JP2 | 24V | JP1E | JP1 | 24V Rail Jumper | | JP3 | 5V | JP1E | JP1 | 5V(VCC) Rail Jumper | | JP4 | VS | JP1E | JP1 | 24V(VS) Jumper | | LED1 C (red) | LED_SMT1206 | 1206 | LED | | LED2 B (yellow) | LED_SMT1206 | 1206 | LED | | LED3 A (green) | LED_SMT1206 | 1206 | LED | | MCU1 | WEMOS D1 mini | WEMOS D1 mini | WEMOS D1 mini MCU | | PAD1 (24V) | 2,15/1,0 | 2,15/1,0 | THROUGH-HOLE PAD | | PAD2 (VS) | 2,15/1,0 | 2,15/1,0 | THROUGH-HOLE PAD | | R1 | 680K | R-EU_R1206 | R1206 | Current limiter Resistor R_set | | R2 | 100K | R-EU_R1206 | R1206 | Resistor | | R3 | 10K | R-EU_R1206 | R1206 | Resistor | | R4 | 10K | R-EU_R1206 | R1206 | Resistor | | R5 | 10K | R-EU_R1206 | R1206 | Resistor | | R6 | 220 | R-EU_R1206 | R1206 | Resistor | | R7 | 220 | R-EU_R1206 | R1206 | Resistor | | R8 | 220 | R-EU_R1206 | R1206 | Resistor | | X1 | 3V3 | JST-XH-02 | JST-XH-02-PACKAGE-LONG-PAD | JST XH Connector 2 Pin | | X2 | 5V | JST-XH-02 | JST-XH-02-PACKAGE-LONG-PAD | JST XH Connector 2 Pin | | X3 | 24V | JST-XH-02 | JST-XH-02-PACKAGE-LONG-PAD | JST XH Connector 2 Pin | | X4 | ~EN_PWR | JST-XH-02 | JST-XH-02-PACKAGE-LONG-PAD | JST XH Connector 2 Pin | | X5 | BROSE-60-POL | 057-060-1 | 057-060-1 | 60-pol. BROSE CONNECTOR |
Soldering notes
You can override the whole current limit circuit by shorting/bridging PAD1 (24V) and PAD2 (VS). If you decided to do so, you don't need to populate C1, C2, C3, R1, R2 and IC2.
Close JP1 (3V3) and JP2 (24V) but not JP4 (VS) yet.
Code
Prerequisites
Since building and maintaining an ESP8266 toolchain using the Arduino ESP8266 Framework can be rather frustrating, I decided to use PlatformIO with this project.
- Download PlatformIO and install
- Launch and follow on-screen instructions (install Python-2.7 if necessary)
- Install Clang/LLVM
- Ensure
platformio-ideandplatformio-ide-terminalare enabled ("Settings > Packages")
Open the project
Download or clone this repository. Open the directory ./code/server using "Open project" at PlatformIO IDE.
Necessary adoptions
Review you flip-dot addresses: ADDR8 (8 on the DIP-switch) must be in ON state. We are emulating an overall-enable-pin with that one. Further, the addresses are inverted. So, address 0x01 matches the DIP-switch configuration 1-OFF, 2-ON, ..., 7-ON an 8-ON.
Before you compile and upload your custom firmware to the ESP8266, there are some values specific to your setup/environment to be defined.
Flip-dot configuration at code/server/flippie_device.cpp:
// TODO: How many modules does your display consists of?
const unsigned int num_modules = 4;
config.num_modules = num_modules;
// TODO: What are the addresses (as decimal) of the modules? (see DIP-switches at each module)
config.addresses = new unsigned int[num_modules]{1, 2, 4, 8};
// TODO: How many rows does your display have? (equal over all modules)
config.num_rows = 18;
// TODO: How many columns does each module of your display have? (same order as the addresses)
config.num_columns = new unsigned int[num_modules]{28, 28, 28, 21};
// TODO: Should LED C toggle on each shift-register firing?
config.led_mode = LED_MODE_FLASHING;
WiFi configuration at code/server/main.cpp:
// TODO: What's the SSID of your WiFi?
const char* ssid = "SSID";
// TODO: What's the PASSWORD of your WiFi?
const char* password = "PASSWORD";
// TODO: If you don't want to use DHCP, provide a static IP (uncomment the following lines). Otherwise leave this commented.
// IPAddress ip(192, 168, 1, 23);
// IPAddress gateway(192, 168, 1, 1);
// IPAddress subnet(255, 255, 255, 0);
// WiFi.config(ip, gateway, subnet);
Compile and upload firmware
Please disconnect the power supply of your flippie board or remove the jumper JP1 und JP3 before connecting your computer to the USB port of the ESP8266 (if mounted at the flippie board already).
Navigate to "PlatformIO > Build" to compile this project and create the firmware for uploading to the ESP8266. Use "PlatformIO > Upload" to upload your firmware using the USB connection.
Test
Disconnect flippie from USB or press the reset button of the wemos
