Introduction: Magic POV Wand (yet Another POV Toy)

Picture of Magic POV Wand (yet Another POV Toy)

NEW! (11/14/2014) This kit has been upgraded to a professionally manufactured circuit board and the price has been reduced to only $9 per kit. (And for educators, a discount price of only $8.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 $9! )
Buy kits at

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

Step 2: Assembly

Picture of Assembly

1. Begin by inserting and soldering all seven 200 ohm resistors.  Make a nice tight 90 degree bend on both wire leads and insert all the way so that the resistors rest snugly against the board. Doing this will make it easier to install the LEDs between the resistors. 
2. Install and solder in the slide switch and two button switches as shown in the diagram. 
3. Now install the IC socket. Do not insert the programmed microchip yet. Solder it in.
4. Install the battery clip. (Notice, when installed properly the positive post extension will extend toward the center as shown and the battery clip itself will extend slightly past the end of the board.)
5. Finally install the 7 LEDs being careful to orient correctly.  Notice that the positive leg (longer lead) will always be on the right when the board is oriented as shown.

Step 3: Testing the Circuit

Before installing the 18-pin pre-programmed microcontroller, you will want to test the circuit by following these steps.

1. Put in the battery (positive side up) and turn on the circuit with the switch.

2. Using a spare piece of wire stripped at both ends, insert one end into the IC socket pin 5. With the other end briefly touch the following pins to verify that the corresponding LED lights up.  Note, only one LED should light at a time. Touch these pins in order to light the LEDs starting with the last LED on the right.  Pin 9, 16, 15, 13, 12, 11, and 10.  If any LEDs do not light up, carefully check the solder joints for short circuits.  Use a hobby knife to ensure no solder is bridging from one track to an adjacent track.

3. If you have a digital multi-meter, it is also a good idea to check the operation of the push buttons. Resistance between pin 5 and 7 should go to zero when the right button is pressed and resistance between pin 5 and 8 should go to zero when the left button is pressed.

4. If all these tests pass, you are ready to turn off the circuit and plug in the microcontroller IC.  Be sure to insert it the right direction.  Pin 1 is indicated by a small indention on the IC, pin 1 should be inserted away from the LEDs. (Nearer to the battery)

5. Now switch the circuit back on.  All 7 LEDs should be flickering.  Take the circuit into a dark room and wave it in front of a mirror.  If you see the letters ‘ABC’ repeated over and over again, congratulations, it worked!  Now let’s move on and make your own message!  See next page for instructions programming your own message.

Step 4: Programming Your Own Message

Picture of Programming Your Own Message

Changing the displayed message is easy once you know the trick.   A message of up to 60 characters can be programmed, however long messages can be difficult to read.

Start by putting the circuit in programming mode.  This is done by holding down one of the buttons (either one) while turning on the switch.  The LEDs will briefly flash in sequence -Night Rider style- letting you know that it is ready to be programmed.

After you let go of the button, the microcontroller will display the pattern for the first character.  If this is the first time you’re programming the message, you will see the pattern for the capital “A” which is that all LEDs are off except the one on the end. (see chart above) To change the first letter, press the ‘Change’ button (the one nearest the LEDs) repeatedly until the pattern for the desired letter appears.  You may find it easier to say the alphabet to yourself as you push the button since each pattern will appear in alphabetical order.  If the letter you want is in a different column of the chart, you will find it faster to press and hold the button.  Holding down the button will fast-forward to the top of the next column and stop there.  If you pass the desired letter, simply continue pressing and holding the button until you loop back around to it again.

Once the pattern for the desired letter appears, press the “Accept” button or the button on the left one time.  Doing so will save your character selection and begin displaying the character that is in the second position.  You then repeat the process by pressing the right button repeatedly until the pattern for the desired letter appears and then pressing the ‘Accept’ button. 

IMPORTANT! After accepting the last letter of your message, you must accept one more pattern with all of the LEDs OFF ( pattern).  This is the end-of-message indicator.

Finally turn the power switch off and then on again to try out the message. That’s all there is to it! Have fun!

Step 5: Ideas for Displaying the Message

Picture of Ideas for Displaying the Message

Here is one idea for displaying your message.  I'm sure you can think of some others.

Here I made a handle by turning block of wood on a lathe.  You could accomplish the same thing by using a dowel.  Get a 12" ruler or a paint stick and drill a small hole in the end.  Insert a small screw through it into the end of your handle so that it can spin freely.

You can mount the circuit onto the other end of the ruler or paint stick however you wish.  I simply wrapped a rubber band around it a few times.

With a little practice, you should be able to get it spinning smoothly with very little hand movement.  For best results, take it into a dark room like a bathroom and spin it in front of a mirror.  Keep in mind that if you are using a mirror, you will need to spin it in the opposite direction than if you are showing it off to people in front of you... otherwise the message will be backwards!


