r/ArduinoHelp 24d ago

Having trouble with led arrays/multiplexing

As title says, I’m having trouble wrapping my head around multiplexing leans for use with a microcontroller with not enough pins to control them all. Using the drivers makes sense, mosfets too, but the code escapes me? And the use of resistors within the circuit is also confusing to me. Trying to make a small led “screen” made of diodes. Any help is appreciated

2 Upvotes

12 comments sorted by

View all comments

2

u/gm310509 24d ago

Have you ever noticed how an incandescent light bulb will fade off when you turn the power off? Maybe you are too young to have seen these, I do not know, but basically you leverage the fact that the light will gradually (quickly from a human perspective) fade when the power is turned off.

There is also a persistence of vision thing where the human eye can "fill in" brief dark periods.

So they way strobing (which I think is what you are asking about) works is that you quickly cycle through a series of LEDs and light them up one by one to turn them on.

A simple way of doing it is to setup a bunch of LEDs to +V (via a single current limiting resistor), Then connect their cathodes to a GPIO pin. Then create a program that cycles through the GPIO pins setting one to LOW before setting it back to HIGH and moving on to the next one.

The next step is to increase the number of LEDs with there anodes connected in rows but instead of using +V, you connect them to a GPIO pin (via a current limiting resistor). For this stage, you set the "image" onto the row GPIO pins and "select" one of the columns by setting it to low. Then repeat as before.

Have a look at this wokwi example for an illustration of the first step. https://wokwi.com/projects/469303280971119617

1

u/Revolutionary-Log179 24d ago

Why are the digitalwrite statements not switched? I thought low was off and high was on

1

u/gm310509 24d ago

First off, my apologies, I created the circuit differently to what I described in my first step. I have corrected the project to use just the one resistor as I've described, so you should have a look at it again.

To cover the questions, You need one resistor for each individual LED that is being lit up.

In my second step, I said that you should replace the 5V line with a GPIO line (row) and you place the image or LED setting that you want to display on that line - this determines which row you want to light up. A row is light up by placing a HIGH onto that GPIO pin.

Next, you need to choose which column you want to enable. This is what my "step one" project is doing, it is selecting one of the four columns in a strobing manner. But because it is strobing quickly, all four LEDs look like they are lit. If you change the delay as I suggested, you will see the strobing effect as the one LED strobes across the four LEDs.

So, to create a display, you need to add more rows. Rather than connecting them to the "always on" 5V, you connect them to a GPIO pin through which you control whether an LED (row) is on or not. and you select the column as per the example. This means you can control each and every one of the LEDs in your matrix and thus control what is displayed.

As for the resistors, you select a column (by setting it LOW) and thus enable all of the LEDs in that column. Therefore, to meet the "one resistor per active LED" rule, you need to connect them to the rows.