<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Brad&#039;s Projects Blog</title>
	<atom:link href="http://bradsprojects.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bradsprojects.wordpress.com</link>
	<description>Proof I&#039;m Not An Idoit</description>
	<lastBuildDate>Thu, 22 Dec 2011 20:33:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='bradsprojects.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Brad&#039;s Projects Blog</title>
		<link>http://bradsprojects.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://bradsprojects.wordpress.com/osd.xml" title="Brad&#039;s Projects Blog" />
	<atom:link rel='hub' href='http://bradsprojects.wordpress.com/?pushpress=hub'/>
		<item>
		<title>FIX: Include error in Eclipse after upgrading GCC</title>
		<link>http://bradsprojects.wordpress.com/2011/03/02/fix-include-error-in-eclipse-after-upgrading-gcc/</link>
		<comments>http://bradsprojects.wordpress.com/2011/03/02/fix-include-error-in-eclipse-after-upgrading-gcc/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 00:18:48 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[avr-gcc]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=287</guid>
		<description><![CDATA[Just writing a quick post today. I&#8217;ve had an error for quite a while that&#8217;s been bugging me, and I finally got around to figuring out how to fix it. It&#8217;s kind of like when your copilot gets fleas &#8211; it bugs you, but sometimes you just deal with it because of more pressing issues. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=287&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just writing a quick post today.  I&#8217;ve had an error for quite a while that&#8217;s been bugging me, and I finally got around to figuring out how to fix it.  It&#8217;s kind of like when your <a href="http://www.zazzle.com/chewbacca_chewie_is_my_co_pilot_tshirt-235032844427005608">copilot gets fleas</a> &#8211; it bugs you, but sometimes you just deal with it because of <a href="http://www.fecundity.com/pmagnus/greedo.html">more pressing issues</a>.</p>
<p>I was trying to work around a problem a while back that I though would be fixed by upgrading the version of AVR-GCC I was using.  While I got the new version working (4.3.5), it had removed the old version (4.3.4) and for the past few months I&#8217;ve constantly had to ignore warnings about not being able to find include folders.</p>
<p>The error was something like:</p>
<pre>"Include path not found" /usr/lib/gcc/avr {version specific etc...}
</pre>
<p>The fix is pretty simple.  I found the <a href="http://wiki.eclipse.org/CDT/User/FAQ#I_installed_a_new_version_of_my_compiler_but_old_include_paths_of_old_compiler_are_still_there_under_.22Paths_and_Symbols.22_in_project_properties._I_cannot_get_rid_of_them.21_What_do_I_edit_to_remove_the_old_paths_by_hand.3F">solution here</a>, but I didn&#8217;t follow it exactly.  It asks you to delete the following file &#8211; I didn&#8217;t want to risk losing any workspace settings, so I modified it instead.</p>
<ol>
<li>Open up your workspace.</li>
<li>Open the file:  ${workspace}/.metadata/.plugins/org.eclipse.cdt.make.core/${projectname}.sc</li>
<li>Find all the references to your old library path.  I found three references near the top of the file &#8211; simply delete those lines.</li>
<li>Restart Eclipse.</li>
</ol>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/avr/'>AVR</a>, <a href='http://bradsprojects.wordpress.com/tag/avr-gcc/'>avr-gcc</a>, <a href='http://bradsprojects.wordpress.com/tag/eclipse/'>eclipse</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/287/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/287/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/287/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=287&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2011/03/02/fix-include-error-in-eclipse-after-upgrading-gcc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>
	</item>
		<item>
		<title>Life Update and Checkerbot Follow Up</title>
		<link>http://bradsprojects.wordpress.com/2010/08/29/life-update-and-checkerbot-follow-up/</link>
		<comments>http://bradsprojects.wordpress.com/2010/08/29/life-update-and-checkerbot-follow-up/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 06:12:14 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[Project Description]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[avr-gcc]]></category>
		<category><![CDATA[checkers]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[embedded computer vision]]></category>
		<category><![CDATA[mechatronics]]></category>
		<category><![CDATA[microcontroller]]></category>
		<category><![CDATA[sparkfun parts]]></category>
		<category><![CDATA[XBee]]></category>
		<category><![CDATA[xmega]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=266</guid>
		<description><![CDATA[Wow, it&#8217;s been altogether too long since I&#8217;ve posted.  Fortunately, and this is important, I&#8217;ve been able to spend a lot of great, quality time with my family.  We recently had a great time at the Oregon Beach and at the A.C. Gilbert Children&#8217;s Museum since my return from interning at the Robotics Institute at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=266&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Wow, it&#8217;s been altogether too long since I&#8217;ve posted.  Fortunately, and this is important, I&#8217;ve been able to spend a lot of great, quality time with my family.  We recently had a great time at the <a href="http://http://visittheoregoncoast.com/">Oregon Beach</a> and at the <a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBYQFjAA&amp;url=http%3A%2F%2Fwww.acgilbert.org%2F&amp;ei=FV9WTKKZO4r2tgOp2KTaAg&amp;usg=AFQjCNGj67nk72bf8nkziQ8IYB1RX6F_sw&amp;sig2=0KpWbIBHS4rhENxSVWIskw">A.C. Gilbert Children&#8217;s Museum</a> since my return from interning at the <a href="http://www.ri.cmu.edu/index.html">Robotics Institute</a> at Carnegie Mellon University. (No, really, <a href="http://www.ri.cmu.edu/person.html?person_id=2432">I was there</a>!)  I&#8217;d been away from the wife and kid (&#8220;kids&#8221; including the one due in September!) for about a month, and it was great to be back.</p>
<p>For just a paragraph or two, I&#8217;ve gotta spill some philosophy.  Even before you have a family, and especially after you start one, hopefully everything you&#8217;re doing is for their current or future benefit.  There is nothing that can replace the fulfillment of a loving family, and like all great things, it requires preparation.  An interesting point of fact that is that Sam Walton, someone who spent his whole life innovating and who founded the largest retail chain in the world Wal-Mart, determined that he failed in life.  His last three words, given on his death bed while surrounded by his family that he hardly knew, were &#8220;I blew it!&#8221;</p>
<p>No one&#8217;s perfect, it&#8217;s just important to be making progress rather than regress.  New goal in life for me: Don&#8217;t blow it.  I gotta make a little bit more effort in that area, and I&#8217;m thinking even just a random act of kindness or two a day for the people I love will help.  Now, go to your room and think about it for 10 minutes, then come back and read the rest of my post. ;)</p>
<hr /><a href="http://bradsprojects.files.wordpress.com/2010/08/boss_vs_brad.jpg"><img class="size-full wp-image-269 alignright" title="boss_vs_brad" src="http://bradsprojects.files.wordpress.com/2010/08/boss_vs_brad.jpg?w=600" alt="Me standing next to Boss, winner of the 2007 DARPA Urban Challenge"   /></a>I had an amazing time at the Robotics Institute.  That&#8217;s me next to Boss, the autonomous Chevy Tahoe that won the DARPA Urban Challenge a few years back.  It drove itself, without collision and following all normal traffic rules, through a 60 mile urban obstacle course.  It is one of the most famous robots alive.  Boss vs Brad: Brad loses.  Boss vs Millenium Falcon: I&#8217;d love to see that show up on Youtube&#8230;</p>
<p>I got to work with a great group of people on a really fun, agriculture related robotic project.  I&#8217;ll probably share more on that in the future, but it&#8217;s not for me to talk about yet ;).  Most of the people around me were working on the Google XPrize project, and it was awesome to see that and other jaw-dropping amazing projects in the bay I was in.</p>
<p>I&#8217;d like to share a follow up post on how the <strong>checker playing robot</strong> went.  It was pretty fun, albeit stressful.  We knew at the outset that the <a href="http://www.starwars.com/databank/location/hothasteroidfield/">chances of successfully navigating this project was 3,720 to 1</a>, but we decided the risk was worth it.  Plus, we figured we could call the support desk to <a href="http://www.youtube.com/watch?v=0Q8DriPCX2o&amp;NR=1">help us get through any ID10T errors</a>.</p>
<p>The robot was based on the new XMega AVR processor.  It has quite a few more features than the standard AVR chips, which also made it a bit more difficult to use.  I recommend AVR processors highly, but unless you need functionality only provided by the XMega series, I would recommend most beginners stick with AVR chips from the ATMega series.  This project, however, needed the higher processing power, the larger RAM, and the higher flexibility of peripheral hardware offered by the XMegas.</p>
<p>I don&#8217;t want to repeat too much of the description of the design and process that my lab partners and I went through to do this project &#8211; it&#8217;s already available <a href="https://marick-apps.sourcerepo.com/redmine/marick/wiki/checkerbot">on the project website here</a>.  You can download the SolidWorks CAD, EagleCAD, C code, and other project files from there.</p>
<p><img class="alignleft" title="Final robot assembled" src="https://marick-apps.sourcerepo.com/redmine/marick/attachments/download/41/final_bot_front_annotated.png" alt="" width="400" height="504" />So it wasn&#8217;t quite capable of playing checkers at the end of the term.  Our grades took a bit of a hit because of that, too, but it was great to try something new and the reason for this design is as follows:  We tried tackling this problem from a user&#8217;s point of view, which is something I believe is left out of academic and commercial projects all too often.  Who likes to play checkers?  Children and old men in the park.  Most other robots in the class were gantry or industrial robot arm based and relied on a laptop tether to function, which could never be practical when used by children or the elderly for safety, expense, and ease of use reasons.</p>
<p>Our robot weighed in under a pound and was, at least theoretically, easy to use and setup.  It used AA batteries and would be safe for anyone to use, and not expensive to replace if broken.</p>
<p>Now, if only it had worked :D.  The robot performs computer vision by reading images in from a UART based camera directly into the RAM of the XMega.  The XMega then determines where the checker pieces are at, calculates moves, and then goes out onto the board to execute those moves.  We fell just short of what was needed for full functionality in most areas due to lack of time and lack of experience with certain components.  As you&#8217;ll see in the video, poor motor control and localization was the primary point of failure.  Check the project website for a more <a href="https://marick-apps.sourcerepo.com/redmine/marick/projects/checkerbot/wiki/Project_Conclusion">detailed synopsis</a> of what worked and what didn&#8217;t.</p>
<p>In this video, the robot has just captured an image and is moving from the image capture location to the checker board to make a move.  All decisions were autonomous, but the bot was stepped through its motions one step at a time and assisted when its localization or movements were out of place.</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='600' height='368' src='http://www.youtube.com/embed/Z4aYYxrxL1I?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/avr/'>AVR</a>, <a href='http://bradsprojects.wordpress.com/tag/avr-gcc/'>avr-gcc</a>, <a href='http://bradsprojects.wordpress.com/tag/checkers/'>checkers</a>, <a href='http://bradsprojects.wordpress.com/tag/computer-vision/'>computer vision</a>, <a href='http://bradsprojects.wordpress.com/tag/embedded-computer-vision/'>embedded computer vision</a>, <a href='http://bradsprojects.wordpress.com/tag/mechatronics/'>mechatronics</a>, <a href='http://bradsprojects.wordpress.com/tag/microcontroller/'>microcontroller</a>, <a href='http://bradsprojects.wordpress.com/tag/sparkfun-parts/'>sparkfun parts</a>, <a href='http://bradsprojects.wordpress.com/tag/xbee/'>XBee</a>, <a href='http://bradsprojects.wordpress.com/tag/xmega/'>xmega</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/266/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/266/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=266&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/08/29/life-update-and-checkerbot-follow-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/08/boss_vs_brad.jpg" medium="image">
			<media:title type="html">boss_vs_brad</media:title>
		</media:content>

		<media:content url="https://marick-apps.sourcerepo.com/redmine/marick/attachments/download/41/final_bot_front_annotated.png" medium="image">
			<media:title type="html">Final robot assembled</media:title>
		</media:content>
	</item>
		<item>
		<title>XBoot &#8211; Quick Start Guide (for a sweet XMega bootloader!)</title>
		<link>http://bradsprojects.wordpress.com/2010/05/14/xboot-quick-start-guide-for-a-sweet-xmega-bootloader/</link>
		<comments>http://bradsprojects.wordpress.com/2010/05/14/xboot-quick-start-guide-for-a-sweet-xmega-bootloader/#comments</comments>
		<pubDate>Sat, 15 May 2010 03:22:23 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[avr-gcc]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[XBee]]></category>
		<category><![CDATA[xboot]]></category>
		<category><![CDATA[xmega]]></category>
		<category><![CDATA[xmega bootloader]]></category>
		<category><![CDATA[zigbee]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=248</guid>
		<description><![CDATA[So in my recent XMega wanderings,  I needed a good bootloader.  After muddling through various app notes and forum postings, I came across the culmination of what I couldn&#8217;t do on my own &#8211; XBoot! In my defense, I&#8217;ve worked on bootloaders before.  But the errata sheet on the XMegas is longer than the list [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=248&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So in my recent XMega wanderings,  I needed a good bootloader.  After muddling through various app notes and forum postings, I came across the culmination of what I couldn&#8217;t do on my own &#8211; XBoot!</p>
<p>In my defense, I&#8217;ve worked on bootloaders before.  But the errata sheet on the XMegas is longer than the list of men Princess Leia has broken the hearts of.  And I&#8217;ve become one of the many casualties of that list.  (Erm, the errata list&#8230;  awkward&#8230;)</p>
<p>Big thanks to Alex Forencich!  XBoot, a fantastic reincarnation of the AVR1605 app note, is open source and highly configurable bootloader, which at the time of writing is capable of UART or I2C bootloading XMega processors.  I believe his intentions are to expand both processor compatibility and protocol options, so visit the <a href="http://code.google.com/p/avr-xboot/">XBoot Google Code</a> project for more info.</p>
<p>I&#8217;ll  be going through and explaining the options that I used, so this isn&#8217;t an exhaustive tutorial.  This guide assumes you have a working XMega development environment, AVRDude installed, and SVN (if you want to download the code this way).  WinAVR should work just fine with a few minor alterations, but I&#8217;ve only tested this on Kubuntu with the development environment described in <a href="http://bradsprojects.wordpress.com/2010/04/29/xmega-solution-for-kubuntu/">this previous blog post</a>.  Also, as a side note, I&#8217;ve been using XBoot with XBee Series 1 wireless modules and it works fantabulous (that&#8217;s so good, I had to come up with a new word for it).</p>
<h2>Overview</h2>
<p>Here&#8217;s the step-by-step big picture:</p>
<ol>
<li>Download the code.</li>
<li>Pick a bootloader entry method.</li>
<li>Configure communication parameters (Port/Baud Rate/I2C addressing, etc.).</li>
<li>Compile &amp; program XBoot onto the MCU.</li>
<li>Send main application via XBoot and AVRDude.</li>
</ol>
<h2>Download the Code</h2>
<p>So let&#8217;s get started.  Download the code from the <a href="http://code.google.com/p/avr-xboot/downloads/list">XBoot download page</a> and uncompress it, or (my preference) use SVN to download the code:</p>
<pre>
<pre><tt>svn checkout http://avr-xboot.googlecode.com/svn/trunk/ avr-xboot</tt></pre>
</pre>
<h2>Configure XBoot</h2>
<p>Once the code is downloaded, find the file named &#8220;xboot.h&#8221;.  Most configuration changes, if not all, will be made here.  We&#8217;ll take it one section at a time.  Line item references are from Rev12 out of the repository, but you should be able to match them up to any version.  The idea is that all available options are enabled, so comment out what you won&#8217;t be using.</p>
<pre>// AVR1008 fixes
// Really only applicable to 256a3 rev A and B devices
//#define USE_AVR1008_EEPROM</pre>
<p>Uncomment this line if you&#8217;ll be using an XMega256a3.  This fixes certain problems (remember <span style="text-decoration:line-through;">Princess Leia</span> the errata list?). I&#8217;ve heard this has hit some people but not others, even on the same silicon revision.  It may be useful for certain other chips and families &#8211; YMMV.  Check with Google if concerned.</p>
<pre>Line 64:
// bootloader entrance
#define USE_ENTER_DELAY
//#define USE_ENTER_PIN
#define USE_ENTER_UART
//#define USE_ENTER_I2C</pre>
<p>Here I picked the &#8220;USE_ENTER_DELAY&#8221; and &#8220;USE_ENTER_UART&#8221;, hence I commented the other two out.  Note that the &#8220;USE_ENTER_DELAY&#8221; just puts a delay at the start of the program, and isn&#8217;t mutually exclusive with the other options.  Here&#8217;s what the options mean:</p>
<ul>
<li>USE_ENTER_DELAY: Delays entry by a timeout.  Timeout is set by &#8220;ENTER_BLINK_COUNT&#8221; and &#8220;ENTER_BLINK_WAIT&#8221;, but I found the default settings worked well.</li>
<li>USE_ENTER_PIN: Select this option if you want to enter the bootloader when a pin is in a certain state at power on.  Ex: You press a switch when you power cycle to enter the bootloader.  You&#8217;ll have to configure which port/pin at line 95, at the section titled &#8220;ENTER_PIN&#8221;.</li>
<li>USE_ENTER_UART: Select this option if you want to enter the bootloader if a character is received on the UART.  This requires using &#8220;USE_ENTER_DELAY&#8221; by necessity.  You&#8217;ll need to configure the UART options at line 111.</li>
<li>USE_ENTER_I2C: Select this option if you want to enter the bootloader if a byte is received through I2C.  I haven&#8217;t used this option, hence I won&#8217;t try to elaborate.</li>
</ul>
<p>On to the next section:</p>
<pre>Line 73:
// bootloader communication
#define USE_LED
#define USE_UART
//#define USE_I2C
//#define USE_I2C_ADDRESS_NEGOTIATION
//#define USE_ATTACH_LED</pre>
<p>I&#8217;ll be using the UART and LED, so everything else is commented out.  If you use the LED, configure the next section also:</p>
<pre>Line 106:
// LED
#define LED_PORT                PORTA
#define LED_PIN                 0
#define LED_INV                 1</pre>
<p>If you&#8217;re using the UART, configure this section:</p>
<pre>Line 111:
// UART
#define UART_BAUD_RATE                  19200
#define UART_PORT                       PORTD
#define UART_DEVICE_PORT                D1
#define UART_DEVICE                     token_paste2(USART, UART_DEVICE_PORT)
#define UART_DEVICE_RXC_ISR             token_paste3(USART, UART_DEVICE_PORT, _RXC_vect)
#define UART_DEVICE_DRE_ISR             token_paste3(USART, UART_DEVICE_PORT, _DRE_vect)
#define UART_DEVICE_TXC_ISR             token_paste3(USART, UART_DEVICE_PORT, _TXC_vect)
#define UART_TX_PIN                     PIN7_bm</pre>
<p>Should be pretty self-explanatory.  You should only need to change UART_BAUD_RATE, UART_PORT, UART_DEVICE_PORT, and UART_TX_PIN.  If you use an exotic baud rate (non-standard and/or fast), you might want to change the settings at line 51 and select the 32MHz clock option.</p>
<p>That&#8217;s pretty much it for this section!</p>
<h2>Compile &amp; Program</h2>
<p>This should work if you&#8217;re using AVR-GCC in Linux.  I can&#8217;t vouch for WinAVR, but it shouldn&#8217;t take much to change it.  That said, the only thing that really needs to change in the Makefile is the programmer name and the chip you&#8217;re compiling it for:</p>
<pre>Line 42:
# MCU name
## MCU = atxmega16a4
## MCU = atxmega32a4
## MCU = atxmega64a1
## MCU = atxmega64a3
## MCU = atxmega64a4
## MCU = atxmega128a1
## MCU = atxmega128a3
## MCU = atxmega128a4
## MCU = atxmega192a1
## MCU = atxmega192a3
## MCU = atxmega256a1
## MCU = atxmega256a3b
MCU = atxmega256a3
#MCU = atxmega64a3
#MCU = atxmega128a1
#MCU = atxmega32a4</pre>
<p>For me, I&#8217;ve been using the XMega256A3 chip.  At random, I decided to uncomment the atxmega256a3 line.  YMMV.</p>
<pre>Line 209:
#AVRDUDE_PROGRAMMER = jtag2pdi
#AVRDUDE_PROGRAMMER = avr109
AVRDUDE_PROGRAMMER = avrispmkII</pre>
<p>And I&#8217;m using an AVRISP mkII programmer, which is pretty cheap for an authentic Atmel programmer.  It only does PDI programming (no debugging), and needs to be updated to the latest firmware using AVR Studio (sorry, penguins &#8211; you&#8217;ll have to boot into Windows), but it does the XMega trick right nicely.</p>
<p>To compile and subsequently program:</p>
<pre>$ make
$ make program</pre>
<p>This should compile and program XBoot into the programmer.  Shazaam!  If you get any errors, feel free to leave me a comment and I&#8217;ll try to help you out.</p>
<h2>Programming an Application Via XBoot</h2>
<p>So now that you&#8217;ve got XBoot loaded, you can use AVRDude again to program your application to your XMega:</p>
<pre>avrdude -p atxmega64a3 -P /dev/ttyUSB0 -c avr109 -b 19200 -U flash:w:main.hex</pre>
<p>For those of you who may have installed Eclipse as described in previous posts, you can make Eclipse use the bootloader by:</p>
<ul>
<li>Click on &#8220;Run -&gt; Run Configurations&#8230;&#8221;</li>
<li>Right click on &#8220;C/C++ Application&#8221; on the left and select &#8220;New&#8221;</li>
<li>In the &#8220;Name:&#8221; textbox, enter &#8220;Program via XBoot&#8221;</li>
<li>In the &#8220;C/C++ Application:&#8221; textbox, enter &#8220;/usr/bin/avrdude&#8221; (or where ever it&#8217;s installed if you&#8217;re using Windows)</li>
<li>Click on the &#8220;Arguments&#8221; tab.  Enter the following line, modify to suit your needs, and then click &#8220;Apply&#8221; and &#8220;Close&#8221;</li>
</ul>
<pre>-c avr109 -p x256a3 -P /dev/ttyUSB0 -b 19200 -e -U flash:w:Debug/eclipse_project_name.hex</pre>
<p>There you have it.  As always, if you need any help just ask in the comments below!</p>
<div id="_mcePaste" style="overflow:hidden;position:absolute;left:-10000px;top:0;width:1px;height:1px;"><tt>svn checkout <strong><em>http</em></strong>://avr-xboot.googlecode.com/svn/trunk/ avr-xboot-read-only</tt></div>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/avr/'>AVR</a>, <a href='http://bradsprojects.wordpress.com/tag/avr-gcc/'>avr-gcc</a>, <a href='http://bradsprojects.wordpress.com/tag/open-source/'>open source</a>, <a href='http://bradsprojects.wordpress.com/tag/xbee/'>XBee</a>, <a href='http://bradsprojects.wordpress.com/tag/xboot/'>xboot</a>, <a href='http://bradsprojects.wordpress.com/tag/xmega/'>xmega</a>, <a href='http://bradsprojects.wordpress.com/tag/xmega-bootloader/'>xmega bootloader</a>, <a href='http://bradsprojects.wordpress.com/tag/zigbee/'>zigbee</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=248&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/05/14/xboot-quick-start-guide-for-a-sweet-xmega-bootloader/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>
	</item>
		<item>
		<title>Checkers?  What the &#8230; oh &#8230; Checkers!</title>
		<link>http://bradsprojects.wordpress.com/2010/05/12/checkers-what-the-oh-checkers/</link>
		<comments>http://bradsprojects.wordpress.com/2010/05/12/checkers-what-the-oh-checkers/#comments</comments>
		<pubDate>Thu, 13 May 2010 01:58:11 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[Project Description]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[checkers]]></category>
		<category><![CDATA[continuous rotation servo]]></category>
		<category><![CDATA[electronic components]]></category>
		<category><![CDATA[microcontroller]]></category>
		<category><![CDATA[mobile autonomous robot]]></category>
		<category><![CDATA[robotics]]></category>
		<category><![CDATA[XBee]]></category>
		<category><![CDATA[xmega]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=245</guid>
		<description><![CDATA[In case you&#8217;ve noticed, my last few posts have not been about the ZephyrEye.  Not to fear &#8211; ZephyrEye is alive and well!  Boards should be readily available soon.  So for everyone out there interested in hacking together some Battlefront radar screens with your paintball/laser tag buddies, it is coming shortly.  Of course, if you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=245&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In case you&#8217;ve noticed, my last few posts have not been about the ZephyrEye.  Not to fear &#8211; ZephyrEye is alive and well!  Boards should be readily available soon.  So for everyone out there interested in hacking together some <a href="http://video.google.com/videoplay?docid=4150834925644221611#">Battlefront radar screens</a> with your paintball/laser tag buddies, it is coming shortly.  Of course, if you can&#8217;t wait, feel free to grab the schematics and spin your own PCB ;)</p>
<p>So what the heck have I been posting about?  As I <a href="http://bradsprojects.wordpress.com/2010/04/13/catchup/">mentioned previously</a>, I&#8217;m taking a <a href="http://en.wikipedia.org/wiki/Mechatronics">Mechatronics</a> course where we have to build a checker playing robot.  Here&#8217;s a conceptual animation for the design that my team and I came up with:</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='600' height='368' src='http://www.youtube.com/embed/nqvkEdjNYXs?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span>
<p>I used <a href="http://www.blender3d.org">Blender3D</a> to animate this video.  I&#8217;ve found with several of my robotics projects that <em>most</em> people get confused when I try to describe it.  By making a rough 3D sketch and animating the intended functionality, I&#8217;ve been able to talk with people much more effectively and get faster and better feedback about what will or won&#8217;t work.  It also helps me get several jumbled and mixed together concepts in my head down to a single, better defined concept.  If you&#8217;re planning on doing robotics, especially if you&#8217;re working on it from an electronics point of view, I&#8217;d highly recommend learning a 3D sketching system.  <a href="http://www.youtube.com/watch?v=QVruqFDmbyU">But I digress&#8230;</a></p>
<p>So this checker playing robot needs to be able to play checkers completely autonomously.  Most teams used either a stationary robotic arm or gantry style approach.  I&#8217;ve never been a big fan of either, in fact, I&#8217;m pretty enamored with the concept of small <a href="http://books.google.com/books?id=gUbQ9_weg88C&amp;printsec=frontcover&amp;dq=autonomous+mobile+robots&amp;source=bl&amp;ots=X2F9RCo7aO&amp;sig=MLOBJwq9p_aZ4B9sVWlwjKhzDcw&amp;hl=en&amp;ei=_wjlS8L8A4XQsQPc-L3RCw&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=6&amp;ved=0CDsQ6AEwBQ#v=onepage&amp;q&amp;f=false">autonomous mobile robots</a>.  A big reason for this is the ability to quickly apply <a href="http://en.wikipedia.org/wiki/Swarm_robotics">swarm concepts</a> to these robots if you build a few up, which is something I always toy around with in the back of my head but never do.</p>
<p>Here&#8217;s some of the primary system components and a simple description of each of them:</p>
<ul>
<li><strong>XMega256:</strong> Pretty powerful little chip.  I both appreciate this chip and its potential, and at the same time can&#8217;t believe how long the errata list is.  It&#8217;s pretty bad, but fortunately I haven&#8217;t run into too much trouble yet.  I&#8217;ll be using this for all of the checker-playing AI, computer vision, and localization tasks.  Yep, you heard me: computer vision on an AVR!</li>
<li><strong>C328:</strong> OK, so the computer vision isn&#8217;t as hard as it could be &#8211; the COMedia C328 is a pretty easy to use (relatively speaking) UART camera.  The datasheet sucks, and it looks like it&#8217;s being discontinued.  I&#8217;m sure other similar parts will crop up soon, though.  I&#8217;ve been reading in raw 565 RGB images into the XMega RAM and finding color blobs with it.  I can also transmit a JPEG to a computer via XBee.</li>
<li><strong>XBee:</strong> I use these for just about everything.  I usually write up a debug interface between the computer terminal and the robot so I can debug very quickly, and portably &#8211; it&#8217;s just as easy to debug and control from my desktop as it is my laptop, making presentations a lot easier.</li>
<li><strong>Servos:</strong> We went with servos for motor control.  As my other posts have alluded, I&#8217;m using some hacked for continuous rotation, and instead of controlling position I&#8217;m controlling their speed with a standard servo signal.  To maintain balance (I didn&#8217;t want to go down the inverted pendulum road&#8230;), the bot also has a servo with a &#8220;propeller&#8221; mounted in front.  The propeller slides over checkers as the bot goes forward and backwards, but rotates when the bot turns to avoid strafing the board and moving checker pieces all over the place.</li>
<li><strong>IR Sensors:</strong> There&#8217;s a bank of 6 IR emitter/detector pairs on the front of the bot.  These are used to detect where the bot is at on the checkerboard.    By monitoring the difference between when a left and IR detectors hit a checker square, you can also correct and maintain orientation so you don&#8217;t knock checkers all over the board.</li>
<li><strong>Odometer Sensors:</strong> More IR sensors, this time the QRE1113 reflectance sensors.  These sensors monitor a band of alternating light/dark colors on the inside of the wheel, so every time the wheel moves a certain distance, the XMega gets a &#8220;tick&#8221; that&#8217;s worth a certain distance.</li>
<li><strong>Chassis:</strong> A benefit of being in school, I have access to 3D printers that can take certain CAD files and actually &#8220;print&#8221; 3D objects in ABS plastic.  We used this for the chassis, which put all of our servo mounts, sensor mounts, and other typically difficult-to-make-precise-on-prototype features a lot more accurate.  It cost about $30 &#8211; not bad for what we get.</li>
</ul>
<p>That&#8217;s the general idea.  Here&#8217;s a picture of where it&#8217;s at right now:</p>
<p style="text-align:center;"><a rel="attachment wp-att-252" href="http://bradsprojects.wordpress.com/2010/05/12/checkers-what-the-oh-checkers/top_view/"><img class="size-medium wp-image-252 aligncenter" title="Top view of my team's checker playing robot 12 May 2010" src="http://bradsprojects.files.wordpress.com/2010/05/top_view.jpg?w=300&#038;h=228" alt="" width="300" height="228" /></a></p>
<p>Here&#8217;s hoping that I get it done in time!  I don&#8217;t think it&#8217;ll get done in 12 parsecs, but that&#8217;s a <a href="http://answers.yahoo.com/question/index?qid=20071027172006AAO6eyN">measurement of space and not time</a> anyway &#8230;</p>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/avr/'>AVR</a>, <a href='http://bradsprojects.wordpress.com/tag/checkers/'>checkers</a>, <a href='http://bradsprojects.wordpress.com/tag/continuous-rotation-servo/'>continuous rotation servo</a>, <a href='http://bradsprojects.wordpress.com/tag/electronic-components/'>electronic components</a>, <a href='http://bradsprojects.wordpress.com/tag/microcontroller/'>microcontroller</a>, <a href='http://bradsprojects.wordpress.com/tag/mobile-autonomous-robot/'>mobile autonomous robot</a>, <a href='http://bradsprojects.wordpress.com/tag/robotics/'>robotics</a>, <a href='http://bradsprojects.wordpress.com/tag/xbee/'>XBee</a>, <a href='http://bradsprojects.wordpress.com/tag/xmega/'>xmega</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/245/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=245&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/05/12/checkers-what-the-oh-checkers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/05/top_view.jpg?w=300" medium="image">
			<media:title type="html">Top view of my team&#039;s checker playing robot 12 May 2010</media:title>
		</media:content>
	</item>
		<item>
		<title>Servo Control with an XMega</title>
		<link>http://bradsprojects.wordpress.com/2010/05/03/servo-control-with-an-xmega/</link>
		<comments>http://bradsprojects.wordpress.com/2010/05/03/servo-control-with-an-xmega/#comments</comments>
		<pubDate>Tue, 04 May 2010 05:07:49 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[avr-gcc]]></category>
		<category><![CDATA[avr-libc]]></category>
		<category><![CDATA[servos]]></category>
		<category><![CDATA[xmega]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=234</guid>
		<description><![CDATA[I&#8217;m not going to go into a long treatise on PWM servo signals &#8211; there are plenty of references for that already.  I&#8217;d like to focus on a simple way to do a bunch of servos with fairly accurate timings on an XMega.  Also, I know this isn&#8217;t an optimal implementation &#8211; there are efficiency [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=234&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not going to go into a long treatise on PWM servo signals &#8211; there are <a href="http://www.lmgtfy.com/?q=how+does+servo+pwm+work">plenty of references for that already</a>.  I&#8217;d like to focus on a simple way to do a bunch of servos with fairly accurate timings on an XMega.  Also, I know this isn&#8217;t an optimal implementation &#8211; there are efficiency improvement that could be made on almost every front.  But it took me almost no time to come up with, and that says a lot.  I&#8217;m more of an idoit than I let on&#8230;</p>
<p>The method I&#8217;m going to line out below can drive up to 7 servos completely in interrupts.  It&#8217;ll use up your timers, but it&#8217;s easy peasy and will save you time if you don&#8217;t need all your timers for other tasks.</p>
<p>So, we&#8217;ve got a standard servo signal that&#8217;s composed of basically three stages:</p>
<ol>
<li>A twenty millisecond low period.</li>
<li>A one millisecond high period.</li>
<li>A variable high period:  To turn the servo to one extreme, force   the signal low immediately.  To  turn  the servo to the opposite extreme, force the signal low after a  full  millisecond.  To turn  it to  some point in between, just vary the signal at this point between  zero  and one milliseconds.</li>
</ol>
<p>With the advent of the XMega, the AVR series of microcontrollers now have an plethora of peripherals, notably for this article eight 16-bit timers.  EIGHT!  That&#8217;s power, baby.  For this example, I&#8217;ll only do two servos, which will require three timers.  That seems like a lot because with most ATMegas, that was about it &#8211; you only had 4 timers, and only two of those were 16-bit (and 8-bit timers == headaches</p>
<p>I started from <a href="http://www.atmel.com/dyn/products/app_notes_v2.asp?family_id=607">App Note AVR1306</a>, which describes the timers.  BTW, app notes are <em>the</em> way to become familiar with the XMegas, especially if you&#8217;re coming up from the previous AVR families.  Download the drivers along with the PDF, they&#8217;re pretty useful.  Include these in your project.  I&#8217;ve used these with only a few modifications, and they&#8217;ve worked pretty well for me so far.</p>
<p>Set up a global array that can be used for servo position variables:</p>
<pre>volatile uint16_t servo[3];</pre>
<p>Note it&#8217;s declared volatile &#8211; this is necessary for all variables you&#8217;ll be using between the main loop and an interrupt service routine.  Also note that I declared 3 spaces for two servos &#8211; on this particular one, I liked labeling the servos &#8220;Servo1&#8243;, &#8220;Servo2&#8243;, etc. instead of base zero.  Personal preference, but adding the extra byte keeps the numbering consistent between labels and array index.</p>
<p>Next up is the timer initialization routine.  Let&#8217;s look at it first.  The comments are fairly explanatory, and I&#8217;ll go through it a little more afterwards:</p>
<pre>/*! \brief This function initializes timers for use as servo PWM signal drivers.
 *
 *    This function initializes timers for use as servo PWM signal drivers.
 *    It probably wouldn't hurt to improve this by making it modular at some point...
 *
 *    - TimerD0: 20ms servo timer.  This timer triggers the rest of the servo position timers.
 *    - TimerD1: 1-2ms Servo1 position timer.
 *    - TimerE0: 1-2ms Servo2 position timer.
 *
 */
void init_timers()
{
    //! TimerD0: 20ms Servo Timer
    TC_SetPeriod( &amp;TCD0, 2500 );                            // Set period (2500 ticks = 20ms)
    TC0_SetOverflowIntLevel( &amp;TCD0, TC_OVFINTLVL_MED_gc );  // Set Interrupt on Overflow
    TC0_ConfigClockSource( &amp;TCD0, TC_CLKSEL_DIV256_gc );    // Set clock and prescaler (8us per tick)

    //! TimerD1: Servo1 Position Timer
    TC1_SetOverflowIntLevel( &amp;TCD1, TC_OVFINTLVL_OFF_gc );  // Set Interrupt on Overflow, but not yet
    TC1_ConfigClockSource( &amp;TCD1, TC_CLKSEL_DIV256_gc );    // Set clock and prescaler (8us per tick)

    //! TimerE0: Servo2 Position Timer
    TC0_SetOverflowIntLevel( &amp;TCE0, TC_OVFINTLVL_OFF_gc );  // Set Interrupt on Overflow, but not yet
    TC0_ConfigClockSource( &amp;TCE0, TC_CLKSEL_DIV256_gc );    // Set clock and prescaler (8us per tick)

    PMIC.CTRL |= PMIC_MEDLVLEN_bm;
    sei();
}</pre>
<p>So, as the above code lines out, TimerD0 is the 20 millisecond timer.  Every twenty milliseconds, it fires.  When it does, it raises the servo signal and then enables TimerD1 and TimerE0, which subsequently time out the 1ms period + position offset.  These functions all come from the application note mentioned above.  The three functions used to set up TimerD0 sets the period, enables the overflow interrupt at the medium tier, and then sets the prescaler.   Pretty straightforward if you use the driver functions.</p>
<p>Here&#8217;s the ISR for TimerD0:</p>
<pre>/*! \brief Timer/CounterD0 Overflow interrupt service routine
 *
 *  TimerD0 overflow interrupt service routine.
 *  Set for a 20ms period.  Sets servo output port pin, enables TCD1 which resets the pin.
 */
ISR(TCD0_OVF_vect)
{
    uint16_t period;

    /// SERVO1 Timer Enable
    period = 63 + SERVO1_OFFSET + servo[1];                // Calculate period
    SET_SERVO1;                                            // Raise the servo pin
    TC1_SetOverflowIntLevel( &amp;TCD1, TC_OVFINTLVL_MED_gc ); // Set Interrupt on Overflow
    TC_SetPeriodBuffered( &amp;TCD1, period);                  // Start TCD1, set period
    TC1_ConfigClockSource( &amp;TCD1, TC_CLKSEL_DIV256_gc );   // Set clock and prescaler (8us per tick)

    /// SERVO2 Timer Enable
    period = 63 + SERVO2_OFFSET + servo[2];                // Calculate period
    SET_SERVO2;                                            // Raise the servo pin
    TC0_SetOverflowIntLevel( &amp;TCE0, TC_OVFINTLVL_MED_gc ); // Enable timer overflow interrupt
    TC_SetPeriodBuffered( &amp;TCE0, period);                  // Start timer, set period
    TC0_ConfigClockSource( &amp;TCE0, TC_CLKSEL_DIV256_gc );   // Set clock and prescaler (8us per tick)
}</pre>
<p>So, it does the following for both servos:</p>
<ul>
<li>Calculates the period.  If everything were a perfect world, the constant 63 should be 125 (and a #define ;) which, with the prescaler given and a 32MHz clock, should be 1ms.  However, between natural delays in the code and the particular servos I was using, I calibrated that offset to be 63 to get the maximum range.  YMMV.</li>
<li>Raises the servo signal pin.  This macro is defined in my header file, and is pretty simple: #define SET_SERVO1 PORTD.OUTSET = PIN5_bm</li>
<li>Enables the interrupt</li>
<li>Sets the period.  You must use the TC_SetPeriodBuffered for this particular application (can&#8217;t remember why off the top of my head).</li>
<li>Set the clock source to enable the timer.</li>
</ul>
<p>Did you notice a subtle difference between the TimerD1 and TimerE0 code?  There are two types of timers in the XMegas &#8211; Timer0&#8242;s and Timer1&#8242;s.  Hence, there are TC0_ prefixes and TC1_ prefixes that must be used for appropriate timers.  I&#8217;ll have to refer you to the datasheet, because once again I can&#8217;t remember what the difference is &#8211; it&#8217;s not relevant for this example.</p>
<p>Last, let&#8217;s look at the position timer ISR code:</p>
<pre>/*! \brief Timer/CounterD1 Overflow interrupt service routine
 *
 *  Timer D1 overflow interrupt service routine.
 *  Ends the Servo1 position pulse and disables itself.
 */
ISR(TCD1_OVF_vect)
{
    CLR_SERVO1;                                            // Reset the servo pin low
    TC1_SetOverflowIntLevel( &amp;TCD1, TC_OVFINTLVL_OFF_gc ); // Clear Interrupt on Overflow
    TC1_ConfigClockSource( &amp;TCD1, TC_CLKSEL_OFF_gc );      // Stop clock
}</pre>
<p>There&#8217;s not much to it:  Reset the signal low, disable the timer interrupt, and disable the timer clock source.  This all gets re-enabled in about 18-19ms!</p>
<p>Now, from just about anywhere in your program, when you want to update the servo position, you just have to change the value of the appropriate servo[] index.  Here&#8217;s an example main loop:</p>
<pre>int main(void) {
    init_clock();
    init_io();
    init_timers();

    int i;
    for (i=0 ; i&lt;20 ; i+=10)
    {
        servo[1] = i;
        servo[2] = i;
        _delay_ms(1000);
    }
}</pre>
<p>I should mention that you need to include &#8220;pmic_driver.h&#8221; from the PMIC app note AVR1305, and &#8220;TC_driver.h&#8221; from AVR1306.  Also copy in the matching .c files into the same folder.</p>
<p>That&#8217;s really about it.  And it&#8217;s easy to add on to this and control another servo:</p>
<ol>
<li>Add an extra index into the &#8220;servos[]&#8221; array.</li>
<li>Pick an unused timer and add it to the &#8220;timer_init()&#8221; function.</li>
<li>Cut, paste, and modify timer code for the new timer in the 20ms timer ISR.</li>
<li>Add an ISR for the new timer, again cutting, pasting, and modifying for the new servo.</li>
</ol>
<p>That about does it.  It seems to work pretty well for my uses.  Make sure and calibrate the limits on your servo variables so that you maximize your reach (for the servos I tested it with, it was between 0 and 270) .  One problem I had was erratic behavior when it collided with another timer occasionally &#8211; this was fixed by adding lifting this up from the &#8220;LO&#8221; level interrupts to the &#8220;MED&#8221; level interrupts.  It could also be moved even higher to avoid problems even further.  This is an issue with the XMega, where it wouldn&#8217;t necessarily have been with an ATMega, because XMega interrupts have changed and a higher level interrupt can interrupt a lower level interrupt.  Good to keep in the back of your mind as you code&#8230;</p>
<p>As always, let me know in the comments if you need any help setting this up.</p>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/avr/'>AVR</a>, <a href='http://bradsprojects.wordpress.com/tag/avr-gcc/'>avr-gcc</a>, <a href='http://bradsprojects.wordpress.com/tag/avr-libc/'>avr-libc</a>, <a href='http://bradsprojects.wordpress.com/tag/servos/'>servos</a>, <a href='http://bradsprojects.wordpress.com/tag/xmega/'>xmega</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/234/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=234&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/05/03/servo-control-with-an-xmega/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>
	</item>
		<item>
		<title>XMega Solution for Kubuntu</title>
		<link>http://bradsprojects.wordpress.com/2010/04/29/xmega-solution-for-kubuntu/</link>
		<comments>http://bradsprojects.wordpress.com/2010/04/29/xmega-solution-for-kubuntu/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 17:47:47 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[atmel]]></category>
		<category><![CDATA[avr-gcc]]></category>
		<category><![CDATA[avrdude]]></category>
		<category><![CDATA[avrisp mkii]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[eclipse cdt]]></category>
		<category><![CDATA[integrated development environment]]></category>
		<category><![CDATA[kubuntu]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[xmega]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=210</guid>
		<description><![CDATA[Howdy folks.  For any penguin heads out there trying to get an XMega development setup for Linux, I finally got it working, and didn&#8217;t even have to compile anything! My setup is a SparkFun XMega breakout board ($25) and an AVRISP mkII programmer, which I bought from Mouser (~$35) specifically for the new PDI programming.  [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=210&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Howdy folks.  For any penguin heads out there trying to get an XMega development setup for Linux, I finally got it working, and didn&#8217;t even have to compile anything!</p>
<p>My setup is a SparkFun XMega breakout board ($25) and an AVRISP mkII programmer, which I bought from Mouser (~$35) specifically for the new PDI programming.  Seems Atmel ditched the venerable ICSP programming method with these new chips.  The AVRISP mkII can program over the new &#8220;Programming and Debugging Interface&#8221;, but can&#8217;t debug.  If you want to be able to debug over the PDI interface, go for the JTAGICE mkII or another programmer.</p>
<p>I&#8217;m running Kubuntu Linux 9.10.  This solution probably won&#8217;t be all that useful for that long, because I imagine (but haven&#8217;t checked so I don&#8217;t know for sure) that Kubuntu 10.04 will have these updated packages.  Regardless, some of the advice that follows will still be pertinent to some people.</p>
<p>So here&#8217;s what I&#8217;m going to do: Set up my Kubuntu 9.10 installation to be able to compile for XMegas using AVR-GCC, program XMegas using AVRDude, and use Eclipse as an IDE for all this.</p>
<h3>Install AVR-GCC and AVRDude</h3>
<p>Since the packages in the Kubuntu 9.10 repository aren&#8217;t up to date enough to work with the XMega, we&#8217;ve got to get them from somewhere else.  I default to the Debian repositories, which 9/10 times work with Kubuntu.  I&#8217;m not sure if there are other packages you need installed, because I started with a working standard AVR and GCC development environment already working.  If installing these packages complains about dependencies (beyond those in the list below), using &#8220;apt-get&#8221; to install them from the normal repository should be fine.</p>
<p>Download the following &#8220;squeeze&#8221; packages for your system <a href="http://packages.debian.org/search?keywords=avr">from here</a>:</p>
<ul>
<li><a href="http://packages.debian.org/squeeze/avr-libc">avr-libc</a></li>
<li><a href="http://packages.debian.org/squeeze/avrdude">avrdude</a></li>
<li><a href="http://packages.debian.org/squeeze/avrdude-doc">avrdude-doc</a></li>
<li style="text-align:left;"><a href="http://packages.debian.org/squeeze/binutils-avr">binutils-avr</a></li>
<li style="text-align:left;"><a href="http://packages.debian.org/squeeze/gcc-avr">gcc-avr</a></li>
</ul>
<p><strong>NOTE</strong>: Just install these from the repository using apt-get if using Kubuntu version 10.04.</p>
<p>There&#8217;s a specific order you have to install these in &#8211; I can&#8217;t remember exactly what it is.  Right click on the files in Dolphin (or, as I prefer to use, Konqueror) and use the GDebi package installer to install these files graphically, or dpkg to install from the command line.  Once these are installed, you can compile and program your XMegas from the command line!</p>
<h3>Install Eclipse and AVR Plugins</h3>
<p>Eclipse has some features that I&#8217;ve heard are pretty nice.  Traditionally, I&#8217;ve used and really liked KATE (KDE Advanced Text Editor), and recently I&#8217;ve gotten hooked on VIM, but I&#8217;m not a bigot about things I haven&#8217;t tried.  So here&#8217;s me trying Eclipse for AVR programming.</p>
<p>First stop, install Eclipse.  You&#8217;ll want Eclipse CDT, which is geared towards C/C++ development instead of Java.  You can <a href="http://www.eclipse.org/downloads/">download it here</a>.  Install it by extracting it, pretty much anywhere.  I installed it into my development tools folder &#8211; another standard place is the opt folder (/opt/eclipse).  Further instructions on this can be found on <a href="http://ubuntuforums.org/showpost.php?p=7603121&amp;postcount=3">this UbuntuForums post</a>.</p>
<p>Once Eclipse is installed, you&#8217;ll want to add the AVR plugin.  Follow <a href="http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download">these instructions</a>.</p>
<h3>Start a New AVR Project</h3>
<p>To start a new AVR project for an XMega, follow these steps:</p>
<ol>
<li>Click &#8220;File -&gt; New -&gt; C Project&#8221;</li>
<li>Enter a new project name, and under the &#8220;AVR Cross Target Application&#8221; select &#8220;Empty Project&#8221;.  AVR-GCC Toolchain should be selected on the right side.  Click &#8220;Next&#8221;.</li>
<li>Click &#8220;Advanced settings&#8230;&#8221;</li>
<li>Click the &#8220;AVR-&gt;AVRDude&#8221; option on the left.
<ol>
<li>Under the &#8220;Programmer&#8221; tab, select your programmer.  If it&#8217;s not in the list, or the list is empty, click &#8220;New&#8230;&#8221; and select your programmer.  For me, it was &#8220;Atmel AVR ISP mkII&#8221;.  Click &#8220;OK&#8221;.</li>
<li>The rest of the options under the tab should be left with defaults.</li>
</ol>
</li>
<li>Click the &#8220;AVR-&gt;Target Hardware&#8221; option in the left pane.
<ol>
<li>Select your processor.  For me, the &#8220;ATXMega128A1&#8243;.</li>
<li>Select the frequency your processor will run at.  For me, 32MHz.</li>
</ol>
</li>
<li>Click &#8220;C/C++ General-&gt;Indexer&#8221;, then click the link on the top right titled &#8220;Configure Workspace Settings&#8221;
<ol>
<li>Check the &#8220;Index unused headers&#8221; option.</li>
<li>Check the &#8220;Index source files not included in the build&#8221;.</li>
<li>Check the &#8220;Allow heuristic resolution&#8221; option, then &#8220;OK&#8221;.</li>
</ol>
</li>
<li>Click &#8220;Next&#8221;.</li>
<li>Select your MCU type and frequency (again, I know&#8230;)</li>
<li>Click &#8220;Finish&#8221; to create the project!</li>
</ol>
<h3>Setup Auto Programming</h3>
<p>I think there&#8217;s another way to make this happen, but I couldn&#8217;t figure out how to make it program the chip.  So I did the following as well:</p>
<ol>
<li>Click &#8220;Run-&gt;Run Configurations&#8230;&#8221;.</li>
<li>In the &#8220;Name:&#8221; box, type &#8220;Program Chip&#8221;.</li>
<li>In the &#8220;C/C++ Application:&#8221; box, type &#8220;/usr/bin/avrdude&#8221;.  Make sure the &#8220;Connect process input &amp; output to a terminal&#8221; is checked.</li>
<li>Under the &#8220;Arguments&#8221; tab, type the following: &#8220;-c avrispmkii -p x128a1 -P usb -e -U flash:w:Debug/&lt;project-name&gt;.hex&#8221;</li>
<li>Click &#8220;OK&#8221;.</li>
</ol>
<p>Now at this point clicking the &#8220;Run&#8221; button on the toolbar (or its shortcut, Ctrl-F11) will program the chip.  We&#8217;re not out of the woods yet, though.  By default, a program needs root privileges to access USB devices.  So when you hit Run, it will ask you to enter your password (which will, stupidly, appear in plain text).  To make the AVR-ISP mkII programmer available to mere mortal (non-root) users, do the following:</p>
<p>1.  Open a terminal.  Start a text editor as root to create the file &#8220;/etc/udev/rules.d/50-usbavrispmkII.rules&#8221;.  For example:</p>
<pre>&gt; sudo kate /etc/udev/rules.d/50-usbavrispmkII.rules
</pre>
<p>2.  Paste the following into the editor:</p>
<pre>SYBSYSTEM=="usb", SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2104", GROUP="users", MODE="0666"
</pre>
<p>3.  Run the following command in the terminal:</p>
<pre>&gt; sudo udevadm control --reload-rules
</pre>
<p>Now there&#8217;s no need to enter the password!  To recap, to build without programming hit &#8220;Ctrl-B&#8221;.  To build and program, hit &#8220;Ctrl-F11&#8243;.</p>
<p>That&#8217;s about all I can think of for settings I use, but if I think of anything else I&#8217;ll update the post.</p>
<p><strong>An update to the post:</strong></p>
<p>I found a little item I forgot.  In order for Eclipse to output a hex file (needed for the above instructions to work), you need to go to the project properties -&gt; Settings, then check &#8220;Generate HEX file for Flash memory&#8221;.  Hit the build button again, and behold the appearance of a hex file.</p>
<h3>Conclusion</h3>
<p>A very nice feature Eclipse has is that it hyperlinks variables,  functions, and defines when you hold the Ctrl button and click.  For files within your project, it works pretty nice, but usually you already know most of those well because you wrote them.  Step 6 above allows the  indexer to look through the AVR include folder as well.  This makes any standard definition of a port, register, enum, or struct (of which there are many) easy to find.</p>
<p>Also, you don&#8217;t have to manage your makefiles.  Eclipse will take care of all that for you, so you just have to worry about programming.  One thing I haven&#8217;t figured out yet is how to get it to get the equivalent of  &#8220;make clean &amp;&amp; make all &amp;&amp; make program&#8221; happen, which I typically use when doing AVR programming.  I periodically have to use the &#8220;Clean&#8230;&#8221; menu option when things start acting strange.</p>
<p>As a side, make sure to check out the XMega app notes on the Atmel website, and download both the PDF and the source code.  I&#8217;ve found myself primarily using their drivers, which has really sped up getting started with this chip (even though the drivers do have their limitations).</p>
<p>Happy programming!  I imagine this post will be the cause of a lot of late night hacking and Mtn Dew sales &#8230;</p>
<div id="_mcePaste" style="overflow:hidden;position:absolute;left:-10000px;top:358px;width:1px;height:1px;">http://packages.debian.org/squeeze/binutils-avr</div>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/atmel/'>atmel</a>, <a href='http://bradsprojects.wordpress.com/tag/avr-gcc/'>avr-gcc</a>, <a href='http://bradsprojects.wordpress.com/tag/avrdude/'>avrdude</a>, <a href='http://bradsprojects.wordpress.com/tag/avrisp-mkii/'>avrisp mkii</a>, <a href='http://bradsprojects.wordpress.com/tag/eclipse/'>eclipse</a>, <a href='http://bradsprojects.wordpress.com/tag/eclipse-cdt/'>eclipse cdt</a>, <a href='http://bradsprojects.wordpress.com/tag/integrated-development-environment/'>integrated development environment</a>, <a href='http://bradsprojects.wordpress.com/tag/kubuntu/'>kubuntu</a>, <a href='http://bradsprojects.wordpress.com/tag/linux/'>linux</a>, <a href='http://bradsprojects.wordpress.com/tag/open-source/'>open source</a>, <a href='http://bradsprojects.wordpress.com/tag/programming/'>programming</a>, <a href='http://bradsprojects.wordpress.com/tag/xmega/'>xmega</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=210&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/04/29/xmega-solution-for-kubuntu/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>
	</item>
		<item>
		<title>Hacking Tiny Servos</title>
		<link>http://bradsprojects.wordpress.com/2010/04/29/hacking-tiny-servos/</link>
		<comments>http://bradsprojects.wordpress.com/2010/04/29/hacking-tiny-servos/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 16:15:29 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[continuous rotation servo]]></category>
		<category><![CDATA[electronic components]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[servo hack]]></category>
		<category><![CDATA[servos]]></category>
		<category><![CDATA[SparkFun]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=215</guid>
		<description><![CDATA[Thought I would blog about hacking the 9g servos from SparkFun and converting them to continuous rotation since I&#8217;m performing said hack for an upcoming project.  I&#8217;m sure there are more and better instructions on how to do this, but I&#8217;ve looked at tutorials before for larger servos and noticed these little guys are a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=215&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://bradsprojects.files.wordpress.com/2010/04/servo_small_sm.jpg"><img class="alignleft size-full wp-image-220" title="servo_small_sm" src="http://bradsprojects.files.wordpress.com/2010/04/servo_small_sm.jpg?w=600" alt=""   /></a>Thought I would blog about hacking the <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9065">9g servos from SparkFun</a> and converting them to continuous rotation since I&#8217;m performing said hack for an upcoming project.  I&#8217;m sure there are more and better instructions on how to do this, but I&#8217;ve looked at tutorials before for larger servos and noticed these little guys are a bit different.</p>
<p>What I&#8217;m doing is changing a servo that normally has around 90-120 degrees of motion to have full 360 continuous rotation.  Instead of the servo reacting to the standard PWM signal as a position signal, it will now act as a velocity signal with full forward/stop/reverse control!  Best of all, when people tell you the servos on your <a href="http://en.wikipedia.org/wiki/Millennium_Falcon">YT-1300 look like a piece of junk</a>, you can tell them you&#8217;ve made a few special modifications yourself.</p>
<p>Apology in advance for the images &#8211; I promise to never use my cell phone cam for blogging again!  It&#8217;s abysmally unfit for close up pictures of electronics.</p>
<hr />
<h3><span style="text-decoration:underline;">Take the servo apart</span></h3>
<div id="attachment_222" class="wp-caption alignright" style="width: 310px"><a href="http://bradsprojects.files.wordpress.com/2010/04/0427101920-e1272556849845.jpg"><img class="size-medium wp-image-222" title="Side view of torn apart servo" src="http://bradsprojects.files.wordpress.com/2010/04/0427101920-e1272556849845.jpg?w=300&#038;h=169" alt="" width="300" height="169" /></a><p class="wp-caption-text">The black circular piece with the shaft in it, next to the gears, is the potentiometer.  Two stops are there, two more are on the case piece to the left of it.</p></div>
<p>Remove the sticky label (goo-be-gone is needed) and remove the screws.  You&#8217;ll likely need a jewelry screw driver.  Pull all three sections apart, remove the gears, and remove the white plastic cover over the potentiometer.  Easy peasy.</p>
<h3><span style="text-decoration:underline;">Cut out the stops</span></h3>
<p>I&#8217;m running on memory, so feel free to correct me in comments if I&#8217;m wrong.  I recall this as the part that&#8217;s different from the standard sized servos.  There are stops on the potentiometer and you practically have to cut out half of the pot to get it to rotate properly.  This is because the pot shaft is used as the axis for the gears and external drive shaft.  Boo to the man that designed it this way, unless it made it significantly cheaper.  In that case, yay&#8230; but boo.</p>
<p><strong>Warning</strong>: The plastic on the pot is EXTREMELY brittle.  If the pot case crumbles, your servo is trashed.</p>
<p>Proceeding onward.  You&#8217;ll see two plastic stops in the pot &#8211; <a href="http://bradsprojects.files.wordpress.com/2010/04/0427101927.jpg"><img class="alignright size-medium wp-image-223" title="0427101927" src="http://bradsprojects.files.wordpress.com/2010/04/0427101927.jpg?w=300&#038;h=225" alt="" width="300" height="225" /></a>cut it out in small pieces.  Once that&#8217;s gone, you&#8217;ve got to remove the potwiper.  The copper-colored middle terminal of the pot should come out with a little force at this point.  There are a couple of &#8220;C&#8221; shaped metal tabs that will come out with it.  Now cut the entire terminal off and leave the wire hanging for now.</p>
<p>On one of my servos, I cut it out without pulling the shaft out.  On another, the shaft hole cracked cand the whole shaft came out which made this easier &#8211; but I&#8217;ll have to report later as to whether it still works well or not.</p>
<p>You also need to cut out the springy piece.  You can&#8217;t remove it completely, it appears to be connected with the shaft itself, so you&#8217;ll need to cut it flush against the remaining metal flange.</p>
<p>The final stop that has to be cut is on the actual case, just inside the hole where the shaft exits the case.  Flush cutters make quick work of this, but an Xacto knife could probably work too.</p>
<h3><span style="text-decoration:underline;">Solder resistors in place of pot</span></h3>
<div id="attachment_224" class="wp-caption alignright" style="width: 310px"><a href="http://bradsprojects.files.wordpress.com/2010/04/resistors_sharpened.jpg"><img class="size-medium wp-image-224" title="Resistors" src="http://bradsprojects.files.wordpress.com/2010/04/resistors_sharpened.jpg?w=300&#038;h=225" alt="" width="300" height="225" /></a><p class="wp-caption-text">With the middle terminal removed and cut off, solder resistors between the two terminals and then solder the middle terminal wire to the middle of the resistors.</p></div>
<p>So that the potentiometer has a reference point for its control loop, we need to solder resistors in place of the pot.  I used two 10K resistors, which will make the signal that would have centered the servo be the stop position.  Positions signals right from the signal will be forward, and positions left from the signal will be reverse.</p>
<p>Solder the two 10K resistors (surface mount or 1/8W or smaller should fit) in series between the two remaining posts.  Then solder the currently-floating middle terminal wire in between the two resistors.</p>
<h3><span style="text-decoration:underline;">Put the servo back together</span></h3>
<p>Pretty straightforward.  Do step one in reverse.  The gears may feel like a puzzle, but there&#8217;s only one way they fit.  Lastly, be careful with the screws &#8211; they strip out pretty easy.</p>
<hr />Shazaam!  Full control of a motor with great torque/gear ratio with only a half hour&#8217;s worth of effort.</p>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/continuous-rotation-servo/'>continuous rotation servo</a>, <a href='http://bradsprojects.wordpress.com/tag/electronic-components/'>electronic components</a>, <a href='http://bradsprojects.wordpress.com/tag/hacking/'>hacking</a>, <a href='http://bradsprojects.wordpress.com/tag/servo-hack/'>servo hack</a>, <a href='http://bradsprojects.wordpress.com/tag/servos/'>servos</a>, <a href='http://bradsprojects.wordpress.com/tag/sparkfun/'>SparkFun</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=215&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/04/29/hacking-tiny-servos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/04/servo_small_sm.jpg" medium="image">
			<media:title type="html">servo_small_sm</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/04/0427101920-e1272556849845.jpg?w=300" medium="image">
			<media:title type="html">Side view of torn apart servo</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/04/0427101927.jpg?w=300" medium="image">
			<media:title type="html">0427101927</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/04/resistors_sharpened.jpg?w=300" medium="image">
			<media:title type="html">Resistors</media:title>
		</media:content>
	</item>
		<item>
		<title>Catch up&#8230;</title>
		<link>http://bradsprojects.wordpress.com/2010/04/13/catchup/</link>
		<comments>http://bradsprojects.wordpress.com/2010/04/13/catchup/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 04:38:41 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[my life update]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=206</guid>
		<description><![CDATA[Looks like it&#8217;s been a while since I&#8217;ve posted, but not to fear &#8211; my projects never cease.  In fact, they seem to spread faster than lice on Kashyyyk.  Here&#8217;s what I&#8217;m up to right now, and what&#8217;s coming up for those of you who have been following the ZephyrEye project. First, here&#8217;s what I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=206&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Looks like it&#8217;s been a while since I&#8217;ve posted, but not to fear &#8211; my projects never cease.  In fact, they seem to spread faster than <a href="http://www.starwars.com/databank/species/wookiee/index.html">lice on Kashyyyk</a>.  Here&#8217;s what I&#8217;m up to right now, and what&#8217;s coming up for those of you who have been following the ZephyrEye project.</p>
<p>First, here&#8217;s what I &#8220;have&#8221; to be working on right now.  I&#8217;ve enrolled in the <a href="http://beaversource.oregonstate.edu/projects/appliedrobotics/wiki">ME414 &#8220;Mechatronics&#8221;</a> class here at <a href="http://www.oregonstate.edu">OSU</a>, where interdisciplinary groups of three CS, ECE, and ME students have to put together a checker playing robot.  Seriously!  It has to autonomously play checkers not only against humans, but other robots.  At the expense of my other relatively boring classes, this one gets most of my spare time.  I&#8217;ll keep you posted on how it&#8217;s coming, as there&#8217;s some overlap with other projects &#8211; in particular, I&#8217;ll be using the XMega controller on this project and I&#8217;ll be posting some tips on how to get started (as I&#8217;m figuring it out, no less ;).</p>
<p>Back to the ZephyrEye.  I&#8217;m currently working on the project with a kit manufacturer and we&#8217;re making good progress.  No promises of any kind, but I&#8217;m currently estimating they will be on shelves by this summer.  Oh, the heaps of gold I could have made if only I hadn&#8217;t open sourced this project ;).  Can&#8217;t wait to start coding this sucker up, make sure and sign up for the Google Code project if you&#8217;re interested in helping out!</p>
<p>Hopefully my summer schedule lets me work on the project!  It&#8217;s getting full.  I&#8217;ve landed an exciting internship at the Robotics Institute of Carnegie Mellon University, so I&#8217;ll be racking up frequent flier miles going cross-country to Pittsburgh.  Exciting stuff, I get to work with and get to know some crazy smart people who design bleeding edge robots.  I&#8217;ll be looking for the secret to the universe in the bookshelves, for sure &#8230;</p>
<p>And, the missus and I are expecting baby #2 in September.  Yay!</p>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/my-life-update/'>my life update</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/206/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=206&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/04/13/catchup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>
	</item>
		<item>
		<title>ZephyrEye Rev2: Board Layout in Eagle</title>
		<link>http://bradsprojects.wordpress.com/2010/03/05/zephyreye-rev2-board-layout-in-eagle/</link>
		<comments>http://bradsprojects.wordpress.com/2010/03/05/zephyreye-rev2-board-layout-in-eagle/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 21:43:11 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[board layout]]></category>
		<category><![CDATA[CAD]]></category>
		<category><![CDATA[EagleCAD]]></category>
		<category><![CDATA[epson lcd]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[nokia lcd display]]></category>
		<category><![CDATA[paintball]]></category>
		<category><![CDATA[PCB]]></category>
		<category><![CDATA[pcbexpress]]></category>
		<category><![CDATA[project specifications]]></category>
		<category><![CDATA[schematics]]></category>
		<category><![CDATA[SparkFun]]></category>
		<category><![CDATA[venus]]></category>
		<category><![CDATA[XBee]]></category>
		<category><![CDATA[xmega]]></category>
		<category><![CDATA[ZephyrEye]]></category>
		<category><![CDATA[zigbee]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=183</guid>
		<description><![CDATA[An update on Rev2 status:  The schematic is looking pretty good, albeit there are probably still some errors that will seep up to the surface.  I&#8217;ve started on the board layout, which will also help uncover any schematic errors.  Today I&#8217;d like to go through the process I usually use to layout circuit boards in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=183&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>An update on Rev2 status:  The schematic is looking pretty good, albeit there are probably still some errors that will seep up to the surface.  I&#8217;ve started on the board layout, which will also help uncover any schematic errors.  Today I&#8217;d like to go through the process I usually use to layout circuit boards in EagleCAD.</p>
<p>In case anyone was wondering if I was kidding about the <a href="http://bradsprojects.wordpress.com/2010/01/27/zephyreye-board-layout/">cat and laser pointer thing</a>, here&#8217;s a great chance to find out.  Download the schematic by itself, open it in EagleCAD, and click the &#8220;Board&#8221; button (5th from the left on the toolbar), and try laying out the board.  Make sure and give yourself some time (a day or two without sleep should do it), and dig in!</p>
<p>So here are the steps I use when laying out a board.  After the schematic has been reviewed several times (preferably by someone capable and also familiar with the project, not just by yourself), click the &#8220;Board&#8221; button (location described above).  What Eagle does here is it takes all of your components and puts them next to a random outline.</p>
<p>From here, let&#8217;s just go down the list.  Note that this is just what I do for boards like this.  It gets the job done very quick, with decent quality, but others do things different and may agree or disagree with this approach &#8211; I&#8217;d love to hear what others do in the comments!</p>
<ol>
<li>Draw a circuit board outline</li>
<li>Group components into proper areas</li>
<li>Manually route critical traces</li>
<li>Autoroute remaining traces</li>
<li>Manually fix autorouter mistakes (sometimes, <a href="http://knowyourmeme.com/i/1980/original/star-wars-darth-vader-sense.jpg?1241533243">the autorouter makes no sense!</a>)</li>
<li>Run Design Rule Checks against the board</li>
<li>Redo steps 3 through 6 if necessary</li>
<li>Send design to the boardhouse</li>
</ol>
<p><img src="///media/disk/DCIM/100KC433/100_2420.JPG" alt="" /></p>
<h3>1) Draw a circuit board outline.</h3>
<p>If you don&#8217;t care what size your circuit board is, this is a very easy step.  Take the default, and shrink or expand it as you get closer to finishing step two.  Chances are, however, you should make careful considerations about your intended enclosure(s) for the circuit board.  Don&#8217;t skip this step lightly, or you&#8217;ll pay for it exponentially down the road.  Case in point: ZephyrEye Rev1, from the side as shown below.  Originally I thought I would use a different case, but it was too bulky and looked horrible.  But it didn&#8217;t exactly fit in my backup case, either:  I had to cut out the side just to get it to fit.</p>
<p><a href="http://bradsprojects.files.wordpress.com/2010/03/ze_sideview.jpg"><img class="aligncenter size-medium wp-image-186" title="ZephyrEye Rev1 Sideview" src="http://bradsprojects.files.wordpress.com/2010/03/ze_sideview.jpg?w=300&#038;h=184" alt="This is what happens when you don't think carefully about enclosures ahead of time ..." width="300" height="184" /></a>The result: Ugliness.</p>
<p>I&#8217;ve downloaded the manufacturer&#8217;s datasheet for the enclosure, and following it&#8217;s recommendation outlined the board to maximize the PCB surface area &#8211; I&#8217;m going to need it all to get it all the features packed into this tiny little enclosure.  Either modify the existing outline, or draw using wires on the &#8220;Dimension&#8221; layer 20.  The board house will router your PCB following this outline.</p>
<p>Another item I always forget (and actually just remembered while writing this), is mounting holes.  Some people use vias connected to ground, while others use drill holes.  I usually prefer vias, because you can set the diameter of the copper around the via and avoid routing other traces within range of the head of the screw.  It also lets you ground your circuit board to the enclosure, which is common with metal enclosures.</p>
<h3>2) Group components into proper areas.</h3>
<p>For most components this is pretty straightforward.  Put all the schematic elements in the same area: an IC, supporting passives, and related supporting circuitry.  But you&#8217;ll also need to take into account any special needs of that part of the circuit:</p>
<ul>
<li>Sensitivity to noise
<ul>
<li>The digital compass would potentially have issues if placed near the transmitter, or near any high current wires due to the magnetic field around a current-carrying wire.</li>
</ul>
</li>
<li>Proximity to the edge
<ul>
<li>The GPS circuit needs to be near the edge because it has an antenna.  You can&#8217;t trace antenna wires very far without serious signal degradation, so it gets a special spot.</li>
<li>Most components that need to be near the edge are there because they need to match up with enclosure features &#8211; measure these things out carefully when necessary.</li>
</ul>
</li>
<li>Proximity to other chips it needs to communicate with
<ul>
<li>If you can, put inter-communicating chips near each other.  There&#8217;s considerable flexibility on this point, depending on the protocol, the speeds they communicate at, and sensitive areas that these signals must avoid.</li>
<li>Example: If you were routing wires carrying USB 2.0 at 480MHz, it would be bad news for both other chips on the board as well as your USB signal integrity if these were long.  In fact, at this high of speed, there are very specific routing guidelines that must be followed.</li>
</ul>
</li>
<li>Speeds of signals that will travel on the signal wire
<ul>
<li>Crystal wires should always be very short.  Once you get a signal that will be up in the megahertz range, the shorter it can be the less noise you&#8217;ll get at other locations on the board.  The trace carrying the signal can act as an antenna if it is too long.</li>
</ul>
</li>
<li>Analog signals need special consideration.
<ul>
<li>Usually, you&#8217;ll want to avoid routing communication wires (RS232, SPI, or I2C) near analog wires.  These communication wires will put noise into your analog signals, causing headaches and very weird errors when debugging the board.</li>
<li>Antenna signals are analog of the most sensitive kind, and usually need to be a specific width if they travel very far.  You may also need to &#8220;impedance match&#8221; the trace to avoid distorting the signal.</li>
</ul>
</li>
</ul>
<p>That&#8217;s not an exhaustive list, and not detailed by any stretch of the imagination.  Google for more details on any above item you fear a board you&#8217;re laying out may have issues with.  Datasheets will have very specific layout requirements as well, many have a PCB layout guide for the chip.  Lastly, check for reference designs.  These are great to follow because you know they have been proven.</p>
<div id="attachment_202" class="wp-caption alignright" style="width: 310px"><a href="http://bradsprojects.files.wordpress.com/2010/03/main_board_noroute.png"><img class="size-medium wp-image-202" title="Unrouted Rev2 Main Board" src="http://bradsprojects.files.wordpress.com/2010/03/main_board_noroute.png?w=300&#038;h=182" alt="" width="300" height="182" /></a><p class="wp-caption-text">Prior to routing, all the components should be grouped into logical areas.</p></div>
<p>You&#8217;ll notice the schematic is already outlined in this way.  For example, the digital compass (HMC5843) should be placed somewhere within the outline that will be away from high-current lines (e.g., lines which may induce magnetism and noise).  I picked a corner away from everything else for this guy.  It was pretty easy to look at the schematic and see that I needed to pull in C31, C34, C40, R11, and R19.  Quickly looking at the air wires, I put them in an order that seemed like would work once the traces were routed.  Then I did more or less the same for the remaining component &#8220;groups&#8221;.</p>
<p>Notice the surface mount components are on top as much as possible &#8211; this makes it easier to assemble, particularly for pick &amp; place machines and/or if you are going to bake it in a reflow oven.</p>
<h3>3) Connect Vcc, GND, and critical traces</h3>
<p>Vcc and ground traces go first.  Usually, I go for a ground plane on top.  Some people do Vcc planes on the bottom &#8211; I&#8217;m not a big fan of this, but I have done it.  Make sure the traces are wide enough to carry the current they need to (<a href="http://www.4pcb.com/index.php?load=content&amp;page_id=95">this calculator</a> may come in handy) &#8211; in general, they are but it&#8217;s better to make wires that carry a lot of current be thicker anyway, no sense having a bunch of fuses around the board.  I estimated my max current delivered to this board to be less than 250 mA, but I still use .024&#8243; traces for VBAT, and 0.16 for a few of the VCC traces.</p>
<p>For a few of the components, you&#8217;ll also want to trace things out before you let the autorouter have its way.  You can also quarantine areas as off-limits to the autorouter for sensitive areas.  For example, the GPS circuit is pretty sensitive, especially with regards to the RF ground plane and the antenna trace.  I routed this area up ahead of time.  To make sure  areas like this aren&#8217;t touched, you can then place polygons on the top and bottom restrict, keepout, and vRestrict (for vias) layers to manage the autorouter.</p>
<h3>4) Autoroute remaining traces</h3>
<p>This step has a few tricky items that can make the difference between a successful autoroute and a complete failure autoroute.  Pay close attention to the setup!  Here are the steps I used:</p>
<ul>
<li><strong>Save before you start!</strong> You will NOT be allowed to use &#8220;Undo&#8221; commands after you start the autorouter.  I usually save a separate copy before I start just to be safe.</li>
<li>Make sure your design rules are set up correctly as the autorouter follows these rules while routing traces.  Use the toolbar or click &#8220;Edit -&gt; Design Rules&#8230;&#8221; to open the DRC dialog.  Set up the rules to follow your intended board house&#8217;s manufacturing guidelines and minimum tolerances (check their website).  Here are the ones I modified from the default:
<ul>
<li>Clearance Tab:
<ul>
<li>I set all clearances to 8 mils.</li>
</ul>
</li>
<li>Distances Tab:
<ul>
<li>Copper/Dimension: This is the minimum distance between any copper (whether a trace, polygon, or component) and the board outline on the dimension layer 20.  I set it to 10 mils.  If you route traces too close to the edge of the board, they may get cut or damaged.</li>
<li>Drill/Hole: Distance from anything to a hole on the board.  Set to 8 mils.</li>
</ul>
</li>
<li>Sizes:
<ul>
<li>Minimum Width:  This is the minimum width of a trace, and the autorouter will use this for everything.  10 mils is a good minimum if you have plenty of space &#8211; I used 8 mils.</li>
<li>Minimum Drill: This is the smallest drill size available from your board house.  20 mils for me.</li>
</ul>
</li>
<li>The rest of the defaults generally work fine for me, but make sure you&#8217;ve met all your board house requirements before continuing.</li>
<li>Click &#8220;Apply&#8221; and then either &#8220;Check&#8221; or &#8220;Cancel&#8221;.  It&#8217;s a good idea to check your work so far to make sure you pass off a clean board to the autorouter.</li>
</ul>
</li>
<li>Now click on the &#8220;Tools -&gt; Auto&#8230;&#8221; (or use the toolbar) to open the Autorouter Setup dialog box.  Make the following changes according to your design needs:
<ul>
<li>Routing Grid: Here&#8217;s the deal.  The larger the grid size, the less time it takes.  But the autorouter will only consider trace joints and intersections every 50 mils.  So for surface mount components pins at, say, .5mm pitch (pin centers are .5mm apart), the autorouter will fail to connect most pins.  It will also have issues in congested routing areas.  On the other hand, using a 1 mil grid will take forever.  I used 2 mil routing grid &#8211; It took about 30 minutes.</li>
<li>Change Top and Bottom preferred routing directions if desired.  I haven&#8217;t found this to make a big difference in actual implementation, just make sure you don&#8217;t pick two parallel directions unless you want issues.</li>
<li>To be honest, I&#8217;ve never bothered playing around with rest of the settings, or the optimization settings.  I&#8217;m sure there are some advantages that can be made here, but I&#8217;ve never dove in.  Feel free to comment if you know how to change these to some advantage!</li>
</ul>
</li>
</ul>
<div id="attachment_203" class="wp-caption alignleft" style="width: 310px"><a href="http://bradsprojects.files.wordpress.com/2010/03/main_board_routed.png"><img class="size-medium wp-image-203" title="Routed Rev2 Main Board" src="http://bradsprojects.files.wordpress.com/2010/03/main_board_routed.png?w=300&#038;h=192" alt="" width="300" height="192" /></a><p class="wp-caption-text">The Rev2 Main Board after being autorouted and cleaned up.  Notice a few parts have moved a little to allow better routing, but not many.</p></div>
<p>Once everything is set up, save again and then hit the &#8220;OK&#8221; button.  Alternately, if you only want the autorouter to work on a particular subset of traces, use the select button and then hit the green stoplight button on the toolbar to go.  Be forewarned that the autorouter will ripup and retrace ONLY its own traces, and traces there prior to beginning the autoroute will remain untouched.  This can be a problem, especially if you have cut off certain sections of the board with traces on both the top and bottom, or have routed so close to surface mount pins the autorouter cannot place  a via to get around it.</p>
<p>In situations like this, and sometimes just due to trace density, sometimes the autorouter just can&#8217;t find a path for all the traces.  These will be left as airwires for you to manually route&#8230;</p>
<h3>5) Manually fix autorouter mistakes</h3>
<div class="wp-caption alignright" style="width: 310px"><a href="http://www.icanhasforce.com" target="_blank"><img title="Sense: This Makes None" src="http://cdn0.knowyourmeme.com/i/1980/original/star-wars-darth-vader-sense.jpg" alt="" width="300" height="375" /></a><p class="wp-caption-text">The Autorouter makes as much sense sometimes...</p></div>
<p>Sometimes, the autorouter just doesn&#8217;t make any sense.  I couldn&#8217;t help but post this picture &#8211; it&#8217;s a classic.</p>
<p>But seriously, sometimes the autorouter just does ridiculous things.  Traces have random and startling paths, take weird angles, overshoot and then overcorrect, etc.  Check through the history of the Rev2 cad files for examples.  You&#8217;ll want to shorten most of these traces if you can, take out the weird angles, and fix any traces that went through places they shouldn&#8217;t have.</p>
<p>And the autorouter generally uses a LOT of vias.  Vias can actually cost you extra if you use too many from some board houses, because they take extra time to drill and plate in the manufacturing process.  So minimizing vias is important.  You can usually clean a few off manually with a little effort.</p>
<p>It took about 30 minutes to finish the autoroute, because my routing grid was so small.  Before the first optimization step, it had around 320 vias.  Youch!  By the end, however, it was down to around 170.  Go optimizer!</p>
<p>It also left about 7 traces for me to finish by hand.  Most of them were because the ground plane polygon had &#8220;fallen apart&#8221;, meaning there were so many traces that parts of the ground plane had become separated and were not longer interconnected.  Many were fixed by pushing and pulling vias and traces around.  On a few, though, I had to place vias and bottom side traces that jump under traces that cut up the ground plane to make the connection.</p>
<h3>6) Run Design Rule Checks against the board</h3>
<p>This step is CRITICAL!  Don&#8217;t even consider sending the board off without checking your board against the design rules.  Since you&#8217;ve already got the DRC rules setup, just hit the &#8220;Design Rule Check&#8221; button on the toolbar to run it.  It&#8217;s pretty straightforward: Anywhere you have traces that are too close or overlap, parts off the boundary, or drill holes that go through traces or components, you&#8217;ll get an error that you&#8217;ll have to fix by hand.</p>
<p>This isn&#8217;t too bad usually, but in densely routed areas can sometimes be a little tricky.  Just use your elbows, push things out, and make some room.</p>
<h3>7) Redo steps 3 through 6 if necessary</h3>
<p>Well, as hard as all this has been, you may find something that needs changing.  Say you forgot a critical component, or left off a significant number of traces.  Sometimes you can add these things in after the fact, sometimes this is as practical as putting Jabba the Hutt on Jenny Craig.</p>
<p>If you have to, don&#8217;t resist starting over.  The command to get this to happen quickly can be typed into the command bar: &#8220;ripup ! ;&#8221;.  This will ripup everything, so if there were certain traces you wanted to keep the alternative is selecting the traces to leave alone one signal at a time by leaving off the semicolon, then hitting the green stoplight to execute the command.</p>
<p>If you&#8217;re happy with the board, then congratulations!  The next step is to get someone to review your board layout.  A fresh set of eyes makes all the difference.  But don&#8217;t be disappointed if, even after several reviews, it comes back with a few hardware bugs.  Have Xacto knife and patch wire ready ;)</p>
<h3>8) Send board to boardhouse.</h3>
<p>There are a lot of boardhouses, each with different pros and cons.  Here&#8217;s a list of other houses I&#8217;ve heard good things about:</p>
<ul>
<li>Personally, I use <a href="http://www.pcbexpress.com">PCBExpress</a> because of proximity &#8211; They do small, low-feature two layer boards for pretty cheap, and they ship ground for free.  Since they are also located in Oregon, I get them in two days.  They also accept Eagle files directly &#8211; no need to generate Gerbers.</li>
<li>I&#8217;ve heard good things about <a href="http://www.advancedcircuits.com/">Advanced Circuits</a>.</li>
<li><a href="http://www.batchpcb.com">BatchPCB</a> is related to SparkFun.  This one is pretty cheap @ $2.50/sq in (plus setup fee), but takes a while to get your boards back.  Time flexibility = lower cost boards.</li>
</ul>
<p>All of the above have Internet order options.  Just upload your file, answer a few questions (usually about layers), pay for it, and you&#8217;re done.  Usually, this is when I put together my final bill of materials and get the parts ordered so they arrive about the same time as the board.</p>
<p>Well, that just about covers it.  I&#8217;m sure I forgot something, so as usual feel free to remind me or ask questions in the comments.</p>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/assembly/'>assembly</a>, <a href='http://bradsprojects.wordpress.com/tag/avr/'>AVR</a>, <a href='http://bradsprojects.wordpress.com/tag/board-layout/'>board layout</a>, <a href='http://bradsprojects.wordpress.com/tag/cad/'>CAD</a>, <a href='http://bradsprojects.wordpress.com/tag/eaglecad/'>EagleCAD</a>, <a href='http://bradsprojects.wordpress.com/tag/epson-lcd/'>epson lcd</a>, <a href='http://bradsprojects.wordpress.com/tag/gps/'>GPS</a>, <a href='http://bradsprojects.wordpress.com/tag/nokia-lcd-display/'>nokia lcd display</a>, <a href='http://bradsprojects.wordpress.com/tag/paintball/'>paintball</a>, <a href='http://bradsprojects.wordpress.com/tag/pcb/'>PCB</a>, <a href='http://bradsprojects.wordpress.com/tag/pcbexpress/'>pcbexpress</a>, <a href='http://bradsprojects.wordpress.com/tag/project-specifications/'>project specifications</a>, <a href='http://bradsprojects.wordpress.com/tag/schematics/'>schematics</a>, <a href='http://bradsprojects.wordpress.com/tag/sparkfun/'>SparkFun</a>, <a href='http://bradsprojects.wordpress.com/tag/venus/'>venus</a>, <a href='http://bradsprojects.wordpress.com/tag/xbee/'>XBee</a>, <a href='http://bradsprojects.wordpress.com/tag/xmega/'>xmega</a>, <a href='http://bradsprojects.wordpress.com/tag/zephyreye/'>ZephyrEye</a>, <a href='http://bradsprojects.wordpress.com/tag/zigbee/'>zigbee</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=183&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/03/05/zephyreye-rev2-board-layout-in-eagle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/03/ze_sideview.jpg?w=300" medium="image">
			<media:title type="html">ZephyrEye Rev1 Sideview</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/03/main_board_noroute.png?w=300" medium="image">
			<media:title type="html">Unrouted Rev2 Main Board</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/03/main_board_routed.png?w=300" medium="image">
			<media:title type="html">Routed Rev2 Main Board</media:title>
		</media:content>

		<media:content url="http://cdn0.knowyourmeme.com/i/1980/original/star-wars-darth-vader-sense.jpg" medium="image">
			<media:title type="html">Sense: This Makes None</media:title>
		</media:content>
	</item>
		<item>
		<title>ZephyrEye Rev2: Call for Schematic Reviewers</title>
		<link>http://bradsprojects.wordpress.com/2010/02/24/zephyreye-rev2-call-for-schematic-reviewers/</link>
		<comments>http://bradsprojects.wordpress.com/2010/02/24/zephyreye-rev2-call-for-schematic-reviewers/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 21:42:26 +0000</pubDate>
		<dc:creator>bradsprojects</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Project Description]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[board layout]]></category>
		<category><![CDATA[CAD]]></category>
		<category><![CDATA[EagleCAD]]></category>
		<category><![CDATA[electronic components]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[paintball]]></category>
		<category><![CDATA[PCB]]></category>
		<category><![CDATA[schematics]]></category>
		<category><![CDATA[venus]]></category>
		<category><![CDATA[XBee]]></category>
		<category><![CDATA[xmega]]></category>
		<category><![CDATA[ZephyrEye]]></category>
		<category><![CDATA[zephyreye parts list]]></category>

		<guid isPermaLink="false">http://bradsprojects.wordpress.com/?p=171</guid>
		<description><![CDATA[There are a few inevitable truths in this world.  Taxes will rise, Wookies shed all over the furniture, Luke and Leia are related, and there is no such thing as a perfect first draft schematic. The Rev2 circuit is nearly complete.  It looks AMAZING if I do say so myself.  That&#8217;s the problem, though:  I&#8217;m [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=171&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There are a few inevitable truths in this world.  Taxes will rise, Wookies shed all over the furniture, Luke and Leia are related, and there is no such thing as a perfect first draft schematic.</p>
<p>The Rev2 circuit is nearly complete.  It looks AMAZING if I do say so myself.  That&#8217;s the problem, though:  I&#8217;m inundated with excitement and therefore am unable to find things that are wrong because I don&#8217;t want to find any reason that might delay getting the circuit boards back as soon as possible.</p>
<p>I&#8217;m calling out for a few extra set of eyes to look over the schematic   If anyone could please go to the Google code, download the Eagle CAD files and take a look, I&#8217;d really appreciate it.  If you want to make changes, let me know so I can arrange for them to be merged back in properly.  Even if you&#8217;ve never looked at schematics before, take a look and as always, feel free to ask what&#8217;s going on in the comments.</p>
<p>This is also a great chance to give suggestions on functionality.  I should add, it may be your LAST chance!  Please give some comments if you think you might ever build one, if nothing else just to say you think it works for what you&#8217;d like to use it for.</p>
<p>If you&#8217;re not familiar with CAD schematics and circuit board layouts, it might be interesting to look at the history of the .sch and .brd files in the <a href="http://code.google.com/p/zephyreye/source/browse/#svn/trunk/cad/rev2">Google Code repository</a>.  By looking at older revisions, you can see the steps taken along the way chronologically.  I commit changes at least at the end of almost every day I work on the project.</p>
<p>The current Bill of Materials can also be found <a href="https://spreadsheets.google.com/ccc?key=0AgNz5abm7ldddHRFOUVFZ2VZcWZTVlcyWHZYS0tpOHc&amp;hl=en">at this Google Docs spreadsheet</a>.  It includes estimated pricing &#8211; it currently comes in at just under $200.  A little bit higher than I was hoping, but about the same cost as Rev1 and Chuck Norris (adverbicized) packed with new extra features!</p>
<p style="text-align:center;"><a href="http://bradsprojects.files.wordpress.com/2010/02/main_board.png"><img class="aligncenter size-medium wp-image-173" title="main_board" src="http://bradsprojects.files.wordpress.com/2010/02/main_board1.png?w=400&#038;h=207" alt="" width="400" height="207" /></a>The schematic is hopefully organized well enough for someone not intimately familiar with this project to try and understand one section of the schematic at a time.  The capacitive touch schematic is separate, because it will be a separate board.  The way it works is you put copper pads on the board, glue it to the inside of your enclosure, and it senses you touching it on the outside of the enclosure.  Pretty nifty, and a great way to avoid milling the enclosure.</p>
<p style="text-align:center;"><a href="http://bradsprojects.files.wordpress.com/2010/02/cap_touch_input.png"><img class="aligncenter size-medium wp-image-174" title="cap_touch_input" src="http://bradsprojects.files.wordpress.com/2010/02/cap_touch_input.png?w=400&#038;h=350" alt="" width="400" height="350" /></a></p>
<p style="text-align:left;">Please post comments below, or add to the <a href="http://groups.google.com/group/zephyreye-dev">Google Groups discussion page</a>.</p>
<br /> Tagged: <a href='http://bradsprojects.wordpress.com/tag/avr/'>AVR</a>, <a href='http://bradsprojects.wordpress.com/tag/board-layout/'>board layout</a>, <a href='http://bradsprojects.wordpress.com/tag/cad/'>CAD</a>, <a href='http://bradsprojects.wordpress.com/tag/eaglecad/'>EagleCAD</a>, <a href='http://bradsprojects.wordpress.com/tag/electronic-components/'>electronic components</a>, <a href='http://bradsprojects.wordpress.com/tag/gps/'>GPS</a>, <a href='http://bradsprojects.wordpress.com/tag/paintball/'>paintball</a>, <a href='http://bradsprojects.wordpress.com/tag/pcb/'>PCB</a>, <a href='http://bradsprojects.wordpress.com/tag/schematics/'>schematics</a>, <a href='http://bradsprojects.wordpress.com/tag/venus/'>venus</a>, <a href='http://bradsprojects.wordpress.com/tag/xbee/'>XBee</a>, <a href='http://bradsprojects.wordpress.com/tag/xmega/'>xmega</a>, <a href='http://bradsprojects.wordpress.com/tag/zephyreye/'>ZephyrEye</a>, <a href='http://bradsprojects.wordpress.com/tag/zephyreye-parts-list/'>zephyreye parts list</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bradsprojects.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bradsprojects.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bradsprojects.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bradsprojects.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bradsprojects.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bradsprojects.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bradsprojects.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bradsprojects.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bradsprojects.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bradsprojects.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bradsprojects.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bradsprojects.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bradsprojects.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bradsprojects.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bradsprojects.wordpress.com&amp;blog=11201906&amp;post=171&amp;subd=bradsprojects&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bradsprojects.wordpress.com/2010/02/24/zephyreye-rev2-call-for-schematic-reviewers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a574077715a587c1360057ce4d3220bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bradsprojects</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/02/main_board1.png?w=300" medium="image">
			<media:title type="html">main_board</media:title>
		</media:content>

		<media:content url="http://bradsprojects.files.wordpress.com/2010/02/cap_touch_input.png?w=300" medium="image">
			<media:title type="html">cap_touch_input</media:title>
		</media:content>
	</item>
	</channel>
</rss>
