GorbaDisplay: Difference between revisions
(15 intermediate revisions by the same user not shown) | |||
Line 10: | Line 10: | ||
== Introduction == | == Introduction == | ||
This project is about reverse engineering a former public transport LED display. | This project is about reverse engineering a former public transport LED display. | ||
It consists of | It consists of 4 panels of each 32 * 16 LEDs. | ||
The plan is to make the display fully addressable as a bitmap display over a network connection, preferably with individually controllable brightness per pixel. | The plan is to make the display fully addressable as a bitmap display over a network connection, preferably with individually controllable brightness per pixel. | ||
== Hardware == | == Hardware == | ||
Line 39: | Line 31: | ||
* group of 4x IRF7425, power MOSFET, probably for driving a 1-out-of-4 row of LEDs | * group of 4x IRF7425, power MOSFET, probably for driving a 1-out-of-4 row of LEDs | ||
* a whole bunch of TPIC6C596, 8-bit shift register, probably drives the columns inside one row of LEDs | * a whole bunch of TPIC6C596, 8-bit shift register, probably drives the columns inside one row of LEDs | ||
* LMC6482, dual opamp, probably used to interface with the light sensor / LDR | |||
Each LED has a 10 ohm resistor in series. LEDs are amber/orange. | Each LED has a 10 ohm resistor in series. LEDs are amber/orange. | ||
=== Theory of operation === | === Theory of operation === | ||
This is | This is a row-multiplexed display, during each phase it lights up 1/4th of its rows. | ||
By quickly lighting up rows in succession, the illusion to a human observer is that all LEDs are controlled simultaneously. | |||
Each 32x16 panel contains 512 LEDs and 16x8-bit shift registers. | Each 32x16 panel contains 512 LEDs and 16x8-bit shift registers. | ||
==== row demultiplexer ==== | |||
The row demultiplexer receives 3 bits input. | |||
The lower two bits are used to select which row (out of 4) to light up. | |||
The highest bit is used an enable bit for the row multiplexer. | |||
==== column | ==== column registers ==== | ||
Each panel contains 32x16 pixels. | Each panel contains 32x16 pixels. | ||
It has a shift register consisting of 16 TPIC6C596 circuits organised in 4 rows of each 32 pixels. The shift registers of one panel are wired up in series. | It has a shift register consisting of 16 TPIC6C596 circuits organised in 4 rows of each 32 pixels. The shift registers of one panel are wired up in series. | ||
At the end of the shift register chain of each panel, there is another 596 chip, the output feeds into the data pin of the output 14-pin connector. | At the end of the shift register chain of each panel, there is another 596 chip, the output feeds into the data pin of the output 14-pin connector. | ||
=== 14-pin connector === | === 14-pin connector === | ||
Connections for the pinout are: | |||
{| class="wikitable" | {| class="wikitable" | ||
|+Connections | |+Connections | ||
|- | |- | ||
!Pin!!Id!!Remark | !Pin!!Id!!Wemos D1 mini!!Remark | ||
|- | |- | ||
|1|| | |1||VCC||-||Power | ||
|- | |- | ||
|2|| | |2||VCC||-||Power | ||
|- | |- | ||
|3||ROW_SEL0||74HCT541:A3-Y3 -> 74HCT238:A0 | |3||ROW_SEL0||D1||74HCT541:A3-Y3 -> 74HCT238:A0, 0 = active | ||
|- | |- | ||
|4||ROW_SEL1||74HCT541:A2-Y2 -> 74HCT238:A1 | |4||ROW_SEL1||D2||74HCT541:A2-Y2 -> 74HCT238:A1, 0 = active | ||
|- | |- | ||
|5||ROW_SEL2||74HCT541:A1-Y1 -> 74HCT238:A2 | |5||ROW_SEL2||D3||74HCT541:A1-Y1 -> 74HCT238:A2, acts as a disable for the row multiplexer | ||
|- | |- | ||
|6||?||74HCT541:A0-Y0 -> ? | |6||?||-||74HCT541:A0-Y0 -> ? | ||
|- | |- | ||
|7||?|| | |7||?||-|| | ||
|- | |- | ||
|8||?|| | |8||?||-|| | ||
|- | |- | ||
|9||COL_DATA||596:SER_IN | |9||COL_DATA||D5||596:SER_IN | ||
|- | |- | ||
|10||COL_ENABLE||74HCT541:A4-Y4 -> 596:G | |10||COL_ENABLE||D6||74HCT541:A4-Y4 -> 596:G, 0 = active, 1 = inactive | ||
|- | |- | ||
|11||COL_CLOCK||74HCT541:A5-Y5 -> 596:SRCK | |11||COL_CLOCK||D7||74HCT541:A5-Y5 -> 596:SRCK | ||
|- | |- | ||
|12||COL_LATCH||75HCT541:A6-Y6 -> 596:RCK | |12||COL_LATCH||D8||75HCT541:A6-Y6 -> 596:RCK | ||
|- | |- | ||
|13|| | |13||GND||GND||Ground | ||
|- | |- | ||
|14|| | |14||GND||-||Ground | ||
|} | |} | ||
== Software == | |||
Repository: https://github.com/bertrik/GorbaDisplay | |||
This is able to control one panel of 32x16 pixels using an ESP8266 (wemos d1 mini). | |||
Nice looking font for use on one panel: | |||
https://fontstruct.com/fontstructions/show/2168506/4x6-font-6 | |||
Digits are 4 pixels wide, so should be able to fit an ip address on one panel (on two rows). |
Latest revision as of 10:47, 19 September 2023
Project GorbaDisplay | |
---|---|
Public transport LED display | |
Status | Initializing |
Contact | bertrik, User:Eloy |
Last Update | 2023-09-19 |
Introduction
This project is about reverse engineering a former public transport LED display. It consists of 4 panels of each 32 * 16 LEDs.
The plan is to make the display fully addressable as a bitmap display over a network connection, preferably with individually controllable brightness per pixel.
Hardware
This thing consists of two main parts:
- a control board, with logic to receive (for example) text messages over a serial connection and convert them to a bitmap display on the display board
- a display board, with logic to light up each LED, consisting of 4 panels of 16x16 LEDs each
It has a light sensor to sense the ambient light level.
Each panel appears to work almost independently: it has its own power supply circuit, receiving input through a 14-pin connector and forwarding data to the next panel using another 14-pin connector. Each panel receives 24V and contains an LM2678 chip, also known as the Texas instruments "simple switcher", to drop the voltage down to approximately 2.2V.
Each display panel contains the following integrated cicruits:
- 74HC541, an octal buffer/line driver, buffers most of the signals coming in from the 14-pin connector to the rest of the electronics on the panel
- 74HC238, a 3-to-8 line decoder/demultiplexer, probably selects which row is currently being lit up
- group of 4x IRF7425, power MOSFET, probably for driving a 1-out-of-4 row of LEDs
- a whole bunch of TPIC6C596, 8-bit shift register, probably drives the columns inside one row of LEDs
- LMC6482, dual opamp, probably used to interface with the light sensor / LDR
Each LED has a 10 ohm resistor in series. LEDs are amber/orange.
Theory of operation
This is a row-multiplexed display, during each phase it lights up 1/4th of its rows. By quickly lighting up rows in succession, the illusion to a human observer is that all LEDs are controlled simultaneously.
Each 32x16 panel contains 512 LEDs and 16x8-bit shift registers.
row demultiplexer
The row demultiplexer receives 3 bits input. The lower two bits are used to select which row (out of 4) to light up. The highest bit is used an enable bit for the row multiplexer.
column registers
Each panel contains 32x16 pixels. It has a shift register consisting of 16 TPIC6C596 circuits organised in 4 rows of each 32 pixels. The shift registers of one panel are wired up in series. At the end of the shift register chain of each panel, there is another 596 chip, the output feeds into the data pin of the output 14-pin connector.
14-pin connector
Connections for the pinout are:
Pin | Id | Wemos D1 mini | Remark |
---|---|---|---|
1 | VCC | - | Power |
2 | VCC | - | Power |
3 | ROW_SEL0 | D1 | 74HCT541:A3-Y3 -> 74HCT238:A0, 0 = active |
4 | ROW_SEL1 | D2 | 74HCT541:A2-Y2 -> 74HCT238:A1, 0 = active |
5 | ROW_SEL2 | D3 | 74HCT541:A1-Y1 -> 74HCT238:A2, acts as a disable for the row multiplexer |
6 | ? | - | 74HCT541:A0-Y0 -> ? |
7 | ? | - | |
8 | ? | - | |
9 | COL_DATA | D5 | 596:SER_IN |
10 | COL_ENABLE | D6 | 74HCT541:A4-Y4 -> 596:G, 0 = active, 1 = inactive |
11 | COL_CLOCK | D7 | 74HCT541:A5-Y5 -> 596:SRCK |
12 | COL_LATCH | D8 | 75HCT541:A6-Y6 -> 596:RCK |
13 | GND | GND | Ground |
14 | GND | - | Ground |
Software
Repository: https://github.com/bertrik/GorbaDisplay
This is able to control one panel of 32x16 pixels using an ESP8266 (wemos d1 mini).
Nice looking font for use on one panel: https://fontstruct.com/fontstructions/show/2168506/4x6-font-6 Digits are 4 pixels wide, so should be able to fit an ip address on one panel (on two rows).