My current goal is to continue work on the @tnt rgb_panel design. It provides three modes of operation:
Racing the beam
I hope to put things together in a way that we can include it as one of the icebreaker-fpga github organization repositories, with all the needed documentation and software. The end result should be the ability to get going as fast as possible, and play your own GIFs, videos and demos on your LED panel.
There are a bunch of bits and peaces besides the main repository of @tnt that need to be tidied up and combined.
WIP C implementation of a video streamer command line tool that needs to be finalized.
Python streamer script improvements @tnt made during 35C3 that need to be merged into the main script.
In the last few days I spent time setting up, testing and contributing to the shinyblink sled project. If you are not aware, sled is a project that was started by Adrian “vifino” Pistol and a bunch of other hackers as a way to drive large LED displays during hacker events like EMF or 35C3 and so on.
This clip is from 35C3
The cool thing about sled is that it is very modular and meant to be expanded. Stary wrote an output driver that can send the frames that sled graphics plugins generate over to the iCEBreaker. And in turn drive the LED panel driver HDL design@tnt created.
I thought this was all super cool and I wanted to see the effects displayed on my own 192x128 panel. My panel consists of 6 LED panels, each panel is 64x64 pixels with 2mm pitch, also known as P2 64x64 panel. (These are the exact same panels as the ones that will be part of the LED panel tier of the iCEBreaker crowd funding campaign)
It took a little bit of doing, as the output driver uses the libmpsse. Unfortunately that library by default asserts all FTDI pins as outputs. As we are using the same interface to drive the data into the FPGA as well as to program the FPGA configuration flash, you need to be more careful than that. On the first bank of the FTDI chip we also have the reset and chip select pins of the FPGA. This means we have to leave those pins high or floating if we want to talk to the FPGA itself while it is running using an additional chip select pin.
At the end I had to patch libmpsse so that it did not assert the iCE_CRESET pin.
After getting that to work I had to figure out what the correct command line incantation of sled is to drive my display. As my display is hooked together in an S form not Z form. Which means that the first row of panels is connected from left to right, and second row is from right to left. The reason to wire it in this way is to avoid the need of very long ribbon cables that can reach from the very far right side of the display to the very left.
But vifino and the gang already ran into that problem. This means there is a special filter module that mapps the rendered data onto an S shape of displays. This module is called flt_smapper. What I did wrong though is that I have mounted the panels in a different S shape than the smapper module expected me to. This resulted in my first patch that I contributed to sled. It allows the use of negative smapper fold count value. When using the negative value it reverses the order of the fold panes.
At the end the correct calling convension for my display was the following:
Now that I got this all to work I could not stop myself and had to put together my own effect for the display! It had to be the classic fire effect as it was the first demo effect that I read up on when I was learning to program many years ago.
All the changes are now part of sled and you can try them out even without the iCEBreaker or LED panel hardware. Sled has a neat SDL2 based debug output where you can explore all the different graphics effects. Obviously it is not the same as the LED panels, their high contrast and large pixels are mesmerizing. And a camera does not give them justice. None the less you should give sled a try and maybe even contribute an effect to it.
My next todo on sled is porting the mpsse driver to a different implementation, so that you don’t have to mess around with a patched version of libmpsse. I will let you know here when that is done.
That would be it for this update. Let me know if you have questions here in the thread. Also join the dedicated sled gitter channel, or in the iCEBreaker gitter channel and let us know if you have any ideas or questions.