Multiple core Propeller speeds up display addressing

Th

If you ever wondered what an eight-core Propeller processor can do for you, [Tom] found one answer. He’s using the multiple cores to individually address serial displays. He has six display modules, and each of them incorporate six 8×8 LED modules. This makes for a total of 2304 LEDs, and since they’re addressed by cascading serial data, that means 2304 bytes pushed to the display. You’re going to suffer from quite a bit of slow-down if you choose that communication method.

This is where multiple-cores come in handy. Instead of cascading data between the six modules, he assigned a different core to each. Now he can concurrently address the six displays, reducing his serial data from 2304 bits per frame down to 384 bits per frame. As you can see in the video after the break, updating the display six times as fast as before yields fantastic results.

Now what if you’re using a processor that has forty of these multi-core Propeller chips?

This does make us wonder, can’t the same thing be done on a single-core processor? An eight-bit device takes one cycle to set all eight bits on a single port. So why not just connect the six serial connections on six bits of the same port? Weigh in with your thoughts in the comments.

Comments

  1. walt says:

    that kicks ass!
    1st!

  2. bob says:

    ahhh this setup will run smoother than a single core setup just because each individual screen recieves the full core but single core setup would yield similar results as stated in the article and would be more cost effective. so the choice should be made depending on the complexity of the images being processed and the budget.

  3. JB says:

    Excellent! Thanks for the idea!

  4. Sprite_tm says:

    It’s doable pretty easy with an 8-bit avr. Just store the bits interleaved in memory, so you can send them out as quickly as possible, one bit per LED-display. That makes the display-routine itself nice and snappy, and moves the task of interleaving the bytes to the routine that writes the display memory, which gets used a lot less. An AVR should be able to push that many bits just fine, for my own LED-display (http://spritesmods.com/?art=ledmatrix) I actually use grayscales, which means that the AVR needs to send the data at about ten times as fast as with just b/w, so driving 6 displays with it should be doable just fine.

  5. Sprite_tm says:

    Ow, that ofcourse means that this board technically should be able to handle a grayscale image with just the single propeller-chip. I’d say there’s a challenge there :)

  6. Erik Johnson says:

    “that means 2304 bytes pushed to the display” then “serial data from 2304 bits per frame”
    So, is this a 8bpp 256-level PWM, or 1bpp monochrome display?
    (i know, its mono/1bpp)

    This is cool, can there be a demo with faster/smoother animation?

  7. Bill says:

    This will come in handy when I finish off my cheap serial (or I2C) driven LED matrix drivers. I was thinking about how I could control multiple stacked rows to form a larger screen.

    http://www.billporter.info/arduquee-an-arduino-powered-marquee-design-log/

  8. localroger says:

    While it could be done with a single core CPU, it’s not just about capability; it’s also about ease of programming. With the Propeller you can devote a core to each display and have two left over to do the animation and other I/O without fussing with interrupts and their overhead issues.

  9. Agreeing to HaD. To me this only is a real waste of effectiveness, you could’ve used the other 7 cores to calculate pi or do something sensible, but do not use six cores for toggling bits, that’s not what is the sense.

  10. error404 says:

    The display controller on those boards should run SPI at up to 1MHz according to the datasheet. If he can just send 2304 bits to update the display (there’s probably some command overhead, but…) he should be able to get several times 60fps using a single Cog to drive the whole cascade. Not fast enough?

  11. bilbao bob says:

    You can do this with a single chip processor, but it’s harder to do the first time. You need to write routines to convert images to raster streams, and 8 modules or 1 module is pretty much the same.

    Frame rate is the place where a multi-core solution should shine… The old 640 by 480 grey scale LCD displays were driven by a slow mcu with a lot of time to spare, and grey scale/color should be possible with multi-core.

    Programmer laziness is a virtue and a curse at the same time. The important thing is that he got it to work – everything else is improvement, and that’s boring and pointless.

    Well, at least it is if Windows 7 is anything to go by.

  12. Tom says:

    Thanks HAD! and thanks for your comments guys. Some very good points being mentioned.

    Generating the font into the shadowmemory slows it down a bit so I may end up having to optimise the code to free up cores.

    Really happy with it so far being my first microcontroller project.

    Tom

  13. Stefan says:

    Addressing multiple serial devices is exactly what I’m doing with a Prop. Since it can set the entire 32-bit port with one op, I can update 30ish shift registers in 16 operations, using a single core. The problem then becomes getting that much data into the local memory.

    Unfortunately, soldering hundreds of RGB LEDs takes time, so I don’t have anything to show. I don’t even know if it will work yet!

  14. Drew says:

    what’s with the random tooth brush in the pic?

  15. Fishebulb says:

    @bilboa bob

    Agreed, I see this more as a proof of concept, trying out the hardware to see how it works. Cool demo, cool work by the author, he accomplished what he wanted to, and hopefully learned some things in the process.

    In true HaD tradition the “know it alls” (ie the “show nothings” come out in full force. I really wish the people that constantly complain about what others do, would instead invest their efforts to actually showing off their projects. If they had one that is.

  16. Grovenstien says:

    Im looking to build my own LED video wall! Does anyone have any good links to places to start etc. from PWM for each diode right through to video wall processors? Cheers peeps!

  17. M4CGYV3R says:

    8 cores on a single $7 chip – sounds pretty cost effective to me.

  18. Tweeks says:

    Fredrik, a guy from our user group did this a year or two ago using a propeller with less core power and did a whole pong game:

    http://xcssa.org/photos/2008_XCSSA/video/10-20_DSCF2938.flv.html

    The propeller is a very powerful little uC that’s multi-core design means that real-time programming can rely less on interrupts and more on delegated design. Pretty cool.

    Tweeks

  19. michu says:

    or you could use some rainbowduinos from seeedstudio, each one drive an 8×8 rgb led matrix and is adressable by i2c.

    I wrote also a processing lib, check http://code.google.com/p/neorainbowduino/

  20. MoJo says:

    I can’t see why SPI could not be used on an 8 bit AVR. I use it for generating a TV signal with a resolution of 384×240 and that wastes a lot of time with sync pulses and dead non-displayed areas. Refresh is 50Hz (PAL).

    Actually thanks to the SPI interface there is a lot of time left between sending bytes to do some processing, such as loading tiles from flash RAM (there is not enough SRAM for a bitmap) and generating some basic colour. Since the LED displays don’t need sync signals etc. you could drive them with the SPI interrupt and have the majority of CPU time available for the application.

  21. bilbao bob says:

    @fredrik –
    Sorry man, my personal project dev days are over, and the stuff I work on now is of the “Well, we can’t kill you, but you signed all this paperwork and we won’t renew your contract if you discuss it” variety that kills innovation. Sigh. But it’s worth it to get access to sexy technology toys.

    I hope I don’t come off as a “it’s been done” hater, when I’m really just a crank, or becoming one, anyway. There used to be guys who would hang around hot rod garages and do a valve job or some welding for free, and who had a lot to say. Ever see the movie “world’s fastest indian”? I’m that guy, but in electronics system design instead of motorcycle racing.

    These projects teach us a lot. I suggest that he look at prior work in display driving. If there’s anything I’ve learned of value, it’s that some dumb bastard already did what you want to do, and probably wrote about it.

    I’m serious – there is almost nothing you’ll think of that hasn’t been done, redone, reworked, redesigned and abandoned repeatedly in the last 30 years, if not 300 years.

    This used to drive me nuts. I once wrote some software that was (I thought) decades ahead of the literature and industry practices. I was proud of this, and the patent was going to be paid for by someone else. Then I discovered that the technique had been used and documented in the mid 1970s, and a long time after that, I discovered that some guy had done it in the late 1960’s – and done it in fortran.

    Now I believe that any solvable problem is solvable – if enough cumulative IQ is pointed at it. If you could see how fast and how far internet surveillance has come since 2005, you’d be amazed. Most of this is thanks to salaried guys at search engines, because they have the time to chew on it. It’s the same for this guy’s software drivers.

    HAD represents an enormous think-tank of experience and knowledge. Some of it is probably BS or useless, but in general, many hands and brains can improve the tech and solve complex problems. I think our posts should be an equal mix of “Have you considered?”, “I saw this done” and attaboys. I just wish the “it’s been done” guys would leave more details about the HOW, which is most useful for everyone else.

    I urge experimenters to try and constantly evolve their projects… and to leave behind breadcrumbs for others to follow.

  22. Henri says:

    Really kick ass

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 93,805 other followers