Persistence Of Vision + Leds = Fun
21 July 2006Today I saw an article about POV by Erik Zoltan (link IBM via hacked gadgets)
He's using a Parallax HomeWork Board (I don't know the price but i think it's quite expensive) thus I've decided to do the same thing with low cost equipement (16F84)
1) the electronical part
why do I use a 16F84:
The board:

as you can see, you do not need to have a lot of stuff on the board
The pin diagram

The schematic diagram

R=120 ohm
C=15pF
X=4Mhz
2) The assembly code part
STATUS equ 03h ; Status RegisterTRISA equ 85h ; TrisA RegisterPORTA equ 05h ; A PortTRISB equ 86h ; TrisB RegisterPORTB equ 06h ; B PortCOUNT1 equ 0Ch ; delay loop counterP equ 0Eh ; pointerC equ 0Fh ; display counterFSR equ 04h ; File Select RegisterINDF equ 00h ; Uses contents of FSR to address Data Memorybsf STATUS,5 ; ==> Bank 1movlw 00h ; B portmovwf TRISB ; outputbcf STATUS,5 ; ==> Bank 0movlw b'11000000'movwf 10hmovlw b'01111111'movwf 11hmovlw b'00010000'movwf 12hmovlw b'00001000'movwf 13hmovlw b'00010100'movwf 14hmovlw b'00100010'movwf 15hmovlw b'11000001'movwf 16hmovlw b'00000000'movwf 17hmovlw b'00000000'movwf 18hmovlw b'00111100'movwf 19hmovlw b'01001010'movwf 1ahmovlw b'01001010'movwf 1bhmovlw b'00101100'movwf 1chmovlw b'00000000'movwf 1dhmovlw b'00000010'movwf 1ehmovlw b'00011100'movwf 1fhmovlw b'01100000'movwf 20hmovlw b'00110000'movwf 21hmovlw b'00001110'movwf 22hmovlw b'00000000'movwf 23hmovlw b'00000000'movwf 24hmovlw b'01111101'movwf 25hmovlw b'00000000'movwf 26hmovlw b'01111110'movwf 27hmovlw b'00000100'movwf 28hmovlw b'00000100'movwf 29hmovlw b'01111000'movwf 2ahmovlw b'00000000'movwf 2bhmovlw b'00000000'movwf 2chmovlw b'00000000'movwf 2dhmovlw b'00000000'movwf 2ehmovlw b'00000000'movwf 2fhmovlw b'00000000'movwf 30hmovlw b'01000000'movwf 31hmovlw b'01000100'movwf 32hmovlw b'01111100'movwf 33hmovlw b'01000000'movwf 34hmovlw b'01000000'movwf 35hmovlw b'00000000'movwf 36hmovlw b'00000000'movwf 37hmovlw b'01000100'movwf 38hmovlw b'01010100'movwf 39hmovlw b'01010100'movwf 3ahmovlw b'01101100'movwf 3bhmovlw b'00000000'movwf 3chmovlw b'00000000'movwf 3dhmovlw b'01000100'movwf 3ehmovlw b'01010100'movwf 3fhmovlw b'01010100'movwf 40hmovlw b'01101100'movwf 41hmovlw b'00000000'movwf 42hmovlw b'00000000'movwf 43hmovlw b'00000000'movwf 44hmovlw b'01000100'movwf 45hmovlw b'00100100'movwf 46hmovlw b'00011100'movwf 47hmovlw b'00000100'movwf 48hmovlw b'00000000'movwf 49hmovlw b'00000000'movwf 4ahmovlw b'00000000'movwf 4bhRestart movlw 10h ; Load 0x10 in P (first led combination)movwf Pmovlw 3Ch ; load 0x3C in C (0x3C=60 led combination)movwf CStart movf P,0 ; W = Pmovwf FSR ; FSR = Wmovf INDF,0 ; W = INDF (INDF is the value pointed by FSR)movwf PORTB ; Display W on the led rowincf P,1 ; P++call Delay ; wait a little bitdecfsz C,1 ; c--;if(C!=0){goto start} else {goto restart}goto Startgoto RestartDelayLoop1 decfsz COUNT1,1 ; goto loop1 while COUNT1!=0goto Loop1returnend
Download this code: pov.asm
because i'm very lazy, i do not have typed all that byte sequence myself…
i wrote a tiny perl script who analyses a small picture (8px * 60px) and generate the byte sequence for me
picture:

source code:
[The requested file http://dev.pulsed.net/wp/code/pov%20bsg.pl could not be found]
3)And now the result:
Poor quality (extracted from a video i took with my cellphone…) [i do not have a digital camera]
.jpg)
this one is flipped (nice frame at return)
.jpg)
.jpg)
.jpg)
1337 ^^
.jpg)
.jpg)
the whole 1337 thing is just a joke