No edit summary Tag: Manual revert |
|||
(53 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
This page is about a | {{Project | ||
|Name=Scarlett Scroller | |||
|Skills=Hacking, Electronics, Programming, making, lights, | |||
|Status=Active | |||
|Niche=Artsy stuff | |||
|Purpose=Fun | |||
|Picture=ScarlettScroller_IMG_0015.JPG | |||
|Tool=Yes | |||
|Location=Zaal1 | |||
|Category=Electronics | |||
}} | |||
<gallery> | |||
Image:ScarlettScroller_IMG_0015.JPG | |||
Image:ScarlettScroller_IMG_0016 (3).JPG | |||
Image:ScarlettScroller_IMG_0017 (1).JPG | |||
</gallery> | |||
[[File:ScarlettScroller.gif|right|Scarlett Scroller]] | |||
For questions about this project, see [[User:Bertrik]] on how to contact me. | |||
This page is about modifying a 80x7 pixel scrolling red LED sign with an alternative controller (ESP8266) running custom firmware. | |||
This makes it possible to use the LED sign as a networked display (WiFi), with pixels that can be individually dimmed in 255 levels. | |||
== Hardware == | == Hardware == | ||
The model number is AM03127. | |||
It has | It has 16 elements of 5x7 red LEDs each, for a total of 80x7 LEDs. | ||
This particular board has monochrome LEDs only. | |||
The electronics consist of two | The electronics consist of two boards: a controller board and a LED board. | ||
The LED board has the following ICs: | The LED board has the following ICs: | ||
Line 12: | Line 39: | ||
* SN74HC04: 6 inverters | * SN74HC04: 6 inverters | ||
* 10x SN74HC164: 8-bit parallel-out serial shift registers | * 10x SN74HC164: 8-bit parallel-out serial shift registers | ||
* 4x APM4953: dual P-Channel Enhancement Mode Mosfet | |||
The boards are connected through a 10 pin connector | The boards are connected through a 10 pin connector and a 5V power connector. | ||
=== Theory of operation | === Control connector === | ||
[[File:lichtkrant_flok_jp7.jpg|thumb|right|Lichtkrant connector]] | |||
Pinout: | |||
* pin 1: SCLK | |||
* pin 2: SCLK (shorted to pin 1) | |||
* pin 3: G = 'green' data bit shifted into row, goes through inverter 6 | |||
* pin 4: R = 'red' data bit, goes through inverter 1 | |||
* pin 5: A = row select LSB | |||
* pin 6: B = row select | |||
* pin 7: C = row select MSB | |||
* pin 8: D = appears to not be connected to anything | |||
* pin 9: GND | |||
* pin 10: GND | |||
{| class="wikitable" style="caption-side:bottom; text-align:center;" | |||
|+JP7 | |||
|- | |||
| SCLK|| SCLK | |||
|- | |||
| R || G | |||
|- | |||
| B || A | |||
|- | |||
| D || C | |||
|- | |||
| GND || GND | |||
|} | |||
(as viewed on the controller board) | |||
{| class="wikitable" style="caption-side:bottom; text-align:center;" | |||
|+JP1 | |||
|- | |||
| GND || D || B || R || SCLK | |||
|- | |||
| GND || C || A || G || SCLK | |||
|} | |||
(as viewed from the back side) | |||
Unfortunately the connector does not seem to carry 5V. If that were the case, a replacement microcontroller could be powered directly from the connector, with the main power entering through the 5V power plug. | |||
The display can be blanked by selecting row 0, e.g. signals A, B and C all 0. | |||
=== Power === | |||
The control board is powered by a 12V supply and probably contains a step-down converter to turn it into 5V internally. | |||
== Theory of operation == | |||
There are 80 pixels horizontally and 10 serial-parallel chips with 8 outputs each, | There are 80 pixels horizontally and 10 serial-parallel chips with 8 outputs each, | ||
so one row of pixels can be kept in the shift registers. | so one row of pixels can be kept in the shift registers. | ||
The 3-to-8 decoder selects one particular row to light. | The 3-to-8 decoder selects one particular row to light, through pins A/B/C. | ||
The MOSFETs are used as drivers. | |||
Selecting row 0 (A, B, C all 0) disables the display, i.e. does not light any row. | |||
The SCLK signal goes to the CLK input of all serial-parallel | The SCLK signal goes to the CLK input of all serial-parallel SN74HC164 chips. | ||
The LED board is prepared to be used with R+G LED modules, however this particular board does not have the shift register populated for the dual-color. | |||
It appears there is no 'latch' signal, although the controller board has the text 'LAT'. | |||
A latch signal could activate the row data after it's been written to the shift registers, thereby avoiding the pixels showing up already as they're being written and reducing the contrast. | |||
== Firmware == | |||
Github archive: https://github.com/bertrik/scarlettscroller | |||
The firmware run this on an ESP8266 (wemos d1 mini), which is connected to the LED board through dupont-wire. | |||
The firmware connects to the local wifi network (sets up a captive portal when no wifi has been configured yet). | |||
Then the framebuffer can be accessed over UDP port 8888. Just send a UDP frame consisting of 80x7 bytes, each byte representing a brightness. | |||
== Integration into nurdspace infrastructure == | |||
This scroller is mounted above the door in zaal 1. | |||
=== Power === | |||
Power to the scroller is switched along with the power to the *zaal 1 amplifier*. | |||
=== Network === | |||
The scroller itself has the following network configuration: | |||
* host name ESP-74AAEB.dhcp.nurd.space | |||
* port 5000 (UDP): accepts a text message, the message is scrolled once, right-to-left | |||
* port 8888 (UDP): accepts a 560 byte (80x7 pixel) frame with 8-bit intensity data | |||
On ticker-proxy.vm.nurd.space port 5108 listens for UDP pixelflood (text!). | |||
Port 5120 (also UDP) listens for text messages. | |||
[[File:Scarlettscroller.jpg|640px]] | |||
=== Audio === | |||
* | The plan is to show an audio waveform if music/audio is playing. | ||
* snap client protocol https://github.com/badaix/snapcast/blob/master/doc/binary_protocol.md | |||
The display shows part of the waveform: | |||
* | Concepts/calculation: | ||
* | * about 10 updates/second, say about 4096 bytes per frame (44100 samples/second) | ||
* | * use FFT to find the waveform segment that best matches the currently displayed waveform | ||
* algorithm: complex FFT of both current waveform and segment to search in, multitply by complex conjugate, IFFT then find largest correlation peak |
Latest revision as of 21:41, 8 June 2024
Scarlett Scroller | |
---|---|
Participants | Bertrik |
Skills | Hacking, Electronics, Programming, making, lights |
Status | Active |
Niche | Artsy stuff |
Purpose | Fun |
Tool | Yes |
Location | Zaal1 |
Cost | |
Tool category | Electronics |
ScarlettScroller_IMG_0015.JPG {{#if:Yes | [[Tool Owner::{{{ProjectParticipants}}} | }} {{#if:Yes | [[Tool Cost::{{{Cost}}} | }}
For questions about this project, see User:Bertrik on how to contact me.
This page is about modifying a 80x7 pixel scrolling red LED sign with an alternative controller (ESP8266) running custom firmware. This makes it possible to use the LED sign as a networked display (WiFi), with pixels that can be individually dimmed in 255 levels.
Hardware
The model number is AM03127.
It has 16 elements of 5x7 red LEDs each, for a total of 80x7 LEDs. This particular board has monochrome LEDs only.
The electronics consist of two boards: a controller board and a LED board.
The LED board has the following ICs:
- SN74HC138: 3-to-8 line decoder/multiplexer
- SN74HC04: 6 inverters
- 10x SN74HC164: 8-bit parallel-out serial shift registers
- 4x APM4953: dual P-Channel Enhancement Mode Mosfet
The boards are connected through a 10 pin connector and a 5V power connector.
Control connector
Pinout:
- pin 1: SCLK
- pin 2: SCLK (shorted to pin 1)
- pin 3: G = 'green' data bit shifted into row, goes through inverter 6
- pin 4: R = 'red' data bit, goes through inverter 1
- pin 5: A = row select LSB
- pin 6: B = row select
- pin 7: C = row select MSB
- pin 8: D = appears to not be connected to anything
- pin 9: GND
- pin 10: GND
SCLK | SCLK |
R | G |
B | A |
D | C |
GND | GND |
(as viewed on the controller board)
GND | D | B | R | SCLK |
GND | C | A | G | SCLK |
(as viewed from the back side)
Unfortunately the connector does not seem to carry 5V. If that were the case, a replacement microcontroller could be powered directly from the connector, with the main power entering through the 5V power plug.
The display can be blanked by selecting row 0, e.g. signals A, B and C all 0.
Power
The control board is powered by a 12V supply and probably contains a step-down converter to turn it into 5V internally.
Theory of operation
There are 80 pixels horizontally and 10 serial-parallel chips with 8 outputs each, so one row of pixels can be kept in the shift registers.
The 3-to-8 decoder selects one particular row to light, through pins A/B/C. The MOSFETs are used as drivers. Selecting row 0 (A, B, C all 0) disables the display, i.e. does not light any row.
The SCLK signal goes to the CLK input of all serial-parallel SN74HC164 chips.
The LED board is prepared to be used with R+G LED modules, however this particular board does not have the shift register populated for the dual-color.
It appears there is no 'latch' signal, although the controller board has the text 'LAT'. A latch signal could activate the row data after it's been written to the shift registers, thereby avoiding the pixels showing up already as they're being written and reducing the contrast.
Firmware
Github archive: https://github.com/bertrik/scarlettscroller
The firmware run this on an ESP8266 (wemos d1 mini), which is connected to the LED board through dupont-wire.
The firmware connects to the local wifi network (sets up a captive portal when no wifi has been configured yet). Then the framebuffer can be accessed over UDP port 8888. Just send a UDP frame consisting of 80x7 bytes, each byte representing a brightness.
Integration into nurdspace infrastructure
This scroller is mounted above the door in zaal 1.
Power
Power to the scroller is switched along with the power to the *zaal 1 amplifier*.
Network
The scroller itself has the following network configuration:
- host name ESP-74AAEB.dhcp.nurd.space
- port 5000 (UDP): accepts a text message, the message is scrolled once, right-to-left
- port 8888 (UDP): accepts a 560 byte (80x7 pixel) frame with 8-bit intensity data
On ticker-proxy.vm.nurd.space port 5108 listens for UDP pixelflood (text!). Port 5120 (also UDP) listens for text messages.
Audio
The plan is to show an audio waveform if music/audio is playing.
- snap client protocol https://github.com/badaix/snapcast/blob/master/doc/binary_protocol.md
The display shows part of the waveform:
Concepts/calculation:
- about 10 updates/second, say about 4096 bytes per frame (44100 samples/second)
- use FFT to find the waveform segment that best matches the currently displayed waveform
- algorithm: complex FFT of both current waveform and segment to search in, multitply by complex conjugate, IFFT then find largest correlation peak