Skip to content

Latest commit

 

History

History
269 lines (222 loc) · 15.8 KB

wiring.md

File metadata and controls

269 lines (222 loc) · 15.8 KB

Connection

You need a separate power supply for the panel. There is a connector for that separate from the logic connector, typically a big one in the center of the board. The board requires 5V (double check the polarity: what is printed on the board is correct - I once got boards with supplied cables that had red (suggesting +) and black (suggesting GND) reversed!). This power supply is used to light the LEDs; plan for ~3.5 Ampere per 32x32 panel.

The connector on the RGB panels is called a Hub75 interface. Each panel typically has two ports, one is the input and the other is the output to chain additional panels. Usually an arrow shows which of the connectors is the input.

Here you see a Hub75 connector to be seen at the bottom of the RGB panel board including the arrow indicating the input direction: Hub 75 interface

Other boards are very similar, but instead of zero-indexed color bits R0, G0, B0, R1, G1, B1, they start the index with one and name these R1, G1, B1, R2, G2, B2; the functionality is identical. Hub 75 interface

Throughout this document, we will use the one-index base, so we will call these signals R1, G1, B1, R2, G2, B2 below.

The strobe signals is sometimes also called latch or lat. We'll call it strobe here.

If you plug an IDC-cable into your RGB panel to the input connector, this is how the signal positions are on the other end of the cable (imagine the LED panels somewhere outside the picture on the left); note the notch on the right side of the connector: Hub 75 IDC connector

The RPi only has 3.3V logic output level, but many displays operated at 5V interprets these logic levels fine, just make sure to run a short cable to the board. If you do run into glitches or erratic pixels, consider some line-buffering, e.g. using the active adapter PCB. Since we only need output pins on the RPi, we don't need to worry about level conversion back.

For a single chain of LED-panels, we need 13 IO lines, which fit all in the header of the old Raspberry Pis. Newer Raspberry Pis with 40 pins have more GPIO lines which allows us to connect three parallel chains of RGB panels.

For reference, this is how the numbering on the Raspberry Pi looks like:

This is the same representation used in the table below, which helps for visual inspection.

Chains

You connect the Pi to the input of the first in the chain of panels. Each panel has an output connector, that you then can connect to the next panel in that chain.

The IO and library supports to run up to three chains in parallel.

Thus you can create a larger panel. Here a schematic view, below in the 'Power' section, you can see a real-live panel with three chains of 5 panels each seen from the back.

Coordinate overview

Wiring diagram

You find the positions of the pins on the Raspberry Pi and the corresponding logical connections in the table below (there are more GND pins on the Raspberry Pi, but they are left out for simplicity).

Shared connections

