POV Clock

kam

Member
Hi All,

Has anyone tried making a POV clock with a picaxe? I couldnt find any info about it on the forum, but then again i may have not searched that well.

I got the idea from this:

http://au.youtube.com/watch?v=no2_M_b059g

I cant figure out how the data would be displayed with the rotation and one LED per row... guess it requires timing issues.

Seems like making a whole new Display panel from the start...:confused:

Any help appreciated.

ThanX
 

boriz

Senior Member
I build what I called a TextWand hand held POV device. Here’s the code:
Code:
eeprom 0,(124,18,17,18,124,0,127,73,73,73,54,0,62,65,65,65,34,0,127,65,65,65,62,0,127,73,73,73,65,0,127,9,9,9,1,0,62,65,73,73,58,0,127,8,8,8,127,0,65,127,65,0,0,0,32,64,64,63,0,0,127,8,20,34,65,0,127,64,64,64,64,0,127,2,12,2,127,0,127,2,4,8,127,0,62,65,65,65,62,0,127,9,9,9,6,0,62,65,81,33,94,0,127,9,25,41,70,0,38,73,73,73,50,0,1,1,127,1,1,0,63,64,64,64,63,0,31,32,64,32,31,0,63,64,56,64,63,0,"ABCDEFGHIJKL",0)
setfreq m8

main:
b4=138
sound 7,(120,1)
pause 60
do
	read b4,b0
	if b0=0 then
		exit
	endif
	if b0=32 then
		pause 3
	else
		b0=b0-65
		for b1=0 to 5
			b2=b0*6+b1
			read b2,b3
			pins=b3
		next b1
	endif
	inc b4
loop
pause 400
goto main
This just displays "ABCDEFGHIJKL" and makes a ‘tick’ sound for hand synchronisation. It uses a Picaxe 18A. The codes represent a 5x7 font.







Works perfectly. Should give you some ideas.
 

Andrew Cowan

Senior Member
I researched making a motorised POV display with 8 RGB LEDs, but concluded that a picaxe wasn't fast enough to do it.

A handheld one should work, though.

Andrew
 

demonicpicaxeguy

Senior Member
i was looking at a vibrating mirror laser projector, with a pic16f at 20mhz and some dual port memory it shouldn't be too hard, even a low resolution eg 100X100 is enough,
the initial idea was to be able project data onto a wall such as the news,stock quotes,weather, or even simple advertising
 

westaust55

Moderator
Have a look at this thread:

http://www.picaxeforum.co.uk/showthread.php?t=10054

I do not think that you will achieve a "fancy" clock like the U-Tube demo using a PICAXE as the PICAXE will be too slow even ran at 8MHz for fast displays and a lot of text.

The sort of "wand" that Boriz has built which may be slower operating can obviously be achieved and might be a better starting point.
 

kam

Member
Thanks for the links guys, seems do-able.

Thanks Boriz for the Code and the Pics. I'll try it out.

I was thinking of a few things.

With the motor, would it be a good idea to actually use a seperate controller. I noticed in the video that it actually uses a Floppy or Hard Drive Motor and thats a Spindle. It also requires a seperate sort of drive system. But then again, why would we need a Spindle, Dc would do... but it would be noisy and if one's gonna have this thing in the house, it would get annoying after a while.

Also with the PICAXE not being fast enough, would it be possible to use a 20MHz clock and get away with it?

Any other suggestions Welcome.
 

hippy

Ex-Staff (retired)
I researched making a motorised POV display with 8 RGB LEDs, but concluded that a picaxe wasn't fast enough to do it.

A handheld one should work, though.
It should work but does depend on the code implementation and speed of motor. A fast PICAXE, 8MHz or, better still, 16MHz or 20MHz, and a sequence of "pins=" will give you the fastest update rate and allow fastest motor speed. It may be possible to output Red in one pass, Green in the next then Blue.
 

SD2100

New Member
Here's one I made a while back using an 18x and had it fixed to a bike wheel.
It worked ok at moderate speeds but struggled at higher speeds also you need to get the code running as quick as possible.

Code:
#Picaxe 18x
setfreq m8
setint %00000100, %00000100

do:loop

Interrupt:
   'P
   pins = %11111110  
   pins = %00010010 
   pins = %00010010
   pins = %00010010
   pins = %00001100
   pins = %00000000
   'I
   pins = %00000000
   pins = %00000000
   pins = %11111110
   pins = %00000000 
   pins = %00000000
   pins = %00000000
   'C
   pins = %01111100
   pins = %10000010
   pins = %10000010
   pins = %10000010
   pins = %01000100
   pins = %00000000
   'A
   pins = %11111100
   pins = %00010010
   pins = %00010010 
   pins = %00010010
   pins = %11111100
   pins = %00000000
   'X
   pins = %11000110
   pins = %00101000
   pins = %00010000
   pins = %00101000
   pins = %11000110
   pins = %00000000
   'E
   pins = %11111110
   pins = %10010010
   pins = %10010010
   pins = %10010010
   pins = %10000010
   pins = %00000000

   setint %00000100, %00000100	