franmazz (author)2011-04-19

can you add the printed circuit? please

rleddington (author)franmazz2011-04-22

Sorry for the slow reply. Assuming you mean artwork, I don't actually have a printed circuit that you could use for etching. If you mean the schematic, that's already provided as one of the pictures. If you're familiar with any circuit design tools such as EAGLE, I'm sure you could create a board layout fairly easily by following the schematic. If anyone happens to make one, I'd love to post it here for others to use. If you would just like an circuit board, they only cost $2.50 at

palurdo (author)rleddington2012-01-07

Thankyou for sharing the code and schematic. I uploaded my PCB design for everybody who want to use it without having to design it from scratch I had to do because mi case it was a matter of "emergency gift" (when you remember that today is an important day for somebody, you know...)

I forgot to include a power switch so you have to remove de battery if you want to turn off the device. Once built the PCB and soldered the parts, the circuit worked as you described, rleddington.

Again, Thankyou very much.

despoto (author)palurdo2012-03-31

Thank you for link with deleted file ...

palurdo (author)despoto2012-04-18

Ok, try this link:

It's a permanent link

SsC2 (author)palurdo2017-04-20

Can u tell me how u porammed the pic pls...

palurdo (author)despoto2012-04-18

Sorry, i didn't notice the file was deleted. This copyright conspirancy than came from the megaupload issue has led everybody crazy about storing files at the cloud. Please keep in touch so i will upload again the file quite soon in a different server.

Thankyou for your understanding.

rleddington (author)palurdo2012-01-10

Thanks palurdo,

I'm glad to hear it has worked for you. Thank you for uploading the PCB design, I'm sure others will be glad you did.

SsC2 (author)2017-04-19

should i give the code to it or already the code is given to it and i should mount it to the socket directly

MdS97 (author)2016-11-28

please hex file

benjura (author)2015-04-18

can please someone send pcb on my mail

anoopanil (author)2014-09-16

how can i generate hex file from a c program file

very urgent................... pleaseeeee..............

anoopanil (author)2014-09-16

how can i generate hex file from a c program file

very urgent................... pleaseeeee..............

anoopanil (author)2014-09-16

please explain progam from void programming.........................

NaveenK1 (author)2014-08-05

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)NaveenK12014-08-06

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.

kishore001 (author)2014-04-30

Please mail me the pcb design, I will be grateful to you

Pieter Jamneck (author)2013-01-14

Check out my videos:

Pieter Jamneck (author)2013-01-13


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


Excellent! Nice job Peiter, I can't wait to see the video.

Pieter Jamneck (author)2013-01-07

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!



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.)

Pieter Jamneck (author)2013-01-06

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


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.

Pieter Jamneck (author)2013-01-03

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!!!


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 Wheel (author)2012-11-24

Can you make the .hex file for a pic16f84a please? I would appreciate it!

rleddington (author)The Wheel2012-11-24

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

The Wheel (author)rleddington2012-11-24

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.

jacoman (author)2012-11-11

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)jacoman2012-11-12

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.

jacoman (author)rleddington2012-11-12

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)jacoman2012-11-13

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.

jacoman (author)rleddington2012-11-14

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)jacoman2012-11-14

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 Wheel (author)2012-11-04

Here is my schematic and pcb for eagle. It's working perfectly!

rleddington (author)The Wheel2012-11-04

Excellent! nice work.

The Wheel (author)rleddington2012-11-05

Thanks. I'll post a video of it later. How did you convert the .c file to .hex?

rleddington (author)The Wheel2012-11-05

I compile using SourceBoost's C compiler. Here's a link:

The Wheel (author)The Wheel2012-11-05

a, and I made the pic programer too. It uses PICPgm software. Here is the schematic and pcb.

nodoubtman (author)2012-07-12

works with pic16f628a?


rleddington (author)nodoubtman2012-07-13

Did you get it working? It should work with 16F628A.

nodoubtman (author)rleddington2012-10-24

yes i finally did, i had to shake it a little :)

thank you!

rleddington (author)nodoubtman2012-10-24

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!

nodoubtman (author)rleddington2012-10-19

how can i use it?? and see the letters finallY?? :(

rleddington (author)nodoubtman2012-10-20


nodoubtman (author)rleddington2012-07-13

not working yet :(
i will try it again, does 220 ohm resistor is okay?


rleddington (author)nodoubtman2012-07-13

220 should be fine, however if you're using blue LEDs, you will need to change the voltage to 5-6 volts.

nodoubtman (author)2012-10-23

only one led is lit up brighly the others are not too bright, is it normal??

thank you!

nodoubtman (author)2012-10-23

do you have to make it turn to see the letters?? with a motor ??

thank you so much!

About This Instructable




More by rleddington:Web Controlled 8-Channel PowerstripMagic POV Wand (yet another POV toy)
Add instructable to: