bradsprojects has been created and maintained by me - Brad!

  This was my first attempt at an RGB LED POV Display.

POV stands for persistence of vision. This type of project works with our eyes relatively 'slow' refresh rate. When we flash some LED's with certain information and then spin those LED's, our eyes don't see the fast flashes, but rather sees a complete picture 'drawn' in the air.

The circuit uses just 8 RGB leds which are mounted vertically and when spun horizontally it gives the illusion of having an 8×85 pixel display.

 
 

Here are a few of photos of my original design (without a position sensor)

The first photo shows the display on but not yet spinning.

 
 

The drawing process is really quite simple. The pic microcontroller puts 00000000 00000000 on the eeproms address bus (selects the first address) This byte of info (at that address) is now placed on the data bus and all RED GREEN AND BLUE 74373’s are connected to this data bus. We only want red to grab this first byte of data so the microcontroller enables the red latch then closes it which means we have saved that byte to the RED 74373. Then it increments to the next address an latches that byte to the GREEN 74373 and then we increment to the next address then latch it to the BLUE 74373.

Now that all 74373’s have their data - the microcontroller then enables their outputs which sends the data to the LEDS. so we have just displayed one column (of the 85 per frame) So these leds will stay on for just a fraction of a second then turn off and we repeat the process to draw the next column and keep doing this untill one whole frame is drawn (85 columns).

The key thing to remember here is that it always follows the sequence RED, then GREEN then BLUE.

Lets do some math - if it takes 1 byte of red, 1 byte of green and one byte of blue per column then it is 3 bytes or 24 bits per column - then if there are 85 columns per frame that means that there is 3×85 = 255 bytes per frame or 2040bits per frame. If we use a 27E512 EEPROM then this holds 64kbytes which means 64k / 255 = approximately 255 frames. This means we can cycle through frames to make animations! See the next videos for examples of this.

I have also added a sensor to it so it knows when to start drawing each frame (without the sensor the project is subject to drifting (i.e the display does not stay in the one place no matter how much you try to adjust the motor speed) You can see the difference between having a sensor and not having a sensor in my youtube videos. The RETROBRAD logo has no sensor and therefor keeps drifting, but the other videos do have the sensor and therefor remain in the one position. The sensor is made of an IR LED shining straight into a photo diode. When there is nothing interrupting the signal, the photo diode has max current and therefor drops max voltage across it’s resistor. This means that the npn transistor connected to it will saturate and therefor send a logic 0 to the microcontroller. But when the sensor passes the nail (so it interupts the light beam, the photo-diodes current decreases causes the voltage of the resistor to decrease and therefor turns off the transistor - this then sends out a logic 1 to the microcontroller to say that we’ve passed the check-point and to start drwaing the next frame -  See the schematic for more information.

I am also working on using brushes to transfer +5v dc to the circuit which means i wont have to use batteries. 

 
 

You can download the assembly source code here

Things to note in the source code

• You can easily define how many frames of animation are in your animation loop by changing the total_frames variable to how ever many frames you have. The flying animation example has 178 frames. If you only have one steady picture or frame, simply put in the number 1.

• You can change the speed at which the animation runs by changing the frame_counter variable. (the higher the number, the more times each frame repeats itself therefor the SLOWER the animation speed.

• You can change the number of horizontal pixels by changing the pixel_counter variable. I set it to 85 because it is just about the perfect number for if we had an 8-bit address bus (which we sort of have with the microcontroller and with the help of the 74373’s we convert it to a 16-bit data bus.) So to draw each frame we need (1 byte of red x 85) + (1 byte of green x 85) + (1 byte of blue x 85) this comes to 255bytes  which is basically the limit for an 8-bit address bus. So i use the lower 8-bit address lines as my frame data, and then the upper 8-bit address lines as my frame counter. this gives me a total of upto 255 frames of animation.

 
 

I have uploaded a Youtube video showing you how to use this excel spreadsheet to draw your own pictures and animations. I hope it helps! you can view it here

 
I had a friend do up an excel spreadsheet to make it easier to draw the pictures and animations to use on the display. You can download the spreadsheet file below, you will also need a hex editor program I thoroughly recommend HxD - it is free and is just so easy to use. You can download HxD here

If you wish to donate to HxD you can visit their page here

You can download the spreadsheet paint program here

NOTE
You will require microsoft excel or a compatible spreadsheet program to use the painter. You will also need to make sure that you have a couple of addins enabled or the spreadsheet will not work! Here's how to check that you have them installed:

Open Excel and click on the 'tools' menu item and then click on add-ins.
 
You will then be presented with this add-ins screen. You need to make sure that your computer matches the check boxes in this image:
 
From here, you have three sheets - INPUT - WORKING - OUTPUT. You have your eight colours at the top left of screen, to draw a picture you need to copy and paste whatever colour you want, from the pallette into the 8x85 working area of the screen. You don't have to paste one square at a time, but you can select multiple squares and paste at the one time. once your picture is drawn, you then click on the OUTPUT sheet, Then copy all of the hex numbers underneath "Copy and paste this next line into the hex editor" You then paste this data into you hex editor and then save it. Then open the file in your programmer software and write the hex file to you eeprom.
 That is a really quick runthrough but i will upload a youtube video showing you exactly how to do it, including animations.
(if you have any problems you can always post in the forums) 

 
 

Parts List

 
8x Common Cathode RGB LEDS (5mm)  
1x 16f648a or 16f628a microcontroller  
5x 74373 tri-state buffers / latches  
1x 27C512 / 27E512 EPROM / EEPROM  
1x IR LED  
1x Photo Diode  
1x 2n2222 NPN Transistor  
24x 100 ohm resistors  
4x 10k resistors  
1x DC motor
 
 

Unfortunately I lost my original PCB layout files when I upgraded my laptop. BUT Dai Omie has been very kind to share his own version of the 8x85 PCB layout files. and you can download all you need to know in this archive which you can download here

And here are some images of his completed project. Very professional!

 
 

You can download the schematic here

 
 

(See my 32×64 POV display to see how i managed to transfer power to the spinning board)
 
I have been asked by a number of people - "How do you mount the board to the motor?" we'll here is the answer for you all!
I bought a pack of electrical termination screw connectors from a hardware store which cost just a few dollars. The first photo shows you one straight out of the packet.

The second photo shows it taken out of the plastic housing.

I used a file to rough up one end of the shaft. then I soldered this to the underside of my circuit board so that it was secure. then i screwed the two grub screws back in, and then you can put the motor shaft inside this metal casing and then tighten the two grub screws to hold it in place. And that's it! that's how you mount your circuit board to the motor.

 
 

The second photo shows the display on and starting to spin.

 
 

This third photo shows the display on and spinning at full speed - thus creating an image in the air.