return
 

Attachments

picaxester

Senior Member
I made a pov display a couple years ago.
It worked well.
It was rotated with a computer fan motor (I cut off the blades and base).
The power was transfered with two coils, one on the motor and one on a cardboard tube.
The coil was pulsed by a simple transistor circuit.
It was triggered by a IR LED on the base and a IR photo transistor on the rotor.

Here are some pics:
http://i216.photobucket.com/albums/cc41/picaxester/DSCN5653.jpg
http://i216.photobucket.com/albums/cc41/picaxester/DSCN5654.jpg
http://i216.photobucket.com/albums/cc41/picaxester/DSCN5655.jpg
http://i216.photobucket.com/albums/cc41/picaxester/DSCN5656.jpg
http://i216.photobucket.com/albums/cc41/picaxester/DSCN5657.jpg

Maybe I'll try to find a working program and take a video :)
 

picaxester

Senior Member
Heres that video :)
The cameras frame rate makes it look worse than it really is.

Heres the code: (keep in mind it was writen a long time ago lol)
Code:
setfreq m8

b4 = 1

main:
	w0 = w0 + 1
	if w0 = 1100 then clock1
main1:
	if pin1 = 1 then hour1
	goto main1
	
clock1:
	b2 = b2 + 1
	w0 = 0
	goto main
	
mins1:
	if b2 = 0 then pat00
	if b2 = 1 then pat01
	if b2 = 2 then pat02
	if b2 = 3 then pat03
	if b2 = 4 then pat04
	if b2 = 5 then pat05
	if b2 = 6 then pat06
	if b2 = 7 then pat07
	if b2 = 8 then pat08
	if b2 = 9 then pat09
	if b2 = 10 then rsetb2
	goto mins1
	
mins10:		
	let pins = %01101100	
	pause 1		
	let pins = %00000000
	pause 1
		
min10:	
	if b3 = 0 then pat000
	if b3 = 1 then pat010
	if b3 = 2 then pat020
	if b3 = 3 then pat030
	if b3 = 4 then pat040
	if b3 = 5 then pat050
	if b3 = 6 then rsetb3
	goto min10
	
hour1:
	if b4 = 1 then pat001
	if b4 = 2 then pat002
	if b4 = 3 then pat003
	if b4 = 4 then pat004
	if b4 = 5 then pat005
	if b4 = 6 then pat006
	if b4 = 7 then pat007
	if b4 = 8 then pat008
	if b4 = 9 then pat009
	if b4 = 10 then pat0010
	if b4 = 11 then pat0011
	if b4 = 12 then pat0012
	if b4 = 13 then rsetb4 
	goto hour1


rsetb2:
	b2 = 0
	b3 = b3 + 1	
	goto mins1
	
rsetb3:
	b3 = 0
	b4 = b4 + 1
	goto mins10
	
rsetb4:
	b4 = 1
	goto hour1
	


'mins1
pat00:
	let pins = %01111100	
	pause 1		
	let pins = %10000010	
	pause 1		
	let pins = %10000010	
	pause 1		
	let pins = %01111100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto main	
pat01:
	let pins = %10000100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %10000000	
	pause 1		
	let pins = %00000000	
	pause 1						
	goto main

pat02:
	let pins = %10000100	
	pause 1		
	let pins = %11000010	
	pause 1		
	let pins = %10100010	
	pause 1		
	let pins = %10011100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto main
pat03:
	let pins = %01000100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01101100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto main
pat04:
	let pins = %00111000	
	pause 1		
	let pins = %00100100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %00100000	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto main
pat05:
	let pins = %01011110	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01110010	
	pause 1		
	let pins = %00000000	
	pause 1					
	goto main
pat06:
	let pins = %01111100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01100100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto main
pat07:
	let pins = %11100010	
	pause 1		
	let pins = %00011010	
	pause 1		
	let pins = %00000110	
	pause 1		
	let pins = %00000000	
	pause 1					
	goto main
pat08:
	let pins = %01101100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01101100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto main
pat09:
	let pins = %01001100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01111100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto main

	
'mins10
pat000:
	let pins = %01111100	
	pause 1		
	let pins = %10000010	
	pause 1		
	let pins = %10000010	
	pause 1		
	let pins = %01111100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins1	
pat010:
	let pins = %10000100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %10000000	
	pause 1		
	let pins = %00000000	
	pause 1						
	goto mins1
pat020:
	let pins = %10000100	
	pause 1		
	let pins = %11000010	
	pause 1		
	let pins = %10100010	
	pause 1		
	let pins = %10011100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins1
pat030:
	let pins = %01000100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01101100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins1
pat040:
	let pins = %00111000	
	pause 1		
	let pins = %00100100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %00100000	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins1
pat050:
	let pins = %01011110	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01110010	
	pause 1		
	let pins = %00000000	
	pause 1					
	goto mins1


	
	
'hour1	
pat001:
	let pins = %10000100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %10000000	
	pause 1		
	let pins = %00000000	
	pause 1						
	goto mins10

