PDA

View Full Version : LED Matrix display



Art
- 4th October 2013, 02:16
Hi Guys,
This idea might sound silly, but I can't logically disqualify it, or practically check it at the moment,
but take any old LED matrix for POV display such as this:

http://www.winpicprog.co.uk/graphics/led_matrix.gif

So we get a number of LEDs which is the number of IO pin inputs multiplied by the number of IO pin outputs.
If we want more LEDs we go and get port multipliers.
The pic does the logic, but we introduce rows of transistors to source and sink the current as the display
gets larger (since the pic can sink more current than it can source, sometimes can get away with one row).

What if we got the above display working in a typical POV display circuit,
then duplicated the display circuit, but with reverse polarity, and configuration of transistor rows to match,
and then connected the second display circuit to the same pic IO pins that are driving the first display,
then just change the tris on every IO pin (inputs change to outputs and vice versa), to address the second display.

Could we double the LEDs for the same number of pic pins this way?

Art
- 4th October 2013, 04:25
BTW, feel free to tell me if you think I'm nuts.

http://img.photobucket.com/albums/v186/ArtArt/Dual_LED_zpscec3d423.png

You can turn either LED on, or both LEDs off with combination of toggling TRIS for the pin, and the value on the pin.
You just can't turn both of them on at the same time, because the pin can't source and sink current at the same time.
We can fail to source or sink current to achieve the state of both LEDs off.

A matrix display only has to light a line at a time.
Why can't that be extended out to an entire matrix display?

rsocor01
- 4th October 2013, 06:28
Could we double the LEDs for the same number of pic pins this way?

I think that it should work. But, I think you would be able to control only one LED at a time out of the 128 total LEDs.

HenrikOlsson
- 4th October 2013, 06:31
Hi Art,
Look up Charlieplexing, I think that's really what you're suggesting. With that and 16 I/Os you can drive 255 LEDs.

In your second example, when the pin is tristated wouldn't current be flowing thru both diodes, turning them both on? Obviosuly depending on Vf of the particular diodes but never the less.

Instead, connect the LEDs in reverse polarity between the I/O-pin and a voltage divider across the rail. Now when the pin is LOW one of the LEDs will be on, when it's high the other LED will be on, when the pin is tristaded neither LED will be on.

/Henrik.

rsocor01
- 4th October 2013, 06:37
You can turn both LEDs off with combination of toggling TRIS for the pin, and the value on the pin.

How?????? I don't see how.

Art
- 4th October 2013, 08:47
How?????? I don't see how.

TRIS 0 for the pin, and value 0.
Does that not mean it won't source or sink current?


I think you would be able to control only one LED at a time out of the 128 total LEDs.

Why a single LED rather than a whole row or column?

Art
- 4th October 2013, 09:19
The LEDs in the matrix I'm talking about look more like this:
http://img.photobucket.com/albums/v186/ArtArt/Dual_LED_zpsf2c69aff.jpg

Where normally, the matrix would only have one LED, and we just decided which pin would
control, or provide the source current, and which pin, the sink current.

I really do need to get my computer sorted out.. I can't put something like this together at
the moment.. It would only take two banks of four LEDs each to test it.

HenrikOlsson
- 4th October 2013, 09:27
Hi Art,

TRIS 0 for the pin, and value 0.
Does that not mean it won't source or sink current?
No not really, with TRIS=0 and Port=0 it WILL sink current..... In relation to the schematic in your second post:
If you set TRIS=0 then pin is an output. If you then set the pin low it will sink current so (only) the upper LED will turn on, if you set the pin high it will source current so (only) the lower LED will turn on - so far so good. But if you set TRIS=1 the pin is made an input and will not source or sink any current but since the LEDs are connected in series across the supply they will both turn ON - not off.

If Charlieplexing isn't what you meant I must confess I don't quite follow.... I'll re-read your initial post a couple of more times to see if I can figure it out.

/Henrik.

EDIT: OK, you squeezed in a post while I was typing. The two LED "matrix" you show in your latest basically IS how Charlieplexing works.

Art
- 4th October 2013, 10:02
It is really only the two IO pin, two LED schematic that relates to a POV matrix display.
If it really is that easy, I'm kicking myself over previous designs..
like 144 LED display, and various ways I have done multiple 7 segment LED displays.
I even have a personal project where a 16F877 drives 6 LED digits, and another slave pic hanging off it drives another 3 digits.

Art
- 4th October 2013, 11:13
Again, I can't test, but if you can't prevent a pin sinking current then this should not be possible:
http://www.maximintegrated.com/images/appnotes/1880/DI217Fig02.gif
Something I googled looking for "Charlieplexing".
If you didn't need the decimal point, looks like it could happen on an 8 bit port,
unless it's a feature specific to the chip driving this display.
... but if all pins wer sinking current this display wouldn't work.

rsocor01
- 4th October 2013, 17:11
Why a single LED rather than a whole row or column?

Yes, you are right. It looks like you can turn on a whole row or column at a time.

AvionicsMaster1
- 4th October 2013, 18:59
As the schematic shows in post #1 you'd need a high on a specific pin of Port C and a low on a specific pin on Port B to turn on one LED. To turn on a whole row one pin on Port C would have to go high and all the pins on Port B would have to go low. If the LEDs would turn on they'd be very dim as you're sourcing/sinking through the PIC and you'd probably not have enough current to turn on more than two or three LEDs.

As the schematic shows in post #2 if the PIC Port was set to TRIS =1, high impedance, and the resistors were of the right value you could turn on both LEDs but they'd be dimmer than if the Port was set to TRIS = 0 and the Port set to 0, low = upper LED on, or 1, lower LED turned on.

The seven segment display in post #10 is a different animal than the other two. You'd have to have chip select somewhere or all displays would have the same number. You could do all the output on one Port but you'd probably have to use another port for chip select. I'm not sure what the CC pin does but it that is the chip select, IMHO, it can't be used as shown to do the chip select.

If you want chuckplexing I posted this http://www.picbasic.co.uk/forum/showthread.php?t=14220 post #17 to control 20 individual LEDs with only 5 pins. I have substituted successfully replacing the diodes with optoisolators to control 20 higher current draw devices.

If you are going to do a true LED matrix display I don't see how you can turn on a full row or full column with a high on one pin and only grounding one additional pin. They are designed to work like that.

If you want to use only one port to drive a dot matrix display you could a BCD to decimal, or BCD to seven segment, chip using four pins and then chip select with the other four.

If I'm missing something or am all wet, I'm sure someone will tell me.

towlerg
- 4th October 2013, 20:10
Microchip app note TB029 Complementary LED Drive

Art
- 5th October 2013, 04:06
If I'm missing something or am all wet, I'm sure someone will tell me.

It's me who's missing something, or making sure that I'm not missing something for the next display I guess.
At the very least it still looks like one of my multi seven seg displays could have been easily improved.