<?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>blog.world3.net &#187; avr</title>
	<atom:link href="http://blog.world3.net/category/avr/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.world3.net</link>
	<description>たとえ溺れても梦はゆめでしかない</description>
	<lastBuildDate>Thu, 02 Feb 2012 15:23:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>XMEGA USART unsets output direction on ports when disabling TX</title>
		<link>http://blog.world3.net/2012/02/xmega-usart-unsets-output-direction-on-ports-when-disabling-tx/</link>
		<comments>http://blog.world3.net/2012/02/xmega-usart-unsets-output-direction-on-ports-when-disabling-tx/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 15:23:46 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=452</guid>
		<description><![CDATA[I noticed that if I set the TX pin of a port to output and then enable the USART it works. If I then disable the TXEN bit (necessary because with IR comms the TX line has to be held low during reception, otherwise the transceiver blinds itself) the TX port pin is reset to being an [...]]]></description>
			<content:encoded><![CDATA[<p>I noticed that if I set the TX pin of a port to output and then enable the USART it works. If I then disable the TXEN bit (necessary because with IR comms the TX line has to be held low during reception, otherwise the transceiver blinds itself) the TX port pin is reset to being an input. Unless you set it back to being an output the USART will be unable to send any more data when you re-enabled TXEN.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2012/02/xmega-usart-unsets-output-direction-on-ports-when-disabling-tx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RFM12B bit stream sync issue</title>
		<link>http://blog.world3.net/2011/12/rfm12b-bit-stream-sync-issue/</link>
		<comments>http://blog.world3.net/2011/12/rfm12b-bit-stream-sync-issue/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 16:04:00 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[electronics]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=435</guid>
		<description><![CDATA[Been working with cheap RFM12B modules at work and discovered something interesting about them. A couple of things actually, the first of which is that the datasheet for the Si4420 IC it uses is much better. The main issue is that the serial data stream you get when receiving is not always aligned to the [...]]]></description>
			<content:encoded><![CDATA[<p>Been working with cheap RFM12B modules at work and discovered something interesting about them. A couple of things actually, the first of which is that the datasheet for the Si4420 IC it uses is much better. The main issue is that the serial data stream you get when receiving is not always aligned to the bytes you transmitted.</p>
<p>The SPI interface only allows you to read 8 bits at a time from the FIFO, but you can pull nFFS low and then clock bits out individually without the need for a read command. The technique I use is to start reading bits that way when the RFM12B pulls its interrupt line low until I have the complete sync pattern. At that point I know I am properly aligned and can start using the SPI bus again.</p>
<p>The ARSSI signal is useful. To make good measurements trigger the ADC immediately after starting an SPI read command. On the &#8216;scope the level looks flat during receiving, but in reality I have noticed that sometimes I get the first few bytes correctly and then the stream deteriorates into noise. Still investigating that one, there are plenty of parameters to experiment with.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2011/12/rfm12b-bit-stream-sync-issue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compile time asserts in C</title>
		<link>http://blog.world3.net/2011/12/compile-time-asserts-in-c/</link>
		<comments>http://blog.world3.net/2011/12/compile-time-asserts-in-c/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 15:48:34 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=432</guid>
		<description><![CDATA[Assert is a useful function that checks a condition and outputs an error if it is not met at run time. Aside from generating some overhead in the code it is also pretty useless on microcontrollers because the messages go to STDERR and, well, there isn’t one. A much better solution is to do the [...]]]></description>
			<content:encoded><![CDATA[<p>Assert is a useful function that checks a condition and outputs an error if it is not met at run time. Aside from generating some overhead in the code it is also pretty useless on microcontrollers because the messages go to STDERR and, well, there isn’t one. A much better solution is to do the check at compile time as then there is no overhead and you can see the error messages.</p>
<p>&nbsp;</p>
<p>Unfortunately the C pre-processor is just a glorified text processor and knows almost nothing about C, so you can’t use things like sizeof(). I found this solution:</p>
<p>&nbsp;</p>
<pre>// compile time static assertions (<a href="http://www.pixelbeat.org/programming/gcc/static_assert.html">http://www.pixelbeat.org/programming/gcc/static_assert.html</a>)</pre>
<pre>#define ASSERT_CONCAT_(a, b) a##b</pre>
<pre>#define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)</pre>
<pre>#define ct_assert(e) enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(!!(e)) }</pre>
<p>&nbsp;</p>
<p>If you then write this:</p>
<p>&nbsp;</p>
<pre>ct_assert(sizeof(EEP_CONFIG_t) == 32);</pre>
<p>If the condition is not true it will cause a divide by zero error on that line. Not ideal but it seems to work. In this case an EEPROM page happens to be 32 bytes and the struct is padded. Thanks to Pixelbeat.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2011/12/compile-time-asserts-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XMEGA TWI (I2C) bus pull-ups</title>
		<link>http://blog.world3.net/2011/11/xmega-twi-i2c-bus-pull-ups/</link>
		<comments>http://blog.world3.net/2011/11/xmega-twi-i2c-bus-pull-ups/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 16:32:47 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[electronics]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=423</guid>
		<description><![CDATA[The XMEGA 128A1 and XPLAINED hardware guide both suggest that TWI should work with the internal port pull-up resistors. Those pull ups are 50K+ and don&#8217;t pull enough for most devices. In short external pull-ups, say 10K, are essential.]]></description>
			<content:encoded><![CDATA[<p>The XMEGA 128A1 and XPLAINED hardware guide both suggest that TWI should work with the internal port pull-up resistors. Those pull ups are 50K+ and don&#8217;t pull enough for most devices. In short external pull-ups, say 10K, are essential.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2011/11/xmega-twi-i2c-bus-pull-ups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using the XMEGA DMA controller</title>
		<link>http://blog.world3.net/2011/11/using-the-xmega-dma-controller/</link>
		<comments>http://blog.world3.net/2011/11/using-the-xmega-dma-controller/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 11:47:09 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[electronics]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=421</guid>
		<description><![CDATA[Finally got the XMEGA DMA controller on an ATxmega128A3 working. There is not much example code for it and the datasheet is not very clear, so I wrote this. The datasheet and examples don&#8217;t really explain the terminology well. A transaction is the complete cycle of the DMA controller. To start a transaction you load [...]]]></description>
			<content:encoded><![CDATA[<p>Finally got the XMEGA DMA controller on an ATxmega128A3 working. There is not much example code for it and the datasheet is not very clear, so I wrote this.</p>
<p>The datasheet and examples don&#8217;t really explain the terminology well. A transaction is the complete cycle of the DMA controller. To start a transaction you load up the control registers and enable the DMA channel. It will then respond to triggers. The transaction ends when TRFCNT * REPCNT bytes have been transferred.</p>
<p>A block is a way of dividing the transaction up to fit your buffer size. If you just want to fill one buffer from start to finish you can set the block size in TRFCNT to the full size of your buffer. There are not many situations where you would want to use blocks smaller than one whole transaction, so for simplicity you can often just ignore them and look at transactions only.</p>
<p>The burst length is the number of bytes copied in one go by the DMA controller and is set with the BURSTLEN bits in CTRLA. Often it is used to read/write 16 bit SFRs such as the ADC result or the DAC output level. You always want to access those 16 bit words in one go rather than as two 8 bit bytes and the burst length lets you do that.</p>
<p>Now comes the poorly documented bit. First we have the single shot mode bit in CTRLA (bit 2 SINGLE). If set every time the DMA channel is triggered it transfers a single burst of data, e.g. 2 bytes if you set BURSTLEN to 2BYTE. If it isn&#8217;t set the DMA channel does into free running mode and simply transfers bursts as fast as possible until the transaction ends. So if you want to save ADC readings into a buffer like I am you want single shot mode triggered by the ADC.</p>
<p>Next let&#8217;s look at repeat mode. In repeat mode the DMA controller transfers REPCNT blocks of data. To keep it simple let&#8217;s say you only have one buffer and intend to fill it in one go, so you set the block size to the buffer size. If you are not in repeat mode the buffer will be filled once and then the transaction will end and the DMA channel will be disabled. If you are in repeat mode the DMA channel will perform REPCNT block transfers, and since you set your block size to the buffer size that means it is the number of times the buffer will be filled consecutively. If you are in repeat mode and you set REPCNT to zero the DMA channel will repeat forever.</p>
<p>Now keep in mind that even with repeat mode enabled the DMA controller still has to be triggered. In normal mode one trigger transfers an entire buffer&#8217;s worth of data, and in single shot mode each trigger transfers one burst of data.</p>
<p>Finally we have double buffering mode. Double buffering basically alternates between filling two buffers. When one transaction is complete the DMA channel automatically stops and its partner starts. This action is independent of repeat mode, and will set the transaction complete flag so that you can detect when it happens.</p>
<p>Note 1. You need to look at the transaction complete flags, not the DMA channel active or pending flags, if you want to know when the channel has finished and the buffer is ready for processing.</p>
<p>Note 2. If you want to use a timer to trigger a DMA channel then you must enable that timer&#8217;s interrupt. You can give it a null interrupt handler (e.g. ISR(TCC1_OVF_vect){} or just RETI in assembler) but it does have to actually be enabled and triggering, otherwise the DMA channel will not be triggered either. That doesn&#8217;t apply to other peripherals such as the ADC, it seems to be just the timers.</p>
<pre style="padding-left: 30px;">PORTA.DIRCLR = PIN7_bm;
PORTA.OUTCLR = PIN7_bm;

ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc | ADC_CH_GAIN_1X_gc;
ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN7_gc;
adc_wait_8mhz(&amp;ADCA);
ADCA.EVCTRL = ADC_SWEEP_0_gc | ADC_EVSEL_0123_gc | ADC_EVACT_CH0_gc; // event channel 0 triggers ADC channel 0
ADCA.CTRLA |= ADC_ENABLE_bm;

// set TCC1 to 11024Hz overflow, actually 11019.2838Hz (-0.052% error)
TCC1.CTRLA = 0; // stop if running
TCC1.CNT = 0;
TCC1.PER = 0x02D5;

EVSYS.CH0MUX = EVSYS_CHMUX_TCC1_OVF_gc; // trigger on timer overflow

// reset DMA controller
DMA.CTRL = 0;
DMA.CTRL = DMA_RESET_bm;
while ((DMA.CTRL &amp; DMA_RESET_bm) != 0)
;
// configure DMA controller
DMA.CTRL = DMA_CH_ENABLE_bm | DMA_DBUFMODE_CH01_gc; // double buffered with channels 0 and 1

// channel 0
// **** TODO: reset dma channels
DMA.CH0.REPCNT = 0;
DMA.CH0.CTRLA = DMA_CH_BURSTLEN_2BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; // ADC result is 2 byte 12 bit word
DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | // reload source after every burst
DMA_CH_DESTRELOAD_TRANSACTION_gc | DMA_CH_DESTDIR_INC_gc; // reload dest after every transaction
DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc;
DMA.CH0.TRFCNT = 2048; // always the number of bytes, even if burst length &gt; 1
DMA.CH0.DESTADDR0 = (( (uint16_t) buffer_a) &gt;&gt; 0) &amp; 0xFF;
DMA.CH0.DESTADDR1 = (( (uint16_t) buffer_a) &gt;&gt; 8) &amp; 0xFF;
DMA.CH0.DESTADDR2 = 0;
DMA.CH0.SRCADDR0 = (( (uint16_t) &amp;ADCA.CH0.RES) &gt;&gt; 0) &amp; 0xFF;
DMA.CH0.SRCADDR1 = (( (uint16_t) &amp;ADCA.CH0.RES) &gt;&gt; 8) &amp; 0xFF;
DMA.CH0.SRCADDR2 = 0;

// channel 1
DMA.CH1.REPCNT = 0;
DMA.CH1.CTRLA = DMA_CH_BURSTLEN_2BYTE_gc | DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm; // ADC result is 2 byte 12 bit word
DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_BURST_gc | DMA_CH_SRCDIR_INC_gc | // reload source after every burst
DMA_CH_DESTRELOAD_TRANSACTION_gc | DMA_CH_DESTDIR_INC_gc; // reload dest after every transaction
DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_ADCA_CH0_gc;
DMA.CH1.TRFCNT = 2048;
DMA.CH1.DESTADDR0 = (( (uint16_t) buffer_b) &gt;&gt; 0) &amp; 0xFF;
DMA.CH1.DESTADDR1 = (( (uint16_t) buffer_b) &gt;&gt; 8) &amp; 0xFF;
DMA.CH1.DESTADDR2 = 0;
DMA.CH1.SRCADDR0 = (( (uint16_t) &amp;ADCA.CH0.RES) &gt;&gt; 0) &amp; 0xFF;
DMA.CH1.SRCADDR1 = (( (uint16_t) &amp;ADCA.CH0.RES) &gt;&gt; 8) &amp; 0xFF;
DMA.CH1.SRCADDR2 = 0;

DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm;
TCC1.CTRLA = TC_CLKSEL_DIV1_gc; // start timer, and in turn ADC

for (i = 0; i &lt; 20; i++)
{
while (!(DMA.INTFLAGS &amp; DMA_CH0TRNIF_bm));
DMA.INTFLAGS = DMA_CH0TRNIF_bm;
TERM_tx_char('A');

while (!(DMA.INTFLAGS &amp; DMA_CH1TRNIF_bm));
DMA.INTFLAGS = DMA_CH1TRNIF_bm;
TERM_tx_char('B');
}</pre>
<p>In the example the code outputs &#8216;A&#8217; or &#8216;B&#8217; when each buffer is full.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2011/11/using-the-xmega-dma-controller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The MSF signal is a bit of a mess</title>
		<link>http://blog.world3.net/2010/07/the-msf-signal-is-a-bit-of-a-mess/</link>
		<comments>http://blog.world3.net/2010/07/the-msf-signal-is-a-bit-of-a-mess/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 23:06:26 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[microcontrollers]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=331</guid>
		<description><![CDATA[I am working on another clock, this time with MSF (Rugby/The time from NPL)  radio time setting. I know, I need to document the last one&#8230; Anyway, I finished the decoder today. The MSF signal is frankly a mess. Things seem to have been added and then removed over the years. There are four different [...]]]></description>
			<content:encoded><![CDATA[<p>I am working on another clock, this time with MSF (Rugby/The time from NPL)  radio time setting. I know, I need to document the last one&#8230; Anyway, I finished the decoder today.</p>
<p>The MSF signal is frankly a mess. Things seem to have been added and then removed over the years. There are four different length pulses and various additions. Compared to the nice clean DCF77 signal it&#8217;s horrible, but unfortunately I can&#8217;t get DCF77 to work reliably here. In fact I bought a DCF77 clock but it has never been able to receive a good enough signal to set itself.</p>
<p>As others have discovered the MSF signal is much cleaner at night, but filtering out the noise during the day isn&#8217;t too hard. I wrote the decoder in assembler and it basically waits for a valid bit and then locks on to that, ignoring everything until 950ms have passed from it&#8217;s start. It also filters out too short and too long pulses and does some debouncing.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2010/07/the-msf-signal-is-a-bit-of-a-mess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AVR / electronics quick reference sheet</title>
		<link>http://blog.world3.net/2010/04/avr-electronics-quick-reference-sheet/</link>
		<comments>http://blog.world3.net/2010/04/avr-electronics-quick-reference-sheet/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 17:31:45 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[electronics]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=281</guid>
		<description><![CDATA[I am working on a quick reference chart (cheat sheet). It&#8217;s by no means done but a post over at Adafruit made me think to post it: quickref.pdf]]></description>
			<content:encoded><![CDATA[<p>I am working on a quick reference chart (cheat sheet). It&#8217;s by no means done but <a href="http://www.adafruit.com/blog/2010/04/23/arduino-cheatsheet-pdf/">a post over at Adafruit</a> made me think to post it: <a href="http://blog.world3.net/wp-content/uploads/quickref01.pdf">quickref.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2010/04/avr-electronics-quick-reference-sheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playstation controller protocol quirks</title>
		<link>http://blog.world3.net/2010/02/playstation-controller-protocol-quirks/</link>
		<comments>http://blog.world3.net/2010/02/playstation-controller-protocol-quirks/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 01:29:33 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[microcontrollers]]></category>

		<guid isPermaLink="false">http://blog.world3.net/2010/02/playstation-controller-protocol-quirks/</guid>
		<description><![CDATA[Today I discovered why I have been having a few compatibility problems with my Playstation interface code. The PSX uses a SPI bus. The device is supposed to put data on the bus when there is a high to low transition, then read the command on the low to high change. Sure enough the official [...]]]></description>
			<content:encoded><![CDATA[<p>Today I discovered why I have been having a few compatibility problems with my Playstation interface code.</p>
<p>The PSX uses a SPI bus. The device is supposed to put data on the bus when there is a high to low transition, then read the command on the low to high change. Sure enough the official controller sets the data line within 0.3us of the clock transition.</p>
<p>The problem is that some revisions of the PSX hardware don&#8217;t wait for the low to high transition to read the data line. They read at some random point during the clock cycle.</p>
<p>It seems to be some kind of bug because Sony fixed it in later revisions. That is of course assuming that the information on the net about the controller protocol is correct. It may be that the controller is supposed to assert the data line within a few hundred nanoseconds but that seems somewhat unlikely. It would force you to use a hardware SPI bus and thus limit the choice of microcontroller. Maybe Sony don&#8217;t care about the needs of third party developers&#8230;</p>
<p>I saw a PSX dev-kit for sale last year and wish I had it now. Oh well, it&#8217;s sorted now. Make sure the data is there before the transition, just like the PSX does with the command line, and it works.</p>
<p>Anyway,</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2010/02/playstation-controller-protocol-quirks/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>2nd DB9 Connector in the works</title>
		<link>http://blog.world3.net/2009/10/2nd-db9-connector-in-the-works/</link>
		<comments>http://blog.world3.net/2009/10/2nd-db9-connector-in-the-works/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 19:24:43 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[Retro Adapter]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=214</guid>
		<description><![CDATA[I am doing the code for a 2nd DB9 Connector for the Retro Adapter. It converts the DB15 into another DB9 so you can connect two controllers simultaneously for 2 players. Atari/Commodore/Sega controllers are working and I will add support for NES and SNES too. I will probably do N64 as well. The button mapping [...]]]></description>
			<content:encoded><![CDATA[<p>I am doing the code for a 2nd DB9 Connector for the Retro Adapter. It converts the DB15 into another DB9 so you can connect two controllers simultaneously for 2 players.</p>
<p>Atari/Commodore/Sega controllers are working and I will add support for NES and SNES too. I will probably do N64 as well. The button mapping is not ideal but is usable. I experimented with having the RA re-enumerate as two separate controllers but it is not ideal to do on the fly. The current system is a good compromise.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2009/10/2nd-db9-connector-in-the-works/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retro Adapter on sale soon and Retro Adapter Wii</title>
		<link>http://blog.world3.net/2009/09/retro-adapter-on-sale-soon-and-retro-adapter-wii/</link>
		<comments>http://blog.world3.net/2009/09/retro-adapter-on-sale-soon-and-retro-adapter-wii/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 16:45:18 +0000</pubDate>
		<dc:creator>mojo</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.world3.net/?p=185</guid>
		<description><![CDATA[I will be opening the online shop for sales of the Retro Adapter soon (just waiting for the final parts to come in). Both finished adapters and kits will be available, as well as  a selection of connectors. It occurred to me that I can use the same PCB for a Wii/Gamecube version, so I [...]]]></description>
			<content:encoded><![CDATA[<p>I will be opening the online shop for sales of the Retro Adapter soon (just waiting for the final parts to come in). Both finished adapters and kits will be available, as well as  a selection of connectors.</p>
<p>It occurred to me that I can use the same PCB for a Wii/Gamecube version, so I am now working on the Retro Adapter Wii. It will support all the same controllers as the Retro Adapter, and will in fact use the same code where possible. One thing I&#8217;m not sure about is firmware updates, I need to look into the options.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.world3.net/2009/09/retro-adapter-on-sale-soon-and-retro-adapter-wii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

