<?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>Mike&#039;s Lab Notes</title>
	<atom:link href="http://www.mike-stirling.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mike-stirling.com</link>
	<description>Embedded Systems and Electronic Projects</description>
	<lastBuildDate>Thu, 09 May 2013 15:08:45 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Low Cost, High Accuracy Temperature Sensing with a Thermistor</title>
		<link>http://www.mike-stirling.com/2013/04/low-cost-high-accuracy-temperature-sensing-with-a-thermistor/</link>
		<comments>http://www.mike-stirling.com/2013/04/low-cost-high-accuracy-temperature-sensing-with-a-thermistor/#comments</comments>
		<pubDate>Sun, 28 Apr 2013 18:58:55 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[8-Bit]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Home Automation]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=494</guid>
		<description><![CDATA[For many microcontroller projects requiring accurate temperature sensing the sensor of choice is the Maxim DS18B20.  Although this has a specified absolute accuracy of +/- 0.5°C, it has several drawbacks, not least of which is its relatively high cost.  For my prototype sensors I incorporated a TI TMP112, which is an I2C device with a [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://mikestirling.co.uk/2013/04/low-cost-high-accuracy-temperature-sensing-with-a-thermistor/modded_sensor/" rel="attachment wp-att-506"><img class="alignright  wp-image-506" title="modded_sensor" src="http://mikestirling.co.uk/wp-content/uploads/2013/04/modded_sensor.jpg" alt="" width="384" height="288" /></a>For many microcontroller projects requiring accurate temperature sensing the sensor of choice is the <a href="http://www.maximintegrated.com/datasheet/index.mvp/id/2812" target="_blank">Maxim DS18B20</a>.  Although this has a specified absolute accuracy of +/- 0.5°C, it has several drawbacks, not least of which is its relatively high cost.  For my prototype sensors I incorporated a <a href="http://www.ti.com/product/tmp112" target="_blank">TI TMP112</a>, which is an I2C device with a minimum operating voltage of 1.4 V, making it particularly attractive for battery powered applications.  My preferred option for cost-reduction, however, has always been to use a cheap thermistor with the microcontroller&#8217;s built-in analogue to digital converter (ADC).</p>
<p>This post discusses the evaluation of a thermistor-based technique for small embedded systems capable of achieving uncalibrated temperature accuracy to rival expensive digital sensors.  An experimental comparison of various sensors over temperature is then introduced.</p>
<p><span id="more-494"></span></p>
<p>There are a few challenges in using a thermistor well.  Firstly, care must be taken to measure its resistance accurately, and secondly some characteristics of the thermistor need to be obtained, either from the datasheet or experimentally, and applied to a model in order to derive the actual temperature.  The formula that is usually used for this calculation is the <a href="http://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation" target="_blank">Steinhart-Hart equation</a>, which is not well suited for calculation on an 8-bit micro.</p>
<p>To solve the first problem the thermistor is used in a potential divider configuration as one might expect, but with the ADC configured to use the supply rail as its reference.  This makes the ADC count dependent only on the relative resistances in the divider, and eliminates any dependency on the accuracy of the ADC&#8217;s voltage reference.  Since the value of the fixed resistor remains important a 10k 0.1% tolerance part was used here. Even such tight tolerance resistors still only cost pence, so the cost advantage of the thermistor is not lost.  The divider is powered from a GPIO to eliminate current sinking through it while the sensor is asleep.</p>
<p>The second part of the problem helps drive thermistor selection, because choosing a part with reliable manufacturer-supplied Steinhart-Hart coefficients eliminates the need for calibration.  A <a href="http://www.vishay.com/resistors-non-linear/list/product-29056/" target="_blank">Vishay NTCS0603E3103FMT</a> was chosen and a <a href="https://docs.google.com/spreadsheet/ccc?key=0Aq-JTzPFIDKVdG1GaHJYRzRMejZlMUJIdUJQeXJPVUE#gid=0" target="_blank">spreadsheet</a> devised which calculates the thermistor resistance (Rt) and the ratio Rt/R25 value for every 16 ADC counts across the full 10-bit range.  Maximum, nominal and minimum values are calculated in each case, based on quoted component tolerances.  For each row the maximum, nominal and minimum temperature is then calculated using Steinhart-Hart with the coefficients provided by the manufacturer.  Alternative thermistors can be evaluated by entering the R25 value and Steinhart-Hart coefficients on the &#8220;Graphs&#8221; sheet.</p>
<p>The predicted temperature spread due to component tolerance is plotted on the &#8220;Graphs&#8221; sheet and can be seen below for the Vishay thermistor and a 0.1% 10k reference.  At room temperature an error of +/- 0.3°C is predicted, which is well within the desired range.</p>
<p><a href="http://mikestirling.co.uk/2013/04/low-cost-high-accuracy-temperature-sensing-with-a-thermistor/chart_1/" rel="attachment wp-att-502"><img class="aligncenter size-full wp-image-502" title="Predicted accuracy allowing for component tolerances" src="http://mikestirling.co.uk/wp-content/uploads/2013/04/chart_1.png" alt="" width="571" height="323" /></a></p>
<p>To enable the microcontroller to measure temperature directly, the spreadsheet was used to derive a 64-slot lookup table mapping ADC values directly to nominal temperature.  Linear interpolation is used at runtime to calculate intermediate values, but all remaining maths, including the resistance calculation, is mopped up in the lookup table .  When generating the table the output values can be pre-scaled according to the requirements of the application.  Here, a 16-bit fixed-point representation with 8 fractional bits was used, but it would be equally straightforward to calculate the table for direct output of 100ths of °C, or any other scale factor.  The following code fragment demonstrates the resulting steps required to convert an ADC value to temperature on the microcontroller (lookup table truncated for clarity):</p>
<pre style="padding-left: 30px;">/* Lookup table for thermistor ADC values / 16 (64 points for full scale).
 * The result is °C with 8 fractional bits. Values include the
 * resistance calculation for a divider with a 10 k reference, and are
 * calculated using the full Steinhart-Hart formula with constants
 * given on the thermistor datasheet.
 */
static int16_t thermistor_table[] = {
  32767, /* saturate */
  32767, /* saturate */
  32767, /* saturate */
  31350,
  28197,

  ...
  -11247,
  -14041,
};

#define STEP 16

/*! Convert thermistor ADC value to temperature by interpolating
 * the above lookup table */
static int16_t adc_to_temp(uint16_t val)
{
  uint16_t idx = val / STEP; /* FIXME: Limits */
  uint16_t offset = val - idx * STEP;
  int16_t y0 = thermistor_table[idx];
  int16_t y1 = thermistor_table[idx + 1];
  return y0 + (y1 - y0) * (int16_t)offset / STEP;
}</pre>
<p>All of the above is of course purely theoretical, so a sensor board was modified to place the thermistor directly adjacent to the TMP112, and an additional TMP102 sensor was added as shown in the photograph at the top of this article.  The firmware was altered to transmit temperature measurements from each of the three sensors at 10 second intervals, then these values were logged while the board was temperature cycled in the oven and the freezer.</p>
<p>The measured values can be seen in <a href="https://docs.google.com/spreadsheet/ccc?key=0Aq-JTzPFIDKVdEoza1kzTGhEWThCX19yT1AxVUNpQ0E#gid=1" target="_blank">this second spreadsheet</a>.  For each data point the mean temperature is calculated as well as the difference from mean for each sensor, which is used as a figure of merit.  The following graphs show the average temperature over the duration of the test, and the corresponding variation from the mean for each of the three sensors:</p>
<p><a href="http://mikestirling.co.uk/2013/04/low-cost-high-accuracy-temperature-sensing-with-a-thermistor/chart_4/" rel="attachment wp-att-505"><img class="aligncenter size-full wp-image-505" title="Mean Temperature" src="http://mikestirling.co.uk/wp-content/uploads/2013/04/chart_4.png" alt="" width="450" height="320" /></a></p>
<p><a href="http://mikestirling.co.uk/2013/04/low-cost-high-accuracy-temperature-sensing-with-a-thermistor/chart_2/" rel="attachment wp-att-503"><img class="aligncenter size-full wp-image-503" title="Difference from Mean Measured Temperature" src="http://mikestirling.co.uk/wp-content/uploads/2013/04/chart_2.png" alt="" width="450" height="320" /></a></p>
<p>It can be seen that the offset from mean is fairly constant for a given sensor, with the total spread being under 1 degree at steady-state.  Interestingly the TMP112 was almost as far from the mean value as the thermistor, but still within its +/- 0.5°C specification.  The large swing seen during periods of high rate-of-change is thought to be due to the difference in response time between the thermistor and the diode sensors used in the TMP1x2s.  For the thermistor, the average difference from mean measured temperature is about 0.4°C; slightly worse than the predicted value.  This is not unexpected since the prediction takes into account only the spread of component values, and not errors in the Steinhart-Hart coefficients, details of which were not available.</p>
<p><span style="font-size: 13px;">The table below summarises the vital statistics for the sensors used in the experiment, with the DS18B20 included for reference. Pricing was obtained from Farnell UK on 28/4/13 and is ex-VAT.</span></p>
<table>
<tbody>
<tr>
<th>Device</th>
<th>Absolute Accuracy °C</th>
<th>Vcc min /V</th>
<th>Icc min /uA</th>
<th>Price 1 off</th>
<th>Price 100 off</th>
</tr>
<tr>
<td>DS18B20</td>
<td>+/- 0.5</td>
<td>3.0</td>
<td>0.75</td>
<td>£3.80</td>
<td>£2.27</td>
</tr>
<tr>
<td>TMP112</td>
<td>+/- 0.5</td>
<td>1.4</td>
<td>0.5</td>
<td>£2.76</td>
<td>£0.92</td>
</tr>
<tr>
<td>TMP102</td>
<td>+/- 2 (+/- 0.5 typ)</td>
<td>1.4</td>
<td>0.5</td>
<td>£1.68</td>
<td>£1.16</td>
</tr>
<tr>
<td>Vishay NTCS0603E3103FMT</td>
<td>1% on R25</td>
<td>N/A</td>
<td>N/A</td>
<td>£0.39</td>
<td>£0.35</td>
</tr>
</tbody>
</table>
<p>The results indicate that, using the described lookup table method, a low-cost, uncalibrated thermistor can yield an absolute accuracy similar to that of the much more expensive digital sensors.  At the same time, there are no supply voltage restrictions beyond those of the microcontroller, and by using a GPIO to power the divider standby current consumption is limited to leakage and should be negligible.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2013/04/low-cost-high-accuracy-temperature-sensing-with-a-thermistor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RFM22B/23B Availability and RFM69W</title>
		<link>http://www.mike-stirling.com/2013/04/rfm22b23b-availability-and-rfm69w/</link>
		<comments>http://www.mike-stirling.com/2013/04/rfm22b23b-availability-and-rfm69w/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 14:03:13 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Embedded]]></category>
		<category><![CDATA[RF]]></category>
		<category><![CDATA[Uncategorised]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=477</guid>
		<description><![CDATA[There is a degree of uncertainty at the moment regarding the future availability of HopeRF&#8217;s RFM22B and RFM23B modules.  Having been in touch with a number of HopeRF&#8217;s European distributors the message appears to be that while they are indeed &#8220;not recommended for new designs&#8221;, there has been no end-of-life notification for either of these products. [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://mikestirling.co.uk/2013/04/rfm22b23b-availability-and-rfm69w/tx_test_board/" rel="attachment wp-att-402"><img class="alignright  wp-image-402" title="tx_test_board" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/tx_test_board.jpg" alt="" width="384" height="288" /></a></p>
<p>There is a <a href="http://blog.homelabs.org.uk/rfm12b-end-of-life/" target="_blank">degree of uncertainty</a> at the moment regarding the future availability of HopeRF&#8217;s RFM22B and RFM23B modules.  Having been in touch with a number of HopeRF&#8217;s European distributors the message appears to be that while they are indeed &#8220;not recommended for new designs&#8221;, there has been no end-of-life notification for either of these products.  Both modules will continue to be available for the foreseeable future, although they may be subject to minimum order quantities once distributor stocks run dry.</p>
<p>Recommended replacements are the RFM69W and RFM69HW.  These new modules appear to be based on Semtech SX1231H, which means they are not an ideal equivalent because of a 2.4 V minimum Vcc (the RFM23B can work down to 1.8 V).  Fingers crossed that HopeRF has actually used the 1.8 V capable non-H version of the chip on the lower power RFM69W.</p>
<p>Several EU distributors have indicated that they will be carrying the new modules within a month or so.  Pricing looks like it will be slightly cheaper than that of the older modules, so that plus the addition of hardware AES should make these a welcome upgrade.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2013/04/rfm22b23b-availability-and-rfm69w/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Antenna Measurements &#8211; Part 1</title>
		<link>http://www.mike-stirling.com/2013/03/antenna-measurements-part-1/</link>
		<comments>http://www.mike-stirling.com/2013/03/antenna-measurements-part-1/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 21:33:59 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[RF]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=403</guid>
		<description><![CDATA[I finally found the time to make some measurements on the printed antenna used on my sensor board, which I didn&#8217;t think was performing very well.  Turns out I was right. For this first part of the test various antenna configurations were tested by mounting them on unpopulated sensor boards connected to an Anritsu Sitemaster [...]]]></description>
				<content:encoded><![CDATA[<div id="attachment_409" class="wp-caption alignright" style="width: 394px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/pcb_ant/" rel="attachment wp-att-409"><img class=" wp-image-409" title="pcb_ant" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/pcb_ant.jpg" alt="" width="384" height="288" /></a><p class="wp-caption-text">PCB antenna with test port attached</p></div>
<p>I finally found the time to make some measurements on the printed antenna used on my sensor board, which I didn&#8217;t think was performing very well.  Turns out I was right.</p>
<p>For this first part of the test various antenna configurations were tested by mounting them on unpopulated sensor boards connected to an Anritsu Sitemaster RF fault analyser via some added SMA connectors.  This instrument is capable of making return loss measurements, which were taken over a range of 800 MHz to 1 GHz.</p>
<p>Return loss is a measure of the proportion of power reflected back into the transmitter (or back out of the antenna) due to a mismatch.  It is given in decibels as incident minus reflected dB, and is related to VSWR.  A high positive return loss value indicates a good match.</p>
<p>Measurements were made on the following antennas:</p>
<ul>
<li>A reference dipole tuned for resonance while mounted on the instrument</li>
<li>The printed antenna cut to the recommended length for 868 MHz as given in the TI application note</li>
<li>Wire monopoles of length 85 mm, 86 mm and 87 mm</li>
</ul>
<p><span id="more-403"></span></p>
<p>For the purpose of these tests a target VSWR of 1.5:1 was selected as an acceptable match, and corresponds with 96% of the incident power doing useful work.  The corresponding 14 dB return loss figure is marked in red on the graphs.  Note that the instrument shows the return loss as a negative value, but the magnitude may be read directly.  Marked in blue are the ISM band edges at 863 MHz and 870 MHz, and also the common 868.35 MHz spot frequency.</p>
<p>Each antenna was tested with and without a battery pack attached to the board.  This is important because the PCB ground plane capacitively couples to the battery quite effectively and the performance of the antenna is drastically altered in most cases.  The battery consisted of a pair of (old) AA cells in a common side-by-side holder and was attached with double-sided tape.</p>
<div id="attachment_410" class="wp-caption alignleft" style="width: 394px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/ref_antenna_under_test/" rel="attachment wp-att-410"><img class="wp-image-410 " title="ref_antenna_under_test" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/ref_antenna_under_test.jpg" alt="" width="384" height="288" /></a><p class="wp-caption-text">Reference dipole under test</p></div>
<p>&nbsp;</p>
<h2>Reference Dipole</h2>
<p>First up was a reference dipole made by attaching short lengths of wire directly to an SMA connector.  The overall length was initially set to half a wavelength at 868 MHz (173 mm).  During the test the antenna was aligned perpendicular to the plane of the analyser to minimise coupling.  As expected, it was necessary to reduce the length of the antenna slightly to achieve resonance at the desired frequency.  The overall length of the tuned antenna ended up being 160 mm, which is reasonably consistent with the <a href="http://www.antenna-theory.com/antennas/halfwave.php" target="_blank">theory</a>, which results in a half-wave dipole being slightly shorter than a half wavelength.</p>
<p>The antenna exhibits a sharp resonance at the tuned frequency and has enough bandwidth to provide an excellent match across the entire 863 MHz to 870 MHz band.</p>
<div id="attachment_399" class="wp-caption aligncenter" style="width: 515px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/ref-9/" rel="attachment wp-att-399"><img class=" wp-image-399" title="REF-9" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/REF-9.png" alt="" width="505" height="300" /></a><p class="wp-caption-text">Measured return loss for the reference dipole</p></div>
<h2>PCB Antenna</h2>
<p>The original PCB antenna was taken from the design in <a href="http://www.ti.com/lit/an/swra228c/swra228c.pdf" target="_blank">this (PDF) application note</a>.  The dimensions of the rest of the board are fairly similar, but likely too small to provide an adequate counterpoise.  Without the battery there is a poor but measurable match in the band of interest.  The actual resonance appears slightly high meaning the antenna needs lengthening slightly.  The other dip seen below the 868 MHz band is present in most measurements and appears to be related to some other feature of the board, as its frequency remains fairly constant.</p>
<div id="attachment_396" class="wp-caption aligncenter" style="width: 515px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/pcb/" rel="attachment wp-att-396"><img class=" wp-image-396" title="PCB" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/PCB.png" alt="" width="505" height="300" /></a><p class="wp-caption-text">Measured return loss for the PCB antenna with no battery attached</p></div>
<p>With the battery attached, a more realistic scenario, the antenna presents a pretty bad match (VSWR about 3:1 or worse):</p>
<div id="attachment_395" class="wp-caption aligncenter" style="width: 515px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/pcb-8/" rel="attachment wp-att-395"><img class=" wp-image-395" title="PCB-8" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/PCB-8.png" alt="" width="505" height="300" /></a><p class="wp-caption-text">PCB antenna return loss measured with battery attached</p></div>
<h2>Wire Monopole</h2>
<div class="wp-caption alignright" style="width: 240px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/monopole_with_battery/" rel="attachment wp-att-408"><img class=" " title="monopole_with_battery" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/monopole_with_battery.jpg" alt="" width="230" height="307" /></a><p class="wp-caption-text">Sensor board modified for a quarter-wave wire</p></div>
<p>A second unpopulated sensor board was modified with an SMA test port added and the printed antenna removed.  Simple quarter-wave wires were connected to the test port, using the sensor PCB as counterpoise.  Measurements were again taken with and without the battery affixed to the PCB.</p>
<p>The expected quarter wavelength at 868 MHz is 86.5 mm, so wires with lengths 85 mm, 86 mm and 87 mm were tested.  The measured results were similar for each with the optimum length for the band of interest being 87 mm.  Note that the absence of the battery caused the resonant frequency to increase significantly as shown in the following plot.  Although it might be tempting to compensate for this by lengthening the wire, it is likely that the resulting antenna would be easily detuned.</p>
<div id="attachment_390" class="wp-caption aligncenter" style="width: 515px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/87mm-7/" rel="attachment wp-att-390"><img class=" wp-image-390" title="87MM-7" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/87MM-7.png" alt="" width="505" height="300" /></a><p class="wp-caption-text">Return loss measured with an 87 mm long wire and no battery</p></div>
<p>By attaching the battery the antenna behaves much closer to the theory, which is encouraging:</p>
<div id="attachment_392" class="wp-caption aligncenter" style="width: 515px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/87mm-11/" rel="attachment wp-att-392"><img class=" wp-image-392" title="87MM-11" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/87MM-11.png" alt="" width="505" height="300" /></a><p class="wp-caption-text">Return loss for an 87 mm wire with battery attached to PCB</p></div>
<p>And by bending the antenna down so that it is in the plane of the board the tuning is retained within the ISM band but with further improvement to the matching.</p>
<div id="attachment_391" class="wp-caption aligncenter" style="width: 515px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/87mm-10/" rel="attachment wp-att-391"><img class=" wp-image-391" title="87MM-10" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/87MM-10.png" alt="" width="505" height="300" /></a><p class="wp-caption-text">Return loss for an 87 mm wire in the plane of the PCB, with battery attached to PCB</p></div>
<p>Again, note the sharp match at the frequency below the band of interest, which is presumably due to the same feature that caused the double-dip seen for the PCB antenna.  Its frequency is not altered significantly by changing the length of the wire as shown in the final plot, for an 85 mm long wire.  This measurement offers an indication of how accurately the antenna needs to be cut for best match.</p>
<div id="attachment_387" class="wp-caption aligncenter" style="width: 515px"><a href="http://mikestirling.co.uk/2013/03/antenna-measurements-part-1/85mm-3/" rel="attachment wp-att-387"><img class=" wp-image-387" title="85MM-3" src="http://mikestirling.co.uk/wp-content/uploads/2013/03/85MM-3.png" alt="" width="505" height="300" /></a><p class="wp-caption-text">Return loss for an 85 mm wire with battery attached to PCB</p></div>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>The results suggest that a simple quarter wave wire can yield an excellent match even on a small board such as this, but that enlarging the ground plane is beneficial, even if this is only done parasitically such as by mounting in close proximity to the battery.</p>
<p>Once the rain and snow stops I am going to go out to the <del>Open Air Test Site</del> garden to do some actual radiated performance tests which will be reported in due course, but I expect the results to back this up.</p>
<p>If this does turn out to be the case then I will be dropping the printed antenna in favour of 87 mm of wire for a second revision of the sensor!</p>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2013/03/antenna-measurements-part-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Timestore &#8211; a Time Series Database</title>
		<link>http://www.mike-stirling.com/2013/02/timestore-a-time-series-database/</link>
		<comments>http://www.mike-stirling.com/2013/02/timestore-a-time-series-database/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 13:21:06 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Timestore]]></category>
		<category><![CDATA[Uncategorised]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=283</guid>
		<description><![CDATA[As part of my interest in IoT and Home Automation I spent some time looking for a non-destructive alternative to rrdtool for long-term storage and aggregation of sensor data.  The search did turn up a few alternatives, particularly OpenTSDB, but I was not especially impressed with its performance nor its complexity.  During the search I [...]]]></description>
				<content:encoded><![CDATA[<div class="pageview" style="float:right; margin-left:10px;">
	
  <iframe src="/timestore-demo" frameborder="0" style="" scrolling="no" height="288" width="384">Get a better browser!</iframe>
</div>

<p>As part of my interest in IoT and Home Automation I spent some time looking for a non-destructive alternative to <em>rrdtool</em> for long-term storage and aggregation of sensor data.  The search did turn up a few alternatives, particularly <em>OpenTSDB</em>, but I was not especially impressed with its performance nor its complexity.  During the search I came across <a title="Flot" href="http://flotcharts.org">Flot</a>, which is a JavaScript library for plotting graphs client-side in a browser, and the idea for a &#8220;Web2.0&#8243; time-series database was hatched.</p>
<p>Timestore, which is the result, is written in C and accessed via an HTTP API that can feed data series directly to Javascript via AJAX calls.  It is designed to be lightweight, fast, and to retain all data.  Like most equivalent tools it can decimate on inserts, so queries for aggregate data take constant time regardless of the time-scales involved.</p>
<p>The design has optimisations for sensor applications, where a single device may report multiple data items at each time point.  These can be submitted in one go, but queried as separate series for display.  The modular architecture will enable alternative access methods to be added; MQTT being an obvious one which I intend to look into for data submission.</p>
<p>Code and documentation can be found on the <a title="Timestore" href="http://mikestirling.co.uk/redmine/projects/timestore">project&#8217;s dedicated page</a>.  There are some hosted examples to play with, including the graph embedded above, which is real temperature data and can be zoomed by dragging a box around a range.  Double-click to zoom back out.  The software is released under GNU AGPLv3.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2013/02/timestore-a-time-series-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementing the ELV FHT Protocol with an RFM23</title>
		<link>http://www.mike-stirling.com/2013/02/implementing-the-elv-fht-protocol-with-an-rfm23/</link>
		<comments>http://www.mike-stirling.com/2013/02/implementing-the-elv-fht-protocol-with-an-rfm23/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 23:39:16 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[RF]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=302</guid>
		<description><![CDATA[Over the last few weeks I have been helping out the guys over at OpenTRV with an implementation of the FHT protocol for use with HopeRF RFM22B and RFM23B modules.  My as-yet unreleased sensor modules (as seen in another post) make use of an RFM23B, and I have an interest in evaluating the Conrad/ELV FHT8V [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://mikestirling.co.uk/2013/02/implementing-the-elv-fht-protocol-with-an-rfm23/fht1/" rel="attachment wp-att-331"><img class="alignright  wp-image-331" title="fht1" src="http://mikestirling.co.uk/wp-content/uploads/2013/02/fht1.jpg" alt="" width="384" height="288" /></a>Over the last few weeks I have been helping out the guys over at <a title="OpenTRV" href="http://www.earth.org.uk/open-source-programmable-thermostatic-radiator-valve.html" target="_blank">OpenTRV</a> with an implementation of the FHT protocol for use with HopeRF RFM22B and RFM23B modules.  My as-yet unreleased sensor modules (as seen in another post) make use of an RFM23B, and I have an interest in evaluating the Conrad/ELV FHT8V valve head as part of my own central heating upgrades, so this was a job that I needed to do anyway.</p>
<p>The FHT protocol is similar to FS20, but the receivers are battery powered and so use a timeslot technique to avoid the need for a permanently powered receiver.  This necessitates a synchronisation procedure between the controller and its valve.  Once completed, the controller will send a packet approximately every two minutes, keeping the valve in sync.  This means that it can take up to two minutes for a change to take effect, but it does mean that the receiver remains un-powered for most of the time.</p>
<p>This example implements the protocol using the module&#8217;s FIFO mode, requiring minimal intervention from the host MCU.  Source is <a title="FHT AVR example code" href="http://mikestirling.co.uk/files/ms_fht_avr_example-20130502.zip">available</a> for ATMEGA328, so it should work on an Arduino, although I have not tested it yet.</p>
<p><span id="more-302"></span>The protocol is modulated using on-off-keying (OOK) with a zero represented as 400 us on then 400 us off, and a one as 600 us on, then same off.  To generate this using the RFM2x a bitrate of 5000 bps was chosen.  This gives a bit period of 200 us, which is the lowest common denominator for the required timings.  A pre-processed bitstream can then be produced which results in the correct modulation for the message being sent.</p>
<p>The code also includes a proof-of-concept receiver, again using FIFO mode.  To support this some additional preamble is sent outside of the normal FHT encoding.  This does not affect the ability of a genuine FHT device to receive the packet, but makes it much easier for an RFM2x based receiver to participate in the network.  At present the receiver implementation cannot receive packets from a real FHT transmitter, but there are a couple of approaches that I have in mind which could solve this limitation.</p>
<p>The <a title="FHT AVR example" href="http://mikestirling.co.uk/files/ms_fht_avr_example-20130502.zip">firmware</a>, for AVR ATMEGA328, has been tested on one of my <a title="Wireless Sensor Boards Arrived" href="http://mikestirling.co.uk/2012/11/wireless-sensor-boards-arrived/">sensor boards</a>, but should run on an Arduino with minimal changes.  The radio module is connected to the SPI bus, and a serial converter is required on the UART pins to access the embedded command line interface.  Connection details can be found in board.h and comms parameters for the UART are 19200,8,n,1.</p>
<p>Before any command can be sent the sync process must first be completed.  This defines the target house code.  The command &#8220;fht sync &lt;hc1&gt; &lt;hc2&gt;&#8221; can be used to achieve this, where the house codes are given in decimal.  This takes two minutes to complete.  Afterwards, issue &#8220;fht set &lt;setting 0-255&gt;&#8221; to adjust the valve position.  The receiver can only be invoked independently using the command &#8220;fhtrx&#8221;, so two devices running this code would be required to try this out.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2013/02/implementing-the-elv-fht-protocol-with-an-rfm23/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>A Simple RF Protocol (or, what is the point of ZigBee?)</title>
		<link>http://www.mike-stirling.com/2013/02/a-simple-rf-protocol-or-what-is-the-point-of-zigbee/</link>
		<comments>http://www.mike-stirling.com/2013/02/a-simple-rf-protocol-or-what-is-the-point-of-zigbee/#comments</comments>
		<pubDate>Mon, 11 Feb 2013 15:07:09 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[RF]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=265</guid>
		<description><![CDATA[I&#8217;m going to start by admitting that this isn&#8217;t going to be a tirade of abuse against the oddly named 802.15.4-based wireless tech, but rather a request for comments on an open, lightweight alternative, particularly for low-cost sub-GHz applications.  I know what the point of ZigBee is, and the ability to form into self-organising mesh [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://mikestirling.co.uk/2013/02/a-simple-rf-protocol-or-what-is-the-point-of-zigbee/wrapping_paper-binary-300x183/" rel="attachment wp-att-276"><img class="alignright size-full wp-image-276" title="wrapping_paper-binary-300x183" src="http://mikestirling.co.uk/wp-content/uploads/2013/02/wrapping_paper-binary-300x183.jpg" alt="" width="300" height="183" /></a>I&#8217;m going to start by admitting that this isn&#8217;t going to be a tirade of abuse against the oddly named 802.15.4-based wireless tech, but rather a request for comments on an open, lightweight alternative, particularly for low-cost sub-GHz applications.  I know what the point of ZigBee is, and the ability to form into self-organising mesh networks is an obvious advantage for large scale industrial automation, but for domestic applications it feels like overkill.</p>
<p>The industry is apparently thinking along the same lines, because the vast majority of DIY Home Automation (HA) stuff on the market in the UK at least is using proprietary sub-GHz like LightwaveRF.  The driver here is probably cost, but it is my view that the lack of interoperability that this leads to is holding back the mass-market acceptance of HA, and is unnecessary.</p>
<p>What I am looking for is a simple, open (as in freely available, properly documented, royalty free) standard for sub-GHz RF that could be implemented on the cheapest of radios in minimal code space.  I am aware of MQTT-S, although even that looks too complicated for simple sensor/actuator applications, and it doesn&#8217;t define the lower layers, instead running on top of something like ZigBee or 6LoWPAN.</p>
<p><span id="more-265"></span></p>
<p>Some outline requirements:</p>
<ul>
<li>Both master/slave and peer-to-peer networks should be supported.  Meshing need not be ruled out, but is not a key design aim.</li>
<li>Security should be a primary design criterion &#8211; most proprietary protocols seem to be wide open.</li>
<li>The use of IP on the air interface should not be considered &#8211; bridging to IP networks is a job for  a central controller/bridge rather than pushing this complexity (read cost) out to every single node.</li>
<li>Battery powered nodes must be supported, e.g. discontinuous receive/timeslot techniques.</li>
<li>Unidirectional nodes must be supported for extreme cost-sensitive applications.</li>
<li>Obscure modulation schemes must be avoided to maximise the range of available radios.</li>
</ul>
<p>An initial implementation would aim to support SiLabs EzRadio and EzRadioPro, which covers HopeRF RFM12/22/23 modules which are all in common use.</p>
<p>I am keen to hear from anyone with an interest in this area, particularly if there is something filling this need that I have missed.  I am also particularly interested in others&#8217; views on the complexity of existing solutions &#8211; perhaps I am being over-sensitive!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2013/02/a-simple-rf-protocol-or-what-is-the-point-of-zigbee/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Wireless Sensor Boards Arrived</title>
		<link>http://www.mike-stirling.com/2012/11/wireless-sensor-boards-arrived/</link>
		<comments>http://www.mike-stirling.com/2012/11/wireless-sensor-boards-arrived/#comments</comments>
		<pubDate>Tue, 20 Nov 2012 11:57:59 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[8-Bit]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[RF]]></category>

		<guid isPermaLink="false">http://www.mikestirling.co.uk/?p=244</guid>
		<description><![CDATA[As part of my project to bring our central heating into the 21st century I have been working on a custom wireless sensor platform.  My key aim here is to develop a low-cost, open solution with security designed in from the start; something that a lot of sub-GHz protocols seem to totally omit.  I&#8217;m avoiding [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.mikestirling.co.uk/2012/11/wireless-sensor-boards-arrived/dsc_0866/" rel="attachment wp-att-243"><img class="wp-image-243 alignright" title="Sensor PCBs" src="http://www.mikestirling.co.uk/wp-content/uploads/2012/11/DSC_0866.jpg" alt="Sensor PCBs" width="384" height="288" /></a>As part of my project to bring our central heating into the 21st century I have been working on a custom wireless sensor platform.  My key aim here is to develop a low-cost, open solution with security designed in from the start; something that a lot of sub-GHz protocols seem to totally omit.  I&#8217;m avoiding ZigBee because, as much as I want to like it, I keep coming back to the issue that its complexity just pushes up the system cost.  In a domestic environment a simple sub-GHz solution can easily cover a typical property without resorting to meshing.</p>
<p>The design I have gone for combines temperature and light sensing with a pulse input for connection to the gas and electricity meters.  The microcontroller is an <a href="http://www.atmel.com/devices/atmega328.aspx" target="_blank">ATMEGA328</a> and the radio is a <a href="http://www.hoperf.com/" target="_blank">Hope RF</a> RFM23B, which is based on a <a href="http://www.silabs.com/products/wireless/EZRadioPRO/Pages/Si44303132.aspx" target="_blank">SiLabs Si4431</a>.  This is a synthesised transceiver so the potential for congestion can be avoided through the use of listen-before-talk and frequency hopping, the latter also offering a way around the duty cycle restrictions in the 868 MHz band.</p>
<p>The printed antenna needs to be tuned by trimming it to length, which will no doubt be the subject of a future post.  Once the optimal dimensions have been determined this can be applied to any future spin of the boards in advance.  No prizes for spotting the deliberate mistake with the microstrip track passing under the RF module &#8211; I am hopeful it won&#8217;t have too great an effect!</p>
<p>The boards in the photograph just came back from <a href="http://imall.iteadstudio.com/open-pcb/pcb-prototyping.html" target="_blank">iTeadStudio</a> in about a fortnight.  The quality is absolutely excellent considering the &lt;£10 price tag for the 10 circuits.  I have loaded a couple and firmware development is in progress.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2012/11/wireless-sensor-boards-arrived/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Hacking Wireless Radiator Valves with Gnuradio</title>
		<link>http://www.mike-stirling.com/2012/10/hacking-wireless-radiator-valves-with-gnuradio/</link>
		<comments>http://www.mike-stirling.com/2012/10/hacking-wireless-radiator-valves-with-gnuradio/#comments</comments>
		<pubDate>Tue, 16 Oct 2012 22:58:05 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[RF]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=205</guid>
		<description><![CDATA[A simple example of a custom Gnuradio block for decoding a proprietary sub-GHz radio protocol.]]></description>
				<content:encoded><![CDATA[<p><a href="http://mikestirling.co.uk/?attachment_id=333"><img class="alignright  wp-image-333" title="gnuradio" src="http://mikestirling.co.uk/wp-content/uploads/2013/02/gnuradio.jpg" alt="" width="384" height="288" /></a>I have an ongoing project to improve the performance and automation of the heating system in our house, given the ever-rising cost of energy.  As part of this project I am planning to zone the central heating system to allow the temperature of each room to be controlled independently, and to do this I need a way of remotely controlling the radiators.  Because of the level of integration I am looking for I&#8217;ve been unable to find an off-the-shelf solution that meets my needs at a price that is acceptable.  Time to start hacking!</p>
<p>The Conrad FHT8V wireless thermostatic radiator valves (TRVs) are available for around £30, which is the sort of price I&#8217;m prepared to pay to get this project up and running.  I would ideally like to talk directly to these valves from my own controller, so I bought one of the £60 starter kits which includes the remote thermostat and took a look at the on-air protocol using <a title="Gnuradio" href="http://www.gnuradio.org" target="_blank">Gnuradio</a>.</p>
<p>To receive the signal a cheap RTL SDR dongle was used.  This has the Elonics E4000 tuner, which has almost continuous coverage from about 65 MHz to nearly 2 GHz.  The TRVs operate in an ISM band on 868.35 MHz.  Helpfully, the protocol has already been <a title="FHT protocol (German)" href="http://fhz4linux.info/tiki-index.php?page=FHT%20protocol" target="_blank">reverse engineered</a>, making building a receiver a simple task.  The modulation is on-off keying with the symbols encoded as mark and space times of two different lengths, so a custom block was needed in order to decode and frame the messages.  This was written in C++ and integrated with the rest of the receiver in Python.</p>
<p>The code can be found <a title="Gnuradio FS20/FHT decoder" href="http://mikestirling.co.uk/files/gr-fs20_ea9f160f.tar.gz">here</a>, and should serve as a simple introduction into writing custom Gnuradio blocks.</p>
<p><span id="more-205"></span></p>
<p>The flow graph is coded in Python without using Gnuradio Companion because I felt it was easier to get the separate decoding thread working in this way, and is simply:</p>
<blockquote><p>Source -&gt; 50 kHz channel filter -&gt; Demod (Magnitude squared) -&gt; Decimate -&gt; Custom Decoder</p></blockquote>
<p><a title="Gnuradio Modtool" href="https://github.com/mbant/gr-modtool" target="_blank">Modtool</a> was then used to generate the boilerplate code for the custom block:</p>
<pre>$ gr_modtool.py create fs20
$ cd gr-fs20
$ gr_modtool.py add framer_sink -t sink
Operating in directory .
GNU Radio module name identified: fs20
Code is of type: sink
Block/code identifier: framer_sink
Full block/code identifier is: fs20_framer_sink
Enter valid argument list, including default arguments: 
Add Python QA code? [Y/n] n                                                                                           
Add C++ QA code? [Y/n] n</pre>
<p>The decoder block performs symbol decoding, rejecting pulses of unacceptable length, passing the resulting binary values to a state machine for packet synchronisation and parity checking.  Once enough bits have been received the packet is pushed onto a queue for asynchronous processing from Python.</p>
<p>To build, ensuring Gnuradio is in your path and that you have CMake:</p>
<pre>$ cd gr-fs20
$ mkdir build &amp;&amp; cd build
$ cmake ..
$ make
# make install</pre>
<p>The decoder can then be run in-situ with:</p>
<pre>$ ./fs20rx.py</pre>
<p>The asynchronous part of the decoder runs in a separate thread within the Python script.  Packets are popped off the message queue as they arrive and are checksummed using the FHT algorithm, which is subtly different to the FS20 one.  If the packet is valid then the length of the message is inspected to determine whether it came from the thermostat or a window sensor.  Messages are then pretty-printed on stdout as they are received (which is about every 2 minutes).</p>
<div id="attachment_228" class="wp-caption aligncenter" style="width: 596px"><a href="http://mikestirling.co.uk/wordpress/wp-content/uploads/2012/10/fs20sdr.png"><img class=" wp-image-228 " title="Gnuradio FS20 receiver/decoder" src="http://mikestirling.co.uk/wordpress/wp-content/uploads/2012/10/fs20sdr.png" alt="Gnuradio FS20 receiver/decoder" width="586" height="391" /></a><p class="wp-caption-text">Output of the Gnuradio FS20/FHT decoder</p></div>
<ul>
<li> <a href="http://mikestirling.co.uk/files/gr-fs20_ea9f160f.tar.gz">Download the Python and C++ source code</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2012/10/hacking-wireless-radiator-valves-with-gnuradio/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>128K ZX Spectrum on FPGA loads from SD card</title>
		<link>http://www.mike-stirling.com/2011/09/128k-zx-spectrum-on-fpga-loads-from-sd-card/</link>
		<comments>http://www.mike-stirling.com/2011/09/128k-zx-spectrum-on-fpga-loads-from-sd-card/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 23:47:10 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[Retro Computing]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=192</guid>
		<description><![CDATA[So as promised I spent a bit of the bank holiday weekend hacking on the FPGA Spectrum to fix a few bugs.  In the end I got carried away and finished up with a full implementation of the 128K Spectrum +2A running ResiDOS and loading emulator images from an SD card.  It&#8217;s still not cycle [...]]]></description>
				<content:encoded><![CDATA[<p>So as promised I spent a bit of the bank holiday weekend hacking on the FPGA Spectrum to fix a few bugs.  In the end I got carried away and finished up with a full implementation of the 128K Spectrum +2A running <a href="http://www.worldofspectrum.org/residos/" target="_blank">ResiDOS</a> and loading emulator images from an SD card.  It&#8217;s still not cycle accurate, but it is feature complete apart from the disk controller, which isn&#8217;t really needed thanks to the <a href="http://www.zxbada.bbk.org/zxmmcp/" target="_blank">ZXMMC+</a> compatibility that went in as well.</p>
<p>Emulating bus contention and improving the cycle accuracy of the T80 core is definitely on the cards, but for now the ability to finally load emulator images from SD makes the machine extremely usable.  An explanation of how to get this up and running is a job for another post (hint: format the card as IDEDOS and bootstrap ResiDOS into the extra RAM), but for the time being here is a <a title="ZX Spectrum on an FPGA" href="http://mikestirling.co.uk/zx-spectrum-on-an-fpga/">detailed write-up</a> and the <a href="http://www.mikestirling.co.uk/files/spectrum_release_20110901.zip">full VHDL source</a>.</p>
<p>And let&#8217;s not forgot the obligatory eye candy&#8230;</p>
<p><iframe src="http://player.vimeo.com/video/28420449" width="640" height="360" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2011/09/128k-zx-spectrum-on-fpga-loads-from-sd-card/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>VHDL BBC B Design Notes</title>
		<link>http://www.mike-stirling.com/2011/08/vhdl-bbc-b-design-notes/</link>
		<comments>http://www.mike-stirling.com/2011/08/vhdl-bbc-b-design-notes/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 20:14:38 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[FPGA]]></category>
		<category><![CDATA[Retro Computing]]></category>

		<guid isPermaLink="false">http://mikestirling.co.uk/?p=160</guid>
		<description><![CDATA[As promised, some more detailed design notes for my BBC B design are now available. Planning to revisit the Spectrum design next for some bug fixes, as it is clear there is still quite a bit of interest in that.]]></description>
				<content:encoded><![CDATA[<p>As promised, some more detailed design notes for my BBC B design are now <a title="BBC Micro on an FPGA – Design Detail" href="http://mikestirling.co.uk/bbc-micro-on-an-fpga-design-detail/">available</a>.</p>
<p>Planning to revisit the Spectrum design next for some bug fixes, as it is clear there is still quite a bit of interest in that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike-stirling.com/2011/08/vhdl-bbc-b-design-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
