Picture of Magic POV Wand (yet another POV toy)
With Handle.JPG
NEW!  (7/12/2009) This kit has been upgraded to a professionally manufactured circuit board and the price has been reduced to only $8 per kit. (For educators, a classroom set of 32 kits is being offered for only $6.00 per kit.)

This Persistence of Vision (POV) toy is simple to assemble and fascinating to play with.  It is a good introduction to digital electronics and soldering.  It works by flashing each column of “pixels” in rapid succession producing the illusion of text in mid-air.  You can program in your own messages using two push-buttons.  The message is saved in “Flash” memory and will remain in the MCU’s (PIC16F628a) memory even when powered off.  The message can be changed as often as you like.

This POV toy is similar to the MiniPOV3 with a few important exceptions:

*  Button cell battery - more portable.  Easier to mount onto a bicycle or other spinning object.
*  Change the message without using a computer.
*  Less components to solder in.
*  Less expensive ( Now only $8! 

Buy kits at

Watch Video:
Remove these adsRemove these ads by Signing Up

Step 1: What you need

Picture of What you need

Soldering iron

Everything pictured here is included in the kit.  If you already have most of these components, you can order the circuit board and/or the programmed chip individually.

ID Qty Part
A 2 Momentary Push-buttons
B 7  Diffuse Red LEDs
C 7 200 ohm resistors
D 1 Mini Slide Switch
E 1 18-pin IC Socket
F 1 Programmed Integrated Circuit
G 1 CR2032 Button Cell Battery
H 1 Button Cell Battery Clip
I 1 Engraved Circuit Board
1-40 of 105Next »
NaveenK127 days ago

Hii sir very nice project but iam facing some errors with system.h and eeprom.h when i compiled ur .c and . hex file.. how could i get these for successful compilation in my pic16f628a ???????????? please help me sir .... !!!

rleddington (author)  NaveenK126 days ago

Hello NaveenK1,

You can just download the .hex file from here so you don't have to compile. If you're not using SourceBoost, you'll probably have to make quite a few changes to the code to get it to compile.

kishore0014 months ago
Please mail me the pcb design, I will be grateful to you
Check out my videos:


I have build the POV with the IR interface, works great!!!! Thanks for all the help on the hex file!
I will post a shortcut as soon as I uploaded my video to Youtube.

Thanks Again!!

Kind Regards

rleddington (author)  Pieter Jamneck1 year ago
Excellent! Nice job Peiter, I can't wait to see the video.
I found the two line's in the code and un comment them. SourceBoost gives me an error:

"Faled to open debug/new code.hex"
Sorry for all the posts, I dont know Source boost that good. Thanks for all the help!


rleddington (author)  Pieter Jamneck1 year ago
No problem Pieter, I sent the modified .hex file to your e-mail. Let me know how it goes. If anyone else reading these comments wants to syncronize the POV toy with a sensor to stabilize the image, just let me know and I'll send you the modified .hex file. (rleddington -at- gmail dot com.)
Thanks for the reply.

Stil does not want to compile!! I think its me doing something wrong.
Could you please email me the changed hex file.

I am going to use a NPN transistor to pull RB0 to GND via a IR TX&RX.
Thanks again for you reply!!!

Kind Regards

rleddington (author)  Pieter Jamneck1 year ago
Here’s what you need to do:
In SourceBoost, right-mouse-click on the project name and select “Add file to project”
Then navigate to:
C:\Program Files\SourceBoost\Lib\eeprom.pic16.lib

Add that to your project. Then try building again.
I have tied to edit the code with sourceboost but no result. I want to activate RB0 as a input for a speed switch as per you commet below "Download the source file and SourceBoost C compiler. In the source file there is an infinate loop that starts with "while(1)" . Inside of that loop you'll put something like:
while(RB0); // Wait for RB0 to go low
while(!RB0); // Wait for RB0 to go high
That should just sit there until RB0 is pulsed, then it will display the message and go back to waiting for the pulse."

Any help PLEASE!!!

rleddington (author)  Pieter Jamneck1 year ago
Hello Pieter,

You may have changed the code in the wrong while loop. The one to change is at the very end of the code in the main() routine. The lines you need are already there, you just need to un-comment them. Give that a try and if you're still having problems, I can probably build you a hex file and e-mail it to you.

while( 1 )
The Wheel1 year ago
Can you make the .hex file for a pic16f84a please? I would appreciate it!
rleddington (author)  The Wheel1 year ago
Hello, I'd love to help, but I'm afraid the program wouldn't work on the 16F84. For one, the 16F84 doesn't have as much program memory as the 16F628 so the program wouldn't fit. Also the 16F84 does not have internal oscillators so you would also have to change the hardware by adding some sort of clock input. Then you would have to change the timing to match your oscillator. You'd be better off just ordering a programmed 16F628 chip for a $3.50 at
OK, thanks anyway. The problem is that in my city momentary aren't any 16f628s. I can order them with 4-5$ but it's not so important. I have pic programator and i sucsessfully programed a 16f628 with the hex you uploaded and it's working perfectly.
jacoman1 year ago
I made my pcb and it works. I put it on a piece of wood to make a propeller and then on a motor, but the image is instabl iIt runs too fast and flashes.
How many rpm need i to have for a stable image?
Many thanks for this project it's really amusing.
rleddington (author)  jacoman1 year ago
I expect around 200rpm would be ideal depending on the length of the message. If you want the image to be really stable, you are going to want to add a syncronization signal of some sort. RB0 is tied to a weak pull-up resistor so if you can have a switch that connects RB0 to ground momentarily each time around the circle at the exact same spot, it would be easy to syncronize the message from there. You would have to change the program to wait for the signal before displaying the message. Many POV toys have a tilt switch to signal the start of the message but that won't work for a spinning propeller because the tilt switch would never activate. You would need some sort of brush contact or a non-touch sensor such as a hall-effect switch or an infrared emitter/detector pair. It would be fun to play with a motorized propeller, I just havn't taken the time to do it.
Thanks for your reply and your kindness.
Well I can put a hall effect to RB0 with a magnet to have impulse.
How can I change the program to wait for the signal before displaying the message?
rleddington (author)  jacoman1 year ago
Download the source file and SourceBoost C compiler. In the source file there is an infinate loop that starts with "while(1)" . Inside of that loop you'll put something like:
while(RB0); // Wait for RB0 to go low
while(!RB0); // Wait for RB0 to go high
That should just sit there until RB0 is pulsed, then it will display the message and go back to waiting for the pulse.
I have a ss495a hall sensor but I don't know if it's OK, it works on 5v.
I guess gotta find one 3v, right?
rleddington (author)  jacoman1 year ago
I bet it would work for 3V. If you want, you can always change the voltage in the circuit to 5V. I think the PIC has an operating range from 2.5V to 6V. The resistors should be fine too, the LED's will be just a little bit brighter.
The Wheel1 year ago

Here is my schematic and pcb for eagle. It's working perfectly!
rleddington (author)  The Wheel1 year ago
Excellent! nice work.
Thanks. I'll post a video of it later. How did you convert the .c file to .hex?
rleddington (author)  The Wheel1 year ago
I compile using SourceBoost's C compiler. Here's a link:
a, and I made the pic programer too. It uses PICPgm software. Here is the schematic and pcb.
nodoubtman2 years ago
works with pic16f628a?

rleddington (author)  nodoubtman2 years ago
Did you get it working? It should work with 16F628A.
yes i finally did, i had to shake it a little :)

