We have a square, 16×16 LED’s, and we make it turn around an axis (around 1100 rpm) to obtain a 3D cylinder. Then we divide this cylinder into 16 slices, which make us 32 positions (two per slice, one for each direction in order to create 360° LED’s)So our device display a 3D cylinder: 16 LED’s High x 16 LED’s of diameter x 32 positions of the plate. which make us 8192 LED’s to control, and this 16 times per seconds…Each voxel is coded on 24 bits ( 8 per color) which allow us to display more than 4 million colors.
The architecture is really simple: One gumstix in the center which talks with 4 LED drivers and one IR receiver, lets explain their roles.
The holograms are stored on the SD card of the Gumstix, if there are not already computed for the HARP display, we have two little programs on the Gumstix which will adapt them.
When they are ready we pass the hologram to our HARP kernel module, our HARP driver, which will display it.
But how does it works?
This is where the IR receiver get in the game. At each turn of our plate, it return an interruption which is detected by our HARP kernel module.
Between two tops we can measure the time our plate needed to make a hole turn and so we use it in order to predict the time the plate will need to make the next hole turn, and by dividing this time in 32 we get our 32 positions.
In a word: whatever is the rotation speed of our system, we will always display the 32 positions at the same place, only the global visual effect would be influenced. The faster it turn, the better the sharpness of the Holograms will be.
When the plate is at one position, the HARP kernel module send to the drivers the corresponding frame of the corresponding hologram, line by line, for that we emulate four SPI buses which transfer the data to the drivers following the bit banging technique . This is all so one of the main reason for why we use a kernel module: in order to increase the data rate of our SPI buses.
At the beginning all our software were executed into the user space, but the software were so slow that it could only display 16 positions, by implementing a kernel module we multiply the data rate of each SPI buses by 16 !
So why didn’t we choose to display 16 times more positions instead of only multiply it by 2 ?
Our drivers can only control 8 RGB LED’s, which means that we can control one line of each matrix at the same time. So how do we display the 8 lines of each matrix ? We use a second time the POV in order to display all the lines of each matrix at each positions, and in order to get the better brightness of our holograms we decided to display as much as we can from frame at one position. (Depending of the rotating speed a frame could be displayed from 2 to 100 times per position)