32 x 32 LED panel with animations and video


Recommended Posts

I am very interested in using the Papilio to drive video and animations to multiple 32x32 LED panels.

Is there any software and hardware available now to do the things demonstrated in the DUO video.  it shows live generation and display of video and a spectrum analyzer?  What code was used to do this  Are there FPGA schematics or ZPUino C code avaialble?







Link to comment
Share on other sites

Hello Howard,


I have ordered some Wings to drive the RGB Panels but they won't be ready for at least 3 weeks. You could wire them up by hand in the meantime. Alvie made that code, we need to ask him if he is ready to release it yet. The goal is to make it all available with the first release of DesignLab, but we are not quite ready for that yet. I'm still getting everything in place for manufacturing, then I will focus on DesignLab.


Let's see what Alvie says.


Link to comment
Share on other sites

Howard: I can upload all software/code this week. The HDL is already in github: https://github.com/alvieboy/ZPUino-HDL/tree/work-0200/zpu/hdl/zpuino/rgb


The display is 64x32, using two cascaded 32x32 panels, with 24-bit color.


I am now preparing a larger display, a 96x64, but with less bits per color due to technical constraints on the panel side (it will be 21-bit).


Feel free to contact me at my email address (zpuino@alvie.com) for more details.



Link to comment
Share on other sites



We are now using email, but I'd like you to take a look at this set up I am preparing for Lisbon Mini Maker Faire:






96x64. Works perfectly @ 21 bits per pixel, at around 60Hz refresh rate. Requires two controllers on ZPUino, one for each 3x horizontal panel. Programming is however simpler, it just assumes a framebuffer of 96x64.


Plays video streams very well. :)

Link to comment
Share on other sites

@Howard: It's a single processor. The two controllers have different framebuffers, so no sync is needed (they are synced by the very nature of the design).



how do you translate video to matrix values. I have to do it semi manually with a bitmap to C converter.


Well, I feed it with raw RGB stream, with the proper frame size. So I don't actually need conversion on the ZPUino side, just plain copy over to the internal framebuffer.

Note: This is not compiled. The stream is sent through the serial port. For images, I do convert them to "C", or otherwise store the images/videos as files in a SD card or SPI flash.



@Hamster: don't give me more ideas :P


Ok, here's the state: it works, I can feed it full video @15FPS through the USB serial port (3mbps), and now, to make thinks a little bit more fun:

$ ./mplayer -vo helpMPlayer 1.1-4.7 (C) 2000-2012 MPlayer TeamAvailable video output drivers:        vdpau   VDPAU with X11        xv      X11/Xv        gl_nosw OpenGL no software rendering        x11     X11 ( XImage/Shm )        xover   General X11 driver for overlay capable video output drivers        sdl     SDL YUV/RGB/BGR renderer (SDL v1.1.7+ only!)        gl      OpenGL        gl2     X11 (OpenGL) - multiple textures version        dga     DGA ( Direct Graphic Access V2.0 )        fbdev   Framebuffer Device        fbdev2  Framebuffer Device        matrixview      MatrixView (OpenGL)        aa      AAlib        caca    libcaca        v4l2    V4L2 MPEG Video Decoder Output        directfb        Direct Framebuffer Device        dfbmga  DirectFB / Matrox G200/G400/G450/G550        xvidix  X11 (VIDIX)        cvidix  console VIDIX        null    Null video output        mpegpes MPEG-PES to DVB card        yuv4mpeg        yuv4mpeg output for mjpegtools        png     PNG file        jpeg    JPEG file        gif89a  animated GIF output        tga     Targa output        pnm     PPM/PGM/PGMYUV file        md5sum  md5sum of each frame        mng     MNG file        zpuino  ZPUino RGB panel stream <--- LOOK HERE!

I added support in mplayer for streaming to the RGB panel. This means I can play almost *everything* on it.


The bad news is: panels do draw a lot of power if I display all whites. I was not able to power them properly yet, cause they seem to draw more than 10A@5V on this scenario. Displaying normal video from my webcam seems to only draw about 2.5A, so it might just work.


Only four rows are lit at a same time. This means 96*4 RGB leds at about 6% PWM. I was expecting it to be lower, but... The panel logic itself eats about 250mA with all-black pixels.



Link to comment
Share on other sites

@hamster: I could swear I replied to you earlier, but seems to be gone:no need, thanks. I think I have it all sorted out now. Was harder that I thought: I had to split PSU for each of the panels, otherwise yellowish LED would light up.


I'm ready now for the Faire:






And, despite low PWM (at most 6%) it's pretty much visible under Portuguese sunlight:




Good :)

Link to comment
Share on other sites

Alvie, I am more than happy to ship you one of these if it will help the cause....


PM me if interested!


If you read the description of that it would not be very useful as each voltage terminal is fused at 1.25A so not useful for supplying 10A@5V unless you want to short/change the fuse.

Link to comment
Share on other sites

@offroad: standard PC power supply (300W) seems to handle it very well, as long as I do distribute power evenly (i.e., one 5v+GND per panel, or per two panels at most).


But even the PSU gets a bit noisy on all-whites. No excessive heat though - so it should handle it properly. I still have to power SoundPuddle with the 12V output, but should present no issues.

Link to comment
Share on other sites

And now ... we have menus:




Easy as a piece of cake to work with:

static void createMenus(){    subMenu *config = new subMenu("Opcoes");    subMenu *modo = new subMenu("Modo");    config->appendChild(modo);    modo->setParent(config);    modo->appendChild( new menuItem("Video", &onVideo) );    modo->appendChild( new menuItem("Bricks", &onBricks)) ;    modo->appendChild( new menuItem("SoundPuddle",&onSoundPuddle) ) ;    modo->appendChild( new menuItem("< Voltar",&menuSwitchTo, config) ) ;    subMenu *controle = new subMenu("Controle");    config->appendChild(controle);    controle->setParent(config);    controle->appendChild( new menuItem("< Voltar",&menuSwitchTo, config) ) ;    config->appendChild( new menuItem("Sair",&exitMenus) ) ;    menuSetTop(config);}

Menu is controlled with the WII Chuck, on this example.



Link to comment
Share on other sites

  • 4 weeks later...

Panel was in display (actually, not for fun any more!) in a real event here in Portugal, the so-called UTAX (Ultra Trail Aldeias do Xisto). Two major races (one with 109Km [67miles], and another with 48Km [30miles]), pretty harsh mountain trail. Panel displayed times for both races, as well as classification and other goodies, all controlled via WiFi (with a TI CC3200 connected to Papilio Pro).


I had to take photos with my mobile, which is *awful* at this. But here are some:







Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.