For each of the up to three chains, you have to connect GND, strobe, clock, OE-, A, B, C, D to all of these (the D line is needed for 32x32 displays; 32x16 displays don't need it).

If you have a 64x64 display, these have an additional E line which is typically on Pin 4 or 8 on the matrix connector.

For these pins, all chains receive the same data line, e.g. if you have three chains, you have to wire the A output on the Pi with three wires to the three chain inputs of the A input.

Connections per chain

Then for each first panel of a chain there is a set of (R1, G1, B1, R2, G2, B2) that you have to connect to the corresponding pins. They are marked [1], [2] and [3] for chain 1, 2, and 3 below.

If you only connect one panel or have one chain, connect it to [1] (:smile:); if you use parallel chains, add the other [2] and [3].

To make things quicker to navigate visually, each chain is marked with a separate icon:

[1]=:smile:, [2]=:boom: and [3]=:droplet: ; signals that go to all chains have all icons.

Connection Pin Pin Connection
- 1 2 -
💧 [3] G1 3 4 -
💧 [3] B1 5 6 GND 😄💥💧
😄💥💧 strobe 7 8 [3] R1 💧
- 9 10 E 😄💥💧 (for 64 row matrix, 1:32)
😄💥💧 clock 11 12 OE- 😄💥💧
😄 [1] G1 13 14 -
😄💥💧 A 15 16 B 😄💥💧
- 17 18 C 😄💥💧
😄 [1] B2 19 20 -
😄 [1] G2 21 22 D 😄💥💧 (for 32 row matrix, 1:16)
😄 [1] R1 23 24 [1] R2 😄
- 25 26 [1] B1 😄
- 27 28 -
💥 [2] G1 29 30 -
💥 [2] B1 31 32 [2] R1 💥
💥 [2] G2 33 34 -
💥 [2] R2 35 36 [3] G2 💧
💧[3] R2 37 38 [2] B2 💥
- 39 40 [3] B2 💧

In the adapter/ directory, there are some boards that make the wiring task simpler.

Alternative Hardware Mappings

The hardware mapping described above is the 'regular' hardware mapping, which is the default for this library. However, there are alternative hardware mappings to choose from, e.g. Adafruit sells a board where they choose a different mapping. You can choose with the --led-gpio-mapping flag.

If you got an adapter board that is from some unknown source and you don't get any output: double check the GPIO mappings they use.

You have relative freedom to assign any pins to the output of your choosing, just add a new mapping in lib/hardware-mapping.c, recompile and it will be provided as a new option in --led-gpio-mapping.

Table: GPIO-pins for each hardware mapping
regular adafruit-hat adafruit-hat-pwm regular-pi1 classic classic-pi1 compute-module
Parallel chains 3 1 1 1 3 1 6
~OE GPIO 18 GPIO 4 GPIO 18 GPIO 18 GPIO 27 GPIO 0 GPIO 18
Clock GPIO 17 GPIO 17 GPIO 17 GPIO 17 GPIO 11 GPIO 1 GPIO 16
Strobe GPIO 4 GPIO 21 GPIO 21 GPIO 4 GPIO 4 GPIO 4 GPIO 17
A GPIO 22 GPIO 22 GPIO 22 GPIO 22 GPIO 7 GPIO 7 GPIO 2
B GPIO 23 GPIO 26 GPIO 26 GPIO 23 GPIO 8 GPIO 8 GPIO 3
C GPIO 24 GPIO 27 GPIO 27 GPIO 24 GPIO 9 GPIO 9 GPIO 4
D GPIO 25 GPIO 20 GPIO 20 GPIO 25 GPIO 10 GPIO 10 GPIO 5
E GPIO 15 GPIO 24 GPIO 24 GPIO 15 - - GPIO 6
Chain 1/R1 GPIO 11 GPIO 5 GPIO 5 GPIO 11 GPIO 17 GPIO 17 GPIO 7
Chain 1/G1 GPIO 27 GPIO 13 GPIO 13 GPIO 21 GPIO 18 GPIO 18 GPIO 8
Chain 1/B1 GPIO 7 GPIO 6 GPIO 6 GPIO 7 GPIO 22 GPIO 22 GPIO 9
Chain 1/R2 GPIO 8 GPIO 12 GPIO 12 GPIO 8 GPIO 23 GPIO 23 GPIO 10
Chain 1/G2 GPIO 9 GPIO 16 GPIO 16 GPIO 9 GPIO 24 GPIO 24 GPIO 11
Chain 1/B2 GPIO 10 GPIO 23 GPIO 23 GPIO 10 GPIO 25 GPIO 25 GPIO 12
Chain 2/R1 GPIO 12 - - - GPIO 12 - GPIO 13
Chain 2/G1 GPIO 5 - - - GPIO 5 - GPIO 14
Chain 2/B1 GPIO 6 - - - GPIO 6 - GPIO 15
Chain 2/R2 GPIO 19 - - - GPIO 19 - GPIO 19
Chain 2/G2 GPIO 13 - - - GPIO 13 - GPIO 20
Chain 2/B2 GPIO 20 - - - GPIO 20 - GPIO 21
Chain 3/R1 GPIO 14 - - - GPIO 14 - GPIO 22
Chain 3/G1 GPIO 2 - - - GPIO 2 - GPIO 23
Chain 3/B1 GPIO 3 - - - GPIO 3 - GPIO 24
Chain 3/R2 GPIO 26 - - - GPIO 15 - GPIO 25
Chain 3/G2 GPIO 16 - - - GPIO 26 - GPIO 26
Chain 3/B2 GPIO 21 - - - GPIO 21 - GPIO 27
Chain 4/R1 - - - - - - GPIO 28
Chain 4/G1 - - - - - - GPIO 29
Chain 4/B1 - - - - - - GPIO 30
Chain 4/R2 - - - - - - GPIO 31
Chain 4/G2 - - - - - - GPIO 32
Chain 4/B2 - - - - - - GPIO 33
Chain 5/R1 - - - - - - GPIO 34
Chain 5/G1 - - - - - - GPIO 35
Chain 5/B1 - - - - - - GPIO 36
Chain 5/R2 - - - - - - GPIO 37
Chain 5/G2 - - - - - - GPIO 38
Chain 5/B2 - - - - - - GPIO 39
Chain 6/R1 - - - - - - GPIO 40
Chain 6/G1 - - - - - - GPIO 41
Chain 6/B1 - - - - - - GPIO 42
Chain 6/R2 - - - - - - GPIO 43
Chain 6/G2 - - - - - - GPIO 44
Chain 6/B2 - - - - - - GPIO 45

A word about power

These displays suck a lot of current. At 5V, when all LEDs are on (full white), my 32x32 LED panel draws about 3.4A. For an outdoor panel that is very bright, that can be twice as much. That means, you need a beefy power supply to drive these panels; a 2A USB charger or similar is not enough for a 32x32 panel; it might be for a 16x32.

If you connect multiple boards together, you needs a power supply that can keep up with 3.5A / panel. Good are old PC power supplies that often provide > 20A on the 5V rail. Or you can get a dedicated 5V high current switching power supply for these kind of applications (check eBay).

The current draw is pretty spiky. Due to the PWM of the LEDs, there are very short peaks of a couple of 100ns to about 1ms of full current draw. Often, the power cable can't support these very short spikes due to inherent inductance. This can result in 'noisy' outputs, with random pixels not behaving as they should. A low ESR capacitor close to the input is good in these cases.

On some displays, the quality of the output quickly gets erratic when voltage drops below 4.5V. Some even need a little bit higher voltage around 5.5V to work reliably. Also, tweak with the --led-slowdown-gpio flag.

When you connect these boards to a power source, the following are good guidelines:

  • Have fairly thick cables connecting the power to the board. Plan not to loose more than 50mV from the source to the LED matrix. So that would be 50mV / 3.5A = 14 mΩ. For both supply wires, so 7mΩ each trace. A 1mm² copper cable has about 17.5mΩ/meter, so you'd need a 2.5mm² copper cable per meter and panel. Multiply by meter and number of panels to get the needed cross-section. (For Americans: that would be ~13 gauge wire for 3 ft and one panel)

  • While a star configuration for the cabeling would be optimal (each panel gets an individual wire from the power supply), it is typically sufficient using aluminum mounting brackets or bars as part of your power solution. With aluminum of 1mm² specific resistivity of about 28mΩ/meter, you'd need a cross sectional area of about 4mm² per panel and meter.

    In the following example you see the structural aluminum bars in the middle (covered in colored vinyl) dualing as power bars. The 60A/5V power supply is connected to the center bolts (display uses about 42A all LEDs on): Powerbar

  • Often these boards come with cables that have connectors crimped on. Some cheap cables are typically too thin; you might want to clip them close to the connector solder your proper, thick cable to it.

  • It is good to buffer the current spikes directly at the panel. The most spikes happen while PWM-ing a single line. So let's say we want to buffer the energy to power a single line without dropping more than 50mV. We use 3.5A which is 3.5Joule/second. We do about 140Hz refresh rate and divide that in 16 lines, so we need 3.5 Joule/140/16 = ~1.6mJoule in the time period to display one line. We want to get the energy out of the voltage drop of 50mV; so with W = 1/2CU², we can calculate the capacitance needed: C = 2 * 1.6mJoule / ((5V)² - (5V - 50mV)²) = ~6400µF. So, 2 x 3300µF low-ESR capacitors in parallel directly at the board are a good choice (two, because lower parallel ESR; also fits easier under board). (In reality, we need of course less, as the highest ripple comes with 50% duty cyle thus half the current; also the input is recharching all the time. But: as engineer plan for maximum and then some; in the picture above I am using 1x3300uF per panel and it works fine).

Now welcome your over-engineered power solution :)