thank you!
rleddington (author)  nodoubtman1 year ago
Excellent! I found that putting it on the end of a stick and then use a nail or something on the other end of the stick to spin it in a big circle works really well. Congratulations!
how can i use it?? and see the letters finallY?? :(
rleddington (author)  nodoubtman1 year ago
not working yet :(
i will try it again, does 220 ohm resistor is okay?

rleddington (author)  nodoubtman2 years ago
220 should be fine, however if you're using blue LEDs, you will need to change the voltage to 5-6 volts.
nodoubtman1 year ago
only one led is lit up brighly the others are not too bright, is it normal??

thank you!
nodoubtman1 year ago
do you have to make it turn to see the letters?? with a motor ??

thank you so much!
turkin_ar1 year ago
Hi! i'm very new in this world of pics.. i download de .c and i can't compile it with CCS, because i don't have system.h and eeprom.h.. Where can i get them?? This pov is very simple, it's excelent. Congratulations!!
rleddington (author)  turkin_ar1 year ago
Hello! Welcome to the fun world of pics. Although CCS is an excellent choice of compilers, this particular program was written and compiled with the SourceBoost compiler. That's why you're having problems getting it to compile. I'm sure it's possible to tweek the program so that it compiles with CCS but if you're new to programming, it's probably easier to download SourceBoost and use it for this project. Check it out at You can also just download the .hex file and skip the compiling unless you want to change the code.

Thank you for you kind words. This was a really fun project to develop. Feel free to contact me anytime. You can get my e-mail address from my website
anilbotsa2 years ago
Can we buy this kit?
rleddington (author)  anilbotsa2 years ago
Sure no problem. I sent you an email.
1-40 of 105Next »