pat002:
	let pins = %10000100	
	pause 1		
	let pins = %11000010	
	pause 1		
	let pins = %10100010	
	pause 1		
	let pins = %10011100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins10
pat003:
	let pins = %01000100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01101100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins10
pat004:
	let pins = %00111000	
	pause 1		
	let pins = %00100100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %00100000	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins10
pat005:
	let pins = %01011110	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01110010	
	pause 1		
	let pins = %00000000	
	pause 1					
	goto mins10
pat006:
	let pins = %01111100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01100100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins10
pat007:
	let pins = %11100010	
	pause 1		
	let pins = %00011010	
	pause 1		
	let pins = %00000110	
	pause 1		
	let pins = %00000000	
	pause 1					
	goto mins10
pat008:
	let pins = %01101100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01101100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins10
pat009:
	let pins = %01001100	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %10010010	
	pause 1		
	let pins = %01111100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins10
pat0010:
	let pins = %10000100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %10000000	
	pause 1		
	let pins = %00000000	
	pause 1
	let pins = %01111100	
	pause 1		
	let pins = %10000010	
	pause 1		
	let pins = %10000010	
	pause 1		
	let pins = %01111100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins10
	
pat0011:
	let pins = %10000100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %10000000	
	pause 1		
	let pins = %00000000	
	pause 1						
	let pins = %10000100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %10000000	
	pause 1		
	let pins = %00000000	
	pause 1						
	goto mins10

pat0012:

	let pins = %10000100	
	pause 1		
	let pins = %11111110	
	pause 1		
	let pins = %10000000	
	pause 1		
	let pins = %00000000	
	pause 1						
	let pins = %10000100	
	pause 1		
	let pins = %11000010	
	pause 1		
	let pins = %10100010	
	pause 1		
	let pins = %10011100	
	pause 1		
	let pins = %00000000	
	pause 1			
	goto mins10
 
Last edited:

tiscando

Senior Member
I am also making a POV display: I am using an old VCR's Video head drum which is 3-part:) (one is the base, which connects to a shaft, and the shaft connects to the head). I dismantled 4 old VCRs so far, and 2 of them are very identical (including their video heads, which is the 3-part design above:)). At the moment, I am creating a brushless motor driver. See the thread about driving a 3-phase stepper motor.

Can a Vcc square wave be fed into the resonator pins of a 28x1 to allow exact synchronisation for 2 or more picaxe 28x1s?
 
Last edited:

hippy

Ex-Staff (retired)
Can a Vcc square wave be fed into the resonator pins of a 28x1 to allow exact synchronisation for 2 or more picaxe 28x1s?
Possibly not. The problem comes in actually synchronising them. Even if they turn on at the same time I don't know if they would come out of their PICmicro power-up delays at the exact same time so everything could be out of step from then on. You cannot later wait for a separate "go" signal because that lack of synchronisation could mean one PICAXE sees the signal while another has just missed it. That said it should only be a few hundred microsecond out of synch which may be acceptable.

You'll have to look in the PICmicro datasheet to check the OSC input can be fed this way. I expect it can.
 

boriz

Senior Member
@picaxester

Nice!. I really like that design. How quiet is it? Can I have more detail about the inductive power transfer?
 

picaxester

Senior Member
I think it's just a basic transistor flip-flop circuit like this one but without the leds and with smaller caps. The collectors of one of the transistors goes to the base of a power transistor (maybe through a resistor), which pulses the coil.
The secondary coil is wraped on the fan motor, the two ends of the coil goes to a bridge rectifier (made of four smt diodes), the output of the bridge rectifier goes to a 5V voltage regulator and some caps.
 

adumas

Member
Hi Boriz... Thanks for the graphics and the code... I built the same device and it works... Eventhough it is very hard to see all of the letters - lots of waving...

I tried last night to build a motorized contraption that would spin and hopefully display the letters. After a dozen attempts, several hours, I could not get the letters to appear... Am I missing something - shouldn't the letters be able to be displayed eventhough the device is rotating instead of being manipulated from side to side?

Could you let me know - and what I might need to change to get it to work in a rotating manner?
 

adumas

Member
Hi, just checking in... Wondered if anyone could answer my last question... I'm pulling out my hair trying to get this to work...
 

papaof2

Senior Member
A rotating device needs some type of position sensor to tell the chip when to start displaying. This could be a switch that is tripped by a cam once per revolution or an optical solution (LED + phototransistor).

John
 

SD2100

New Member
If displaying a message on a rotating thing you need to sit in a loop and wait for a position sensor to be triggered then display the message, this way the message is always displayed in the same position. Something like the code below is needed.

Code:
#picaxe 18x

setint %00000100,%00000100   'Setup sensor interrupt on pin2

main:
    'Wait here until position sensor causes interrupt
    goto main
	
Interrupt: 'Comes here when rotation sensor is triggered
	'****
	'Display message code goes here
	'****
	setint %00000100,%00000100   'reset int when finished displaying
	return   'go back to main loop and wait for next rotation
 
Top