<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Projects Log &#187; pic</title>
	<atom:link href="http://dev.pulsed.net/wp/?cat=12&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://dev.pulsed.net/wp</link>
	<description>projects, diy</description>
	<lastBuildDate>Mon, 25 Jul 2011 11:22:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Persistence Of Vision + Leds = Fun</title>
		<link>http://dev.pulsed.net/wp/?p=16</link>
		<comments>http://dev.pulsed.net/wp/?p=16#comments</comments>
		<pubDate>Fri, 21 Jul 2006 21:01:06 +0000</pubDate>
		<dc:creator>Kevin DEHLINGER</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[asm]]></category>
		<category><![CDATA[pic]]></category>

		<guid isPermaLink="false">http://dev.pulsed.net/wp/?p=16</guid>
		<description><![CDATA[Today I saw an article about POV by Erik Zoltan (link IBM via hacked gadgets)
     He&#039;s using a Parallax HomeWork Board (I don&#039;t know the price but i think it&#039;s quite expensive) thus I&#039;ve decided to do the same thing with low cost equipement (16F84)

1) the electronical part
why do I use [...]]]></description>
			<content:encoded><![CDATA[<p>Today I saw an article about <acronym title="Persistence Of Vision">POV</acronym> by Erik Zoltan (link <a href="http://www-128.ibm.com/developerworks/library/wi-robot11/" target="_blank">IBM</a> <em>via</em> <a href="http://hackedgadgets.com/2006/07/20/simple-ibm-pov/" target="_blank">hacked gadgets</a>)</p>
<p>     He&#039;s using a Parallax HomeWork Board (I don&#039;t know the price but i think it&#039;s quite expensive) thus I&#039;ve decided to do the same thing with low cost equipement (16F84)<br />
<span id="more-16"></span><br />
<strong>1) the electronical part</strong></p>
<p><strong><u>why do I use a 16F84:</u></strong></p>
<li>i have some</li>
<li>it&#039;s cheap</li>
<li>you do not need a lot to make it work (1 crystal, 2 capacitors)</li>
<li>port pins have &#034;Direct LED drive&#034; capability</li>
<li>not that hard to program</li>
<p><br \/><br />
<strong><u>The board:</u></strong></p>
<p><img src="http://dev.pulsed.net/misc/board.jpg" alt="board" /><br />
<em>as you can see, you do not need to have a lot of stuff on the board</em><br />
<br \/></p>
<p><strong>The pin diagram</strong><br />
<img src="http://dev.pulsed.net/misc/16f84.png" alt="16f84 pin diagram" /></p>
<p><strong>The schematic diagram</strong><br />
<img src="http://dev.pulsed.net/misc/sch.png" alt="The schematic diagram" /><br />
R=120 ohm<br />
C=15pF<br />
X=4Mhz</p>
<p><br \/></p>
<p><strong>2) The assembly code part</strong></p>
<div style="border: 1px dashed #708090; background-color: #add8e6">
	<code>STATUS      equ       03h       ; Status Register</code><br />
	<code>TRISA       equ       85h       ; TrisA  Register</code><br />
	<code>PORTA       equ       05h       ; A Port</code><br />
	<code>TRISB       equ       86h       ; TrisB  Register</code><br />
	<code>PORTB       equ       06h       ; B Port</code><br />
	<code>COUNT1      equ       0Ch       ; delay loop counter</code><br />
	<code></code><br />
	<code>P           equ       0Eh       ; pointer</code><br />
	<code>C           equ       0Fh       ; display counter</code><br />
	<code></code><br />
	<code>FSR         equ       04h       ; File Select Register</code><br />
	<code>INDF        equ       00h       ; Uses contents of FSR to address Data Memory</code><br />
	<code></code><br />
	<code></code><br />
	<code>bsf         STATUS,5            ; ==&gt; Bank 1</code><br />
	<code>movlw       00h                 ; B port</code><br />
	<code>movwf       TRISB               ; output</code><br />
	<code>bcf         STATUS,5            ; ==&gt; Bank 0</code><br />
	<code></code><br />
	<code></code><br />
	<code></code><br />
	<code>movlw       b'11000000'</code><br />
	<code>movwf       10h</code><br />
	<code>movlw       b'01111111'</code><br />
	<code>movwf       11h</code><br />
	<code>movlw       b'00010000'</code><br />
	<code>movwf       12h</code><br />
	<code>movlw       b'00001000'</code><br />
	<code>movwf       13h</code><br />
	<code>movlw       b'00010100'</code><br />
	<code>movwf       14h</code><br />
	<code>movlw       b'00100010'</code><br />
	<code>movwf       15h</code><br />
	<code>movlw       b'11000001'</code><br />
	<code>movwf       16h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       17h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       18h</code><br />
	<code>movlw       b'00111100'</code><br />
	<code>movwf       19h</code><br />
	<code>movlw       b'01001010'</code><br />
	<code>movwf       1ah</code><br />
	<code>movlw       b'01001010'</code><br />
	<code>movwf       1bh</code><br />
	<code>movlw       b'00101100'</code><br />
	<code>movwf       1ch</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       1dh</code><br />
	<code>movlw       b'00000010'</code><br />
	<code>movwf       1eh</code><br />
	<code>movlw       b'00011100'</code><br />
	<code>movwf       1fh</code><br />
	<code>movlw       b'01100000'</code><br />
	<code>movwf       20h</code><br />
	<code>movlw       b'00110000'</code><br />
	<code>movwf       21h</code><br />
	<code>movlw       b'00001110'</code><br />
	<code>movwf       22h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       23h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       24h</code><br />
	<code>movlw       b'01111101'</code><br />
	<code>movwf       25h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       26h</code><br />
	<code>movlw       b'01111110'</code><br />
	<code>movwf       27h</code><br />
	<code>movlw       b'00000100'</code><br />
	<code>movwf       28h</code><br />
	<code>movlw       b'00000100'</code><br />
	<code>movwf       29h</code><br />
	<code>movlw       b'01111000'</code><br />
	<code>movwf       2ah</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       2bh</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       2ch</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       2dh</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       2eh</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       2fh</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       30h</code><br />
	<code>movlw       b'01000000'</code><br />
	<code>movwf       31h</code><br />
	<code>movlw       b'01000100'</code><br />
	<code>movwf       32h</code><br />
	<code>movlw       b'01111100'</code><br />
	<code>movwf       33h</code><br />
	<code>movlw       b'01000000'</code><br />
	<code>movwf       34h</code><br />
	<code>movlw       b'01000000'</code><br />
	<code>movwf       35h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       36h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       37h</code><br />
	<code>movlw       b'01000100'</code><br />
	<code>movwf       38h</code><br />
	<code>movlw       b'01010100'</code><br />
	<code>movwf       39h</code><br />
	<code>movlw       b'01010100'</code><br />
	<code>movwf       3ah</code><br />
	<code>movlw       b'01101100'</code><br />
	<code>movwf       3bh</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       3ch</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       3dh</code><br />
	<code>movlw       b'01000100'</code><br />
	<code>movwf       3eh</code><br />
	<code>movlw       b'01010100'</code><br />
	<code>movwf       3fh</code><br />
	<code>movlw       b'01010100'</code><br />
	<code>movwf       40h</code><br />
	<code>movlw       b'01101100'</code><br />
	<code>movwf       41h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       42h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       43h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       44h</code><br />
	<code>movlw       b'01000100'</code><br />
	<code>movwf       45h</code><br />
	<code>movlw       b'00100100'</code><br />
	<code>movwf       46h</code><br />
	<code>movlw       b'00011100'</code><br />
	<code>movwf       47h</code><br />
	<code>movlw       b'00000100'</code><br />
	<code>movwf       48h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       49h</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       4ah</code><br />
	<code>movlw       b'00000000'</code><br />
	<code>movwf       4bh</code><br />
	<code></code><br />
	<code></code><br />
	<code></code><br />
	<code>Restart     movlw     10h       ; Load 0x10 in P (first led combination)</code><br />
	<code>movwf     P</code><br />
	<code>movlw     3Ch       ; load 0x3C in C (0x3C=60 led combination)</code><br />
	<code>movwf     C</code><br />
	<code></code><br />
	<code>Start       movf      P,0       ; W = P</code><br />
	<code>movwf     FSR       ; FSR = W</code><br />
	<code>movf      INDF,0    ; W = INDF (INDF is the value pointed by FSR)</code><br />
	<code>movwf     PORTB     ; Display W on the led row</code><br />
	<code>incf      P,1       ; P++</code><br />
	<code>call      Delay     ; wait a little bit</code><br />
	<code>decfsz    C,1       ; c--;if(C!=0){goto start} else {goto restart}</code><br />
	<code>goto      Start</code><br />
	<code>goto      Restart</code><br />
	<code></code><br />
	<code></code><br />
	<code></code><br />
	<code>Delay</code><br />
	<code>Loop1       decfsz    COUNT1,1  ; goto loop1 while COUNT1!=0</code><br />
	<code>goto      Loop1</code><br />
	<code>return</code><br />
	<code></code><br />
	<code></code><br />
	<code></code><br />
	<code>end</code>
