LED scan is not matrix style?
I am begining to work on a new long term LED Display project that uses cascaded RGB Display modules (16x8). However, it does not use a traditional scanning method of an X-Y matrix and simply uses straight outputs to the LEDs themselves. It uses the MBI5024GF which runs at 5vdc but somewhat equivalent to the Toshiba TB62726F (attached - runs at 3.3vdc). This means there are 32 ICs (1 for each LED set of 16) and each color Red1, Red2, Green1, Blue1 for each 16x8 pixel module. Lot's of data needs to be pushed through. Since there are only 32 of these IC's - according the datasheet for the module, then I would think that·DATA0 and DATA1 must be multiplexed or shared.
Is this something the SX can handle (or will multiple SX's need to be used)?
It's just a lot of SPI devices like 74HC595s (any limit on the amount of outputs) - then these 16x8 modules could then be cascaded together to get bigger and bigger. Also since they have RGB, then PWM (256 shades) will need to be worked into the mix too.
Post Edited (T&E Engineer) : 9/8/2008 12:35:34 PM GMT
Is this something the SX can handle (or will multiple SX's need to be used)?
It's just a lot of SPI devices like 74HC595s (any limit on the amount of outputs) - then these 16x8 modules could then be cascaded together to get bigger and bigger. Also since they have RGB, then PWM (256 shades) will need to be worked into the mix too.
Post Edited (T&E Engineer) : 9/8/2008 12:35:34 PM GMT
Comments
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
When the going gets weird, the weird turn pro. -- HST
1uffakind.com/robots/povBitMapBuilder.php
1uffakind.com/robots/resistorLadder.php
I mainly wanted to know if it looked possible to do this with a single SX28/48 for multiple cascaded 16x8 pixel modules or if I should dedicate a single·SX28/48·for each 16x8 pixel module. Since scanning a matrix is not an issue, I think it should be possible to use a single SX28/48 depending on how the refresh rate is to get back to the begining module again.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
When the going gets weird, the weird turn pro. -- HST
1uffakind.com/robots/povBitMapBuilder.php
1uffakind.com/robots/resistorLadder.php
So doing some simple math "out loud":
256 bytes * 8 bits = 2048 bits for the screen "frame" to be refreshed.
Say you can really crank the clock on the shiftout up, giving you maybe 1mhz (see SHIFTIN/SHIFTOUT for the SpeedMult parameter).
1,000,000 clocks / 2048 bits. That leaves me with a refresh rate of 448. Then cut that *in half* to allow for time to read data in as well.
That would more than adequate, except for the pesky PWM part. E.g., if PWM wants to be from 0...255, then, well it's undoable (~1hz refresh). 4 levels of PWM might be more reasonable: 220/4 = ~55hz. Not great, but certainly a maybe. That might make it easier to store PWM values depending on whether or not PWM is per bank, color, grid tile, individual LED, etc. Still not great....
So.... the "equivalent" Toshiba doc you posted shows the drivers being able to accept up to 20mhz clock. You could try 4mhz shift clock with 4-16 levels of PWM at a pretty good refresh rate (over 100hz), but you could hit problems with noise. Others here can probably speak better to serial clock speeds that high (if memory serves, Peter, pjv and Guenther have all done commercial-grade projects with very fast serial comms. between devices). I've gone to about 500khz w/o problems (even on a breadboard) but I don't think I've run a clock speed that fast. Try it and see.
Actually looking over the datasheet again, if it *were me* (and it's not
If you wanted PWM all the LEDs individually, aside from refresh rate vs. serial clock compromises, you'd need to take into account possible ram management of current PWM values. A four level PWM has an advantage in that 4 leds worth of PWM values can be packed into a single byte.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
When the going gets weird, the weird turn pro. -- HST
1uffakind.com/robots/povBitMapBuilder.php
1uffakind.com/robots/resistorLadder.php
Once module has 32 of the ICs which should allow:
8 Red1 LED Data 0 streams
8 Red2 LED Data 0 streams
8 Green1 LED Data 0 streams
8 Blue1 LED Data 0 streams
8 Red1 LED Data·1 streams
8 Red2 LED Data·1 streams
8 Green1 LED Data·1 streams
8 Blue1 LED Data·1 streams
This would indicate the need for 64 bytes.
So there are 4 LEDs (R1, R2, G1 and B1) that make up 1 pixel for a 16x8 pixel module.
But since there are 2 Data streams (Data 0 and Data 1), then the Data streams must be shared or tied together somehow. If you look at the attached last page of the data flow this will be more apparent.
So looking at the diagram on the last page, it shows that there are·(8 sets of 16 pixels or 128 pixel sets·of R1, R2, G1 and B1 LEDs)·or 512·total LEDs.
Each of the (32) MBI5024GF LED driver ICs has 16 LED cathode outputs (=512 total LED outputs).
So each LED color uses (8) MBI5024GF LED driver ICs (which is 128 R1 LED outputs, 128 R2 LED outputs, 128 G1 LED outputs and 128 B1 LED outputs)
Since a SHIFTOUT statement can do 8 bits then 128 bits (or 8 bytes) need to be shifted for each colored LED. 64 Bytes will need to be shifted out for all (4) LED colors worth of data.
64 Bytes of color data will have to be in EEPROM or DATA statements to get 1 screen displayed.
With the information·laided out like this, is individual PWM (256 shades) now possible with an SX?
It apparently is possible according to the attached datasheet with some other micro-controller.
I see now -- yeah, 512 bits per module. But how about this -- you've got TWO data lines -- I would bit bank a really simple shiftout that shifts to both sets of CASCADED data lines... that cuts your throughput in half. And don't think of shiftout as "byte" based; you can shift as many bits as you want. So if you split the data lines to two pins, then your throughput needs to shift out 256 bits per module (per pin). That's certainly not bad. How many modules are you gonna use? I don't think multiplexing is the issue here at all.
I think the two primary issues may be:
1. how many levels of PWM and what compromises might you make (i.e. using enable lines on the modules). Although if you get things down to 128 bits per module (using 4 data lines, see below) I see no reason why you couldn't do 256 levels of PWM with a fast serial clock speed.
2. the bottleneck of reading incoming data may be a bigger issue than shifting out. Even if you are sending to a bunch of modules, the bits can certainly be clocked out on both data lines really really fast w/o trouble.
Oh, another thought -- you could split up the modules into more data line "groups" -- again I would bit-bang a simple shiftout that places data onto 4 pins simulataneously for each clock pulse -- this cuts your output time by another factor of 2.
I don't know enough about these kinds of displays -- what are the two reds for? Are they generally both used as if they were "one" red led to match brightness to red/green? Or is that to get higher def in red only???
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
When the going gets weird, the weird turn pro. -- HST
1uffakind.com/robots/povBitMapBuilder.php
1uffakind.com/robots/resistorLadder.php
Something that worked for me a several years ago (in assembler and with one of my RTOS schedulers mind you), was to embed the brightness control into the multiplexing, so it came along for "free". Almost no extra overhead to the multiplexing code. This way I was able to dim or brighten any one particular digit (or group for that matter) for the purpose of identifying which one in a display I was applying a "raise/lower" push button to. It worked extremely well, and was very little code. It just took a little "strange thnking" is all.
It allowed me to use only two push buttons to enter values into the micro, much as you do any standard digital alarm clock; push both buttons for left digit selection/rotation, and when the desired digit is brightened (or dimmed) use one button for raising the value of the selected digit, and the other button for lowering it. Then again both buttons to shift to the next digit. It even had a "speed up" function so if either button remained pushed, the incrementing/decrementing time speeded up.
Very compact numeric data input.
Cheers,
Peter (pjv)
I'm assuming the 4 pins simulataneously are either the DATA 0 or the DATA 1 set of 4 pins for the 4 colors. Right?
I will start with just trying to display a data pattern first and work in the other LED colors later. I haven't even applied power yet as Im in the process of moving to my first house later this week, so I may have to get back to this next week.
The 2 reds are: one is a "virtual" red LED which somehow adds an illusion of higher definition from what little I have read about it.
Now that I think this over more, while I think this is totally doable with an SX, depending on how much data you want to suck in at once, a Propeller may be a better bet -- you would have plenty of room for a display buffer, output, pwm, input and an 8k or so input buffer -- so you'd always have data ready for output even if the data input (say from an EEPROM) is lagging.
But again, some of this depends on the input schema from memory, etc., if you are encoding actual color in your data, or just changing color algorithmically as you dump data to the modules, etc.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
When the going gets weird, the weird turn pro. -- HST
1uffakind.com/robots/povBitMapBuilder.php
1uffakind.com/robots/resistorLadder.php
- all seem to be surface mount
- very very fast clocks on output data streams (10-270 mhz)
- you better know your video (I can't say I do!)
One example: search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=568-3594-ND
You might want to try over in the Prop forums where a lot of folks are doing video work (both in and out). A Prop is probably a better solution for this project, to be honest.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
When the going gets weird, the weird turn pro. -- HST
1uffakind.com/robots/povBitMapBuilder.php
1uffakind.com/robots/resistorLadder.php