2
Surtronic 80's led panel project
(lemmy.staphup.nl)
submitted
1 week ago* (last edited 1 week ago)
by
rtwin@lemmy.staphup.nl
to
c/arduino_projects_etc@lemmy.staphup.nl
Outline
Used hardware
Panel frontside
Panel backside
- The larger 4 pin connector is for 9 volt power supply. All LED's lit takes about 3.5-4 Amps!
- The smaller 4 pin connector has: "gnd", "latch/enable", "clock", "data"
- The data pushed in via "clock" and "data" has the following parts: ~tail~[control byte][bit 89]..[bit 0]~head~
- [control byte] has following bits: [1 bit n/u] [4 bit counter value][3 bit line select]
- [4 bit counter value] is decremented each clock pulse if 'enable' is active. Once the counter reaches '0', the line-select will be suppressed. This is used for built-in brightness control
- [3 bit line select] the bits at this position dictate which of the 7 lines (traversing all 3 text-rows) is/are lit.
- [control byte] has following bits: [1 bit n/u] [4 bit counter value][3 bit line select]
Standalone panel
Involved MCU's
- ESP8266 : NodeMCU 1.0(ESP-12E Module)
- USB-serial receives bitmap-packages and forwards these to the Wemos using "ESPNOW"
- ESP32 : Wemos D1 mini
- Receives bitmap packages and displays it on the LED-panel
- SPI-pins connect to the LED-panel clock- and data-line
- Separate output pin connects to the LED-panel latch/enable pin
Notes
- The Wemos D1 mini runs the LED Panel controller software.
- On CPU0 runs a task which pushes out the data via SPI.
- CPU1 is used by the WIFI/ESPNOW library to receive the display-packages.
- A display package consists of [1 byte for payload length][1 byte for brightness 0-15][237 bytes of which 90 bits represent the 90x21 pixels picture].
- Because of maximum SPI clock speed, the hardware brightness logic, and the fact that data-shifting can only be done while the 'enable' is off, the display refresh rate lies at about 60hz.
- The NodeMCU runs a simple package forwarder at 115200 kbps. Receiving via Serial/USB and forwarding via ESPNOW. The first byte read is the length of the payload. Then it reads 'length'-bytes. Once received, it forwards the package via ESPNOW to the dedicated MAC address of the Wemos. "ESPNOW" maximum package size is 250 bytes, so fits nicely.
- Python is used to provide the NodeMCU with frame-packages. The rendered image is 90x31 pixels. 2 bars of 5 pixels high are removed from the image, so that the LED-less areas are removed from the image and the destination image becomes the required 90x21 pixels.
- One Python program uses Pillow image library to generate the animation with the time centered, and a rotating 3d-cube.
- One Python program uses OpenCV to read a .mp4 video, to obtain the frames one by one. Each frame is scaled down to 90-pixels-wide, cropped to 90x31, turned into 2 color B&W before sending.