<?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>RESET_VECTOR &#8211; The Longhorn Engineer</title>
	<atom:link href="https://longhornengineer.com/category/pinball/reset_vector/feed/" rel="self" type="application/rss+xml" />
	<link>https://longhornengineer.com</link>
	<description>Robotics, Pinball, Hacking, Portables</description>
	<lastBuildDate>Tue, 20 Dec 2022 20:44:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>New theme up and DMD driver writing.</title>
		<link>https://longhornengineer.com/2015/02/10/new-theme-up-and-dmd-driver-writing/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Wed, 11 Feb 2015 05:14:24 +0000</pubDate>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<category><![CDATA[Website Maintenance]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/?p=2753</guid>

					<description><![CDATA[Fixed an old bug in some RESET VECTOR DMD display code for multiple lines and got the above demo working. I will have to port the prop code to python however to make my twitter wall thingy.]]></description>
										<content:encoded><![CDATA[<p><a href="https://longhornengineer.com/wp-content/uploads/DSC37391.jpg"><img fetchpriority="high" decoding="async" src="https://longhornengineer.com/wp-content/uploads/DSC37391-800x533.jpg" alt="SONY DSC" class="aligncenter size-medium wp-image-2757" width="800" height="533" srcset="https://longhornengineer.com/wp-content/uploads/DSC37391-800x533.jpg 800w, https://longhornengineer.com/wp-content/uploads/DSC37391-150x100.jpg 150w, https://longhornengineer.com/wp-content/uploads/DSC37391-1024x682.jpg 1024w, https://longhornengineer.com/wp-content/uploads/DSC37391.jpg 1200w" sizes="(max-width: 800px) 100vw, 800px" /></a></p>
<p>Fixed an old bug in some RESET VECTOR DMD display code for multiple lines and got the above demo working. I will have to port the prop code to python however to make my twitter wall thingy.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RESET VECTOR&#8217;s old DMD lives again!</title>
		<link>https://longhornengineer.com/2015/02/09/reset-vectors-old-dmd-lives-again/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Tue, 10 Feb 2015 03:54:46 +0000</pubDate>
				<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/?p=2725</guid>

					<description><![CDATA[Pulled RESET VECTOR&#8217;s 96&#215;16 DMD out of the parts bin and managed to find the old code to get it working again. Going to turn it into a Twitter Feed/Clock/Weather wall thing.]]></description>
										<content:encoded><![CDATA[<p><a href="https://longhornengineer.com/wp-content/uploads/DSC3738.jpg"><img decoding="async" src="https://longhornengineer.com/wp-content/uploads/DSC3738-1024x682.jpg" alt="SONY DSC" width="584" height="389" class="aligncenter size-large wp-image-2724" srcset="https://longhornengineer.com/wp-content/uploads/DSC3738-1024x682.jpg 1024w, https://longhornengineer.com/wp-content/uploads/DSC3738-150x100.jpg 150w, https://longhornengineer.com/wp-content/uploads/DSC3738-569x379.jpg 569w, https://longhornengineer.com/wp-content/uploads/DSC3738-451x300.jpg 451w" sizes="(max-width: 584px) 100vw, 584px" /></a></p>
<p>Pulled RESET VECTOR&#8217;s 96&#215;16 DMD out of the parts bin and managed to find the old code to get it working again. Going to turn it into a Twitter Feed/Clock/Weather wall thing. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Code tweaking on Reset_Vector</title>
		<link>https://longhornengineer.com/2011/08/30/code-tweaking-on-reset_vector/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Tue, 30 Aug 2011 07:49:44 +0000</pubDate>
				<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/?p=578</guid>

					<description><![CDATA[So I was still getting glitches on my inputs for Reset_Vector. I couldn&#8217;t figure out what was causing it because it would happen randomly and I couldn&#8217;t repeat the problem. The false inputs caused issues with ball triggering, score detection, and playfield actions. I figured it had to be glitches on the lines caused by &#8230; <a href="https://longhornengineer.com/2011/08/30/code-tweaking-on-reset_vector/" class="more-link">Continue reading <span class="screen-reader-text">Code tweaking on Reset_Vector</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>So I was still getting glitches on my inputs for Reset_Vector. I couldn&#8217;t figure out what was causing it because it would happen randomly and I couldn&#8217;t repeat the problem. The false inputs caused issues with ball triggering, score detection, and playfield actions. I figured it had to be glitches on the lines caused by EMF or something on the input driver. I knew it was the input driver cause when a solenoid fired randomly like the pop bumper it would register a hit which means that the microcontroller detected a hit. </p>
<p>To fix this issue I added a simple debouncer routine. Basically it makes sure a input is pressed for at least 2 Kernel cycles before saying that it was a hit. This keeps random spikes from registering as hits. </p>
<p>What it does is read in the inputs into a variable called new_inputs. The new_inputs then gets anded with a variable called old_inputs and the result is the inputs that where held for two kernel cycles. Then the new_inputs is copied into old_inputs for the next cycle to happen. </p>
<p>This system can be easily expanded to 3,4,ect cycles so the debouncer is extremely configurable in its sensitivity. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>16&#215;96 DMD Code for Reset Vector</title>
		<link>https://longhornengineer.com/2011/08/22/16x96-dmd-code-for-reset-vector/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Tue, 23 Aug 2011 01:01:31 +0000</pubDate>
				<category><![CDATA[PCBA & ENG]]></category>
		<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/?p=2620</guid>

					<description><![CDATA[While developing the larger 36&#215;128 DMD I ran out of registers and logic elements in the FPGA I was using. I could have switched to a larger FPGA but that would put the final product out of the price range I was aiming for. FPGAs have loads of dedicated ram so I decided to move &#8230; <a href="https://longhornengineer.com/2011/08/22/16x96-dmd-code-for-reset-vector/" class="more-link">Continue reading <span class="screen-reader-text">16&#215;96 DMD Code for Reset Vector</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>While developing the larger 36&#215;128 DMD I ran out of registers and logic elements in the FPGA I was using. I could have switched to a larger FPGA but that would put the final product out of the price range I was aiming for. FPGAs have loads of dedicated ram so I decided to move the display memory from registers to a chunk of block ram. To test to see if the RAM code works I wrote a program for the 16×96 display in RESET_VECTOR. It took a bit of tweaking as I have never used block ram before but I was able to get it working.</p>
<p><pre><code>
module LED_Matrix_16x96
(
clk,row,col,SDRAM_CS,SRAM_CS,LAT,INPUT,SCLK
);</code></pre></p>
<p><pre><code>input&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;clk;
input&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;LAT;
input&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;INPUT;
input&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;SCLK;

output&nbsp;&nbsp;reg [0:15]&nbsp;&nbsp;row;
output&nbsp;&nbsp;reg [95:0]&nbsp;&nbsp;col;
output&nbsp;&nbsp;reg [0:0]&nbsp;&nbsp; SDRAM_CS;
output&nbsp;&nbsp;reg [0:0]&nbsp;&nbsp; SRAM_CS;

reg [24:0]&nbsp;&nbsp;clk_slow;
reg [4:0]&nbsp;&nbsp;row_cnt;
reg [1535:0]&nbsp;&nbsp;col_buffer;

reg&nbsp;&nbsp;[3:0]&nbsp;&nbsp;read_addr;
reg&nbsp;&nbsp;[3:0]&nbsp;&nbsp;write_addr;
reg&nbsp;&nbsp;[95:0]&nbsp;&nbsp;disp_mem_data;
reg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren;
wire&nbsp;&nbsp;[95:0]&nbsp;&nbsp;disp_mem_q;

reg [3:0]&nbsp;&nbsp;sel;

</code></pre><pre><code>initial
begin
row &amp;lt;= 16&#039;b0000000000000001;
&nbsp;&nbsp;&nbsp;&nbsp;col &amp;lt;= 16&#039;b0000000000000000;
&nbsp;&nbsp;&nbsp;&nbsp;SDRAM_CS &amp;lt;= 1&#039;b0;
&nbsp;&nbsp;&nbsp;&nbsp;SRAM_CS &amp;lt;= 1&#039;b0;
&nbsp;&nbsp;&nbsp;&nbsp;clk_slow &amp;lt;= 16&#039;b0000000000000000;
&nbsp;&nbsp;&nbsp;&nbsp;row_cnt &amp;lt;= 5&#039;b00000;
&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;read_addr &amp;lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 0;
&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0000;
&nbsp;&nbsp;end

always @(posedge clk) 
begin
&nbsp;&nbsp;clk_slow &amp;lt;= clk_slow + 1&#039;b1;

&nbsp;&nbsp;if(!LAT &amp;amp; row_cnt == 5&#039;b01111)
&nbsp;&nbsp;begin
&nbsp;&nbsp;case(sel)
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0000:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[1535:1440];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0001;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0001:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[1439:1344];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0010;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0010:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[1343:1248];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0011;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0011:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[1247:1152];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0100;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0100:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[1151:1056];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0101;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0101:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[1055:960];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0110;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0110:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[959:864];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0111;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0111:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[863:768];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b1000;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1000:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[767:672];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b1001;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1001:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[671:576];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b1010;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1010:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[575:480];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b1011;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1011:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[479:384];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b1100;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1100:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[383:288];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b1101;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1101:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[287:192];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b1110;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1110:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[191:96];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b1111;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1111:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &amp;lt;= col_buffer[95:0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;default: 
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &amp;lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b0;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;endcase
&nbsp;&nbsp;end
&nbsp;&nbsp;else
&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &amp;lt;= 1&#039;b0;
&nbsp;&nbsp;&nbsp;&nbsp;sel &amp;lt;= 4&#039;b0000;
&nbsp;&nbsp;end
end

always @(posedge clk_slow[10]) 
begin
&nbsp;&nbsp;if(row_cnt &amp;gt; 5&#039;b01111)
begin
row_cnt &amp;lt;= 5&#039;b00000;
&nbsp;&nbsp;end
&nbsp;&nbsp;col &amp;lt;= disp_mem_q;&nbsp;&nbsp;
&nbsp;&nbsp;row_cnt &amp;lt;= row_cnt + 1&#039;b1;
&nbsp;&nbsp;row &amp;lt;= {row[15],row[0:14]};
&nbsp;&nbsp;read_addr &amp;lt;= read_addr + 1&#039;b1;

end

always @(posedge SCLK)
begin
&nbsp;&nbsp;if(LAT)
&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;col_buffer &amp;lt;= {col_buffer[1534:0],INPUT};
&nbsp;&nbsp;end
end

display_ram disp_mem_inst (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.rdaddress (read_addr),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.wraddress (write_addr),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.clock&nbsp;&nbsp;(clk),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.data&nbsp;&nbsp; (disp_mem_data),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.wren&nbsp;&nbsp; (disp_mem_wren),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(disp_mem_q)
);

endmodule
</code></pre></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>More Verilog Code</title>
		<link>https://longhornengineer.com/2011/08/16/more-verilog-code/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Tue, 16 Aug 2011 17:18:44 +0000</pubDate>
				<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/?p=514</guid>

					<description><![CDATA[Sorry for the massive amount of code recently. To test to see if the RAM code works I wrote a program for the 16&#215;96 display in RESET_VECTOR. If this works then I will order the PCB for the 32&#215;128 DMD. If anyone has any suggestions please feel free to comment. This is the first time &#8230; <a href="https://longhornengineer.com/2011/08/16/more-verilog-code/" class="more-link">Continue reading <span class="screen-reader-text">More Verilog Code</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>Sorry for the massive amount of code recently. To test to see if the RAM code works I wrote a program for the 16&#215;96 display in RESET_VECTOR. If this works then I will order the PCB for the 32&#215;128 DMD. If anyone has any suggestions please feel free to comment. This is the first time I have tried interfacing RAM on an FPGA before.</p>
<p><pre><code>
module LED_Matrix_16x96
(
&nbsp;&nbsp;clk,row,col,SDRAM_CS,SRAM_CS,LAT,INPUT,SCLK
);

input&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;clk;
input&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;LAT;
input&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;INPUT;
input&nbsp;&nbsp;wire&nbsp;&nbsp;&nbsp;&nbsp;SCLK;

output&nbsp;&nbsp;reg [0:15]&nbsp;&nbsp;row;
output&nbsp;&nbsp;reg [95:0]&nbsp;&nbsp;col;
output&nbsp;&nbsp;reg [0:0]&nbsp;&nbsp; SDRAM_CS;
output&nbsp;&nbsp;reg [0:0]&nbsp;&nbsp; SRAM_CS;

&nbsp;&nbsp;&nbsp;&nbsp;reg [24:0]&nbsp;&nbsp;clk_slow;
&nbsp;&nbsp;&nbsp;&nbsp;reg [4:0]&nbsp;&nbsp;row_cnt;
&nbsp;&nbsp;&nbsp;&nbsp;reg [1535:0]&nbsp;&nbsp;col_buffer;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;&nbsp;[3:0]&nbsp;&nbsp;read_addr;
&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;&nbsp;[3:0]&nbsp;&nbsp;write_addr;
&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;&nbsp;[95:0]&nbsp;&nbsp;disp_mem_data;
&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren;
&nbsp;&nbsp;&nbsp;&nbsp;wire&nbsp;&nbsp;[95:0]&nbsp;&nbsp;disp_mem_q;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;reg [3:0]&nbsp;&nbsp;sel;

initial 
&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;row &lt;= 16&#039;b0000000000000001;
&nbsp;&nbsp;&nbsp;&nbsp;col &lt;= 16&#039;b0000000000000000;
&nbsp;&nbsp;&nbsp;&nbsp;SDRAM_CS &lt;= 1&#039;b0;
&nbsp;&nbsp;&nbsp;&nbsp;SRAM_CS &lt;= 1&#039;b0;
&nbsp;&nbsp;&nbsp;&nbsp;clk_slow &lt;= 16&#039;b0000000000000000;
&nbsp;&nbsp;&nbsp;&nbsp;row_cnt &lt;= 5&#039;b00000;
&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;read_addr &lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 0;
&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0000;
&nbsp;&nbsp;end
&nbsp;&nbsp;
always @(posedge clk) 
begin
&nbsp;&nbsp;clk_slow &lt;= clk_slow + 1&#039;b1;
&nbsp;&nbsp;
&nbsp;&nbsp;if(!LAT &amp; row_cnt == 5&#039;b01111)
&nbsp;&nbsp;begin
&nbsp;&nbsp;case(sel)
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0000:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[1535:1440];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0001;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0001:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[1439:1344];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0010;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0010:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[1343:1248];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0011;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0011:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[1247:1152];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0100;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0100:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[1151:1056];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0101;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0101:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[1055:960];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0110;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0110:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[959:864];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0111;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b0111:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[863:768];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b1000;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1000:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[767:672];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b1001;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1001:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[671:576];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b1010;
&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1010:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[575:480];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b1011;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1011:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[479:384];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b1100;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1100:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[383:288];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b1101;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1101:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[287:192];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b1110;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1110:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[191:96];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b1111;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;4&#039;b1111:
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= sel;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_data &lt;= col_buffer[95:0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;default: 
&nbsp;&nbsp;&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_addr &lt;= 4&#039;b0000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b0;
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;endcase
&nbsp;&nbsp;end
&nbsp;&nbsp;else
&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;disp_mem_wren &lt;= 1&#039;b0;
&nbsp;&nbsp;&nbsp;&nbsp;sel &lt;= 4&#039;b0000;
&nbsp;&nbsp;end
end

always @(posedge clk_slow[10]) 
begin
&nbsp;&nbsp;if(row_cnt &gt; 5&#039;b01111)
&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;row_cnt &lt;= 5&#039;b00000;
&nbsp;&nbsp;end
&nbsp;&nbsp;col &lt;= disp_mem_q;&nbsp;&nbsp;
&nbsp;&nbsp;row_cnt &lt;= row_cnt + 1&#039;b1;
&nbsp;&nbsp;row &lt;= {row[15],row[0:14]};
&nbsp;&nbsp;read_addr &lt;= read_addr + 1&#039;b1;
&nbsp;&nbsp;
end
&nbsp;&nbsp;
always @(posedge SCLK)
begin
&nbsp;&nbsp;if(LAT)
&nbsp;&nbsp;begin
&nbsp;&nbsp;&nbsp;&nbsp;col_buffer &lt;= {col_buffer[1534:0],INPUT};
&nbsp;&nbsp;end
end

display_ram disp_mem_inst (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.rdaddress (read_addr),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.wraddress (write_addr),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.clock&nbsp;&nbsp;(clk),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.data&nbsp;&nbsp; (disp_mem_data),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.wren&nbsp;&nbsp; (disp_mem_wren),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(disp_mem_q)
);

endmodule
</code></pre></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reset Vector: New main board</title>
		<link>https://longhornengineer.com/2011/08/08/reset-vector-new-main-board/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Tue, 09 Aug 2011 04:42:55 +0000</pubDate>
				<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/2011/08/08/reset-vector-new-main-board/</guid>

					<description><![CDATA[A work in progress. Some of the new features include a socketable Propeller Chip, lockable headers, and separate power lines for the microcontroller and other sub systems. These changes will make the system easier to fix and prevent future problems.]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" style="display:block;margin-right:auto;margin-left:auto;" alt="image" src="https://longhornengineer.com/wp-content/uploads/2011/08/wpid-2011-08-08-23.41.28.jpg" /></p>
<p>A work in progress. Some of the new features include a socketable Propeller Chip, lockable headers, and separate power lines for the microcontroller and other sub systems. These changes will make the system easier to fix and prevent future problems.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RESET VECTOR: DMD 16&#215;96 Single Line Test</title>
		<link>https://longhornengineer.com/2011/08/07/reset-vector-dmd-16x96-single-line-test/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Mon, 08 Aug 2011 04:00:05 +0000</pubDate>
				<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/?p=498</guid>

					<description><![CDATA[I finally finished building the Dot Matrix Display for Reset Vector. The Matrixing is run by a FPGA. The data is shifted in by the main propeller microcontroller. Currently the only code on the propeller is the single line text generator. I have a double line text generator and a animation driver that will load &#8230; <a href="https://longhornengineer.com/2011/08/07/reset-vector-dmd-16x96-single-line-test/" class="more-link">Continue reading <span class="screen-reader-text">RESET VECTOR: DMD 16&#215;96 Single Line Test</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>I finally finished building the Dot Matrix Display for Reset Vector. The Matrixing is run by a FPGA. The data is shifted in by the main propeller microcontroller. Currently the only code on the propeller is the single line text generator. I have a double line text generator and a animation driver that will load bitmaps off an SD card.</p>
<div style="text-align:center">
<iframe title="RESET VECTOR: DMD 16x96 Single Line Test" width="474" height="267" src="https://www.youtube.com/embed/VZStUs4bQG4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>
<p>The Code will be up tomorrow.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reset Vector : LED DMD done!</title>
		<link>https://longhornengineer.com/2011/07/26/reset-vector-led-dmd-done/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Tue, 26 Jul 2011 20:14:03 +0000</pubDate>
				<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/2011/07/26/reset-vector-led-dmd-done/</guid>

					<description><![CDATA[Just got it working.]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" style="display:block;margin-right:auto;margin-left:auto;" alt="image" src="https://longhornengineer.com/wp-content/uploads/2011/07/wpid-2011-07-26-15.06.08.jpg" /></p>
<p>Just got it working.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LDMD 16&#215;96 PCB and FPGA working!</title>
		<link>https://longhornengineer.com/2011/07/21/ldmd-16x96-pcb-and-fpga-working/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Fri, 22 Jul 2011 01:28:38 +0000</pubDate>
				<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/?p=466</guid>

					<description><![CDATA[I soldered on what parts I had on hand and got the DMD display working today. Will upload the code after I get all the modules soldered on.]]></description>
										<content:encoded><![CDATA[<p>I soldered on what parts I had on hand and got the DMD display working today. Will upload the code after I get all the modules soldered on.</p>
<p><img loading="lazy" decoding="async" alt="" src="https://longhornengineer.com/images/projects/Pinball_ResetVector/_DSC1997.JPG" class="aligncenter" width="2400" height="1597" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LDMD 16×16 Propeller Comm Test</title>
		<link>https://longhornengineer.com/2011/07/21/ldmd-16x16-propeller-comm-test/</link>
		
		<dc:creator><![CDATA[Parker]]></dc:creator>
		<pubDate>Thu, 21 Jul 2011 19:59:04 +0000</pubDate>
				<category><![CDATA[Pinball]]></category>
		<category><![CDATA[RESET_VECTOR]]></category>
		<guid isPermaLink="false">https://longhornengineer.com/?p=463</guid>

					<description><![CDATA[Just finished the DMD (Dot Matrix Display) test for RESET_VECTOR. Since the Propeller is to slow to do the matrixing I am going to use a FPGA to do it. The propeller will send the data over a serial connection into a frame buffer on the FPGA. When all the data is on the FPGA &#8230; <a href="https://longhornengineer.com/2011/07/21/ldmd-16x16-propeller-comm-test/" class="more-link">Continue reading <span class="screen-reader-text">LDMD 16×16 Propeller Comm Test</span> <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>Just finished the DMD (Dot Matrix Display) test for RESET_VECTOR. Since the Propeller is to slow to do the matrixing I am going to use a FPGA to do it. The propeller will send the data over a serial connection into a frame buffer on the FPGA. When all the data is on the FPGA the FPGA will update its matrixing buffer.</p>
<p>I have the Propeller to FPGA communication protocol written and tested as well. The Propeller loads the Data off the SD card and sends it serially to the FPGA.</p>
<div style="text-align: center;">http://www.youtube.com/watch?v=FGHIM8qgff8</div>
<div style="text-align: center;">http://www.youtube.com/watch?v=hrf3yXOP-KM</div>
<p><a href="https://longhornengineer.com/code/Propeller/LDMD_16x16_COM_TEST.spin">Propeller Code</a><br />
<a href="https://longhornengineer.com/code/FPGA/LDMD_16x16_COM_TEST.v">FPGA Code</a><br />
<a href="https://longhornengineer.com/images/projects/Pinball_ResetVector/DMD%20TEST%20BLOCK%20DIAGRAM.jpg">Block Diagram</a> of the Dot Matrix.</p>
<p><img loading="lazy" decoding="async" class="aligncenter" src="https://longhornengineer.com/images/projects/Pinball_ResetVector/dmdtest.jpg" alt="" width="1000" height="666" /></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