</div>
<p>	<strong>Download this code:</strong> <a href="http://dev.pulsed.net/wp/code/pov.asm">pov.asm</a>
</ol>
<p>because i&#039;m very lazy, i do not have typed all that byte sequence myself&#8230;<br />
i wrote a tiny perl script who analyses a small picture (8px * 60px) and generate the byte sequence for me</p>
<p><em>picture:</em><br />
<img src="http://dev.pulsed.net/misc/bsgpic.png" alt="Kevin 1337" /></p>
<p><em>source code:</em></p>
<p class="warning">[The requested file <kbd>http://dev.pulsed.net/wp/code/pov%20bsg.pl</kbd> could not be found]</p>
<p><br \/></p>
<p><strong>3)And now the result:</strong><br />
Poor quality (extracted from a video i took with my cellphone&#8230;) [i do not have a digital camera] </p>
<p><img src="http://dev.pulsed.net/misc/pov1%20(1).jpg" alt="POV pic 1" /></p>
<p>this one is flipped (nice frame at return)<br />
<img src="http://dev.pulsed.net/misc/pov1%20(2).jpg" alt="POV pic 2" /></p>
<p><img src="http://dev.pulsed.net/misc/pov1%20(3).jpg" alt="POV pic 3" /></p>
<p><img src="http://dev.pulsed.net/misc/pov1%20(4).jpg" alt="POV pic 4" /></p>
<p>1337 ^^<br />
<img src="http://dev.pulsed.net/misc/pov1%20(5).jpg" alt="POV pic 5" /></p>
<p><img src="http://dev.pulsed.net/misc/pov1%20(6).jpg" alt="POV pic 6" /></p>
<p><br \/><br />
<em>the whole <a href="http://www.urbandictionary.com/define.php?term=1337" target="_blank">1337</a> thing is just a joke</em></p>
]]></content:encoded>
			<wfw:commentRss>http://dev.pulsed.net/wp/?feed=rss2&amp;p=16</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
