
 <?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" >

<channel>
	<title>miguelware &#187; AVR</title>
	<atom:link href="http://miguelware.net/tag/avr/feed/" rel="self" type="application/rss+xml" />
	<link>http://miguelware.net</link>
	<description></description>
	<lastBuildDate>Fri, 06 Nov 2009 21:29:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>AVR en Linux.</title>
		<link>http://miguelware.net/mini-howto-avr-en-linux-avr-dragon-con-jtag-gcc-avarice-ddd/</link>
		<comments>http://miguelware.net/mini-howto-avr-en-linux-avr-dragon-con-jtag-gcc-avarice-ddd/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 13:17:26 +0000</pubDate>
		<dc:creator>Miguel</dc:creator>
				<category><![CDATA[electrónica]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[microcontroladores]]></category>

		<guid isPermaLink="false">http://miguelware.net/?p=232</guid>
		<description><![CDATA[
<ol><li>
</li></ol>
How to use AVR Dragon JTAG in Linux: <a href="http://www.larsen-b.com/Article/315.html">http://www.larsen-b.com/Article/315.html</a>
<ol><li>
</li></ol>

]]></description>
			<content:encoded><![CDATA[<p>Ahora estoy trabajando con microcontroladores de 8bit, anteriormente he jugado un poco con los <a href="http://www.microchip.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microchip.com');">PIC de Microchip</a>, no obstante, ahora tenÃ­a en mente poder hacer todo el desarrollo con software libre. AsÃ­ que he elegido los <a href="http://www.atmel.com/products/AVR/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.atmel.com');">AVR de Atmel</a>. Tambien he tocado un poco <a href="http://www.arduino.cc/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.arduino.cc');">Arduino</a> que estÃ¡ basado en esta familia de micros, no obstante ahora profundizo mÃ¡s en la arquitectura de los AVR y depuro el cÃ³digo con la interfaz JTAG.</p>
<p><strong>Herramientas necesarias:</strong></p>
<ul>
<li> Programador(hardware) <a href="http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=3891" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.atmel.com');">AVR Dragon</a>.</li>
<li> Librerias C, <a href="http://www.nongnu.org/avr-libc/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.nongnu.org');">AVR Libc</a>.</li>
<li> Compilador <a href="http://www.avrfreaks.net/wiki/index.php/Documentation:AVR_GCC" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.avrfreaks.net');">Gcc-avr</a>.</li>
<li> Debugger Gdb-avr.</li>
<li> Front end para el debugger <a href="http://www.gnu.org/software/ddd/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.gnu.org');">DDD</a>.</li>
<li> <a href="http://linux.die.net/man/1/avarice" onclick="javascript:pageTracker._trackPageview('/outbound/article/linux.die.net');">Avarice</a>.</li>
</ul>
<p><strong>Compilando con GCC-avr:</strong></p>
<p>Para compilar he usado esta secuencia de comandos.</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;">avr-gcc -g -OS -mmcu=atmega16 -c test.c;avr-gcc -g -mmcu=atmega16 -o test.elf test.o;avr-objcopy -j .text -j .data -O ihex test.elf test.hex</pre></div></div>

<p>AquÃ­ a grandes rasgos, se genera un fichero objeto, luego un archivo binario GNU ejecutable y por Ãºltimo el .hex que volcaremos en la memorÃ­a del micro. MÃ¡s informaciÃ³n en <a href="http://www.network-theory.co.uk/docs/gccintro/gccintro_13.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.network-theory.co.uk');">este libro</a>.</p>
<p><strong>Depurando con Avarice + GDB-AVR/DDD:<br />
</strong></p>
<p>Los elemetos que intervienen y como estan conectados entre si:</p>
<p><em>Atmega16  &lt;&#8212;JTAG&#8211;&gt;  AVR Dragon  &lt;&#8212;USB&#8212;&gt; Avarice &lt;&#8212;TCP/IP&#8212;&gt; GDB-avr</em></p>
<p>El programador AVR Dragon viene de casa sin cables ni manuales, asÃ­ que es conveniente echarle una ojeada a <a href="http://support.atmel.no/knowledgebase/avrstudiohelp/mergedProjects/AVRDragon/AVRDragon.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/support.atmel.no');">la pÃ¡gina del fabricante</a>, para conocer el conexionado, y poder hacerse el cable o insertar los zÃ³calos.</p>
<p>Para poner en marcha Avarice:</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;"> avarice -g -j usb --erase --program --file test.hex :4242</pre></div></div>

<p>que borra y programa el micro y espera una conexiÃ³n en el puerto 4242.</p>
<p>Para conectar GDB con Avarice y comenzar a depurar, hay que indicar que fichero tiene que tomar y por que puerto tiene que establecer la conexiÃ³n, esto se puede hacer creando un fichero de configuraciÃ³n en el directorio donde ejecutamos gdb:</p>
<p>Por ejemplo el fichero gdb.conf con este contenido:</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;">file  test.elf
target remote localhost:4242</pre></div></div>

<p>luego ejecutamos gdb-avr:</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;"> avr-gdb -x gdb.conf</pre></div></div>

<p>Si preferimos usar un entorno grÃ¡fico, podemos usar DDD, con el siguiente comando.</p>

<div class="wp_syntax"><div class="code"><pre class="language" style="font-family:monospace;"> ddd --debugger &quot;avr-gdb -x gdb.conf&quot;</pre></div></div>

<p><strong>Alguna cuestiÃ³n mÃ¡s:</strong></p>
<p>El parÃ¡metro -OS que se ha usado a la hora de compilar con GCC, indica a este que optimice el cÃ³digo para ahorrar recursos, a la hora de depurar puede que no se usen algunas varibles que a priori usamos en nuestro programa. Quitando ese parÃ¡metro se puede solucionar este problema.</p>
<p>Esta cuestiÃ³n y muchas mÃ¡s estan en el <a href="http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_gdboptimize" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.nongnu.org');">FAQ de avr-libc</a>, imprecindible!!</p>
<p>Y nada mÃ¡s espero que este minihowto le sirva a alguien :-)</p>
<p>Referencias:</p>
<ul>
<li> <a href="http://www.larsen-b.com/Article/315.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.larsen-b.com');">How to use AVR Dragon JTAG in Linux.</a></li>
<li><a href="http://www.instructables.com/id/S1I06RRFBG0A8E3/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.instructables.com');">Getting started with Ubuntu and the AVR Dragon.</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://miguelware.net/mini-howto-avr-en-linux-avr-dragon-con-jtag-gcc-avarice-ddd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
