<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>RoBoOpS &#187; GPIO</title>
	<atom:link href="http://www.roboops.es/tag/gpio/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.roboops.es</link>
	<description>…cables y eso…</description>
	<lastBuildDate>Tue, 31 Aug 2010 08:03:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Expansor de GPIOs I2C, PCB.</title>
		<link>http://www.roboops.es/2008/10/06/expansor-de-gpios-i2c-pcb/</link>
		<comments>http://www.roboops.es/2008/10/06/expansor-de-gpios-i2c-pcb/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 17:45:16 +0000</pubDate>
		<dc:creator>BoOpS</dc:creator>
				<category><![CDATA[Circuitos]]></category>
		<category><![CDATA[EAGLE]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[PCB]]></category>

		<guid isPermaLink="false">http://www.roboops.es/?p=155</guid>
		<description><![CDATA[Hace ya tiempo que subí un tutorial sobre el control del MCP23017 ahora os traigo una PCB con todas las posibilidades de este controlador. Características: - Dos registros E/S de 8 bits - Dos salidas de Interrupción y salida de &#8230; <a href="http://www.roboops.es/2008/10/06/expansor-de-gpios-i2c-pcb/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Expansor I2C." href="http://www.roboops.es/wp-content/uploads/2008/10/DSCF9713.JPG" target="_blank"><img class="aligncenter" src="http://www.roboops.es/wp-content/uploads/2008/10/DSCF9713R.JPG" alt="Expansor I2C." /></a></p>
<p>Hace ya tiempo que subí un <a title="Tutorial, Expansión de GPIOs por I2C." href="http://www.roboops.es/2008/08/13/expansion-de-gpios-por-i2c/" target="_blank">tutorial</a> sobre el control del <a title="Datasheet" href="http://www.roboops.es/wp-content/uploads/2008/06/exgpio/MCP23017.pdf" target="_blank">MCP23017</a> ahora os traigo una PCB con todas las posibilidades de este controlador.</p>
<p>Características:</p>
<p>- Dos registros E/S de 8 bits</p>
<p>- Dos salidas de Interrupción y salida de reset.</p>
<p>- Conexión I2C con 8 posibles direcciones, seleccionables mediante jumpers</p>
<p>- Alimentación externa o por el bus.</p>
<p>En la imagen se ven los conectores verticales, los puse por no tener horizontales. Se aprecian dos tiras de 4 pines, la conexión I2C, una borna de alimentación y 3 jumpers para seleccionar la dirección. El conector de las interrupciones y del reset no está soldado ya que no me era necesario. Espero que os guste y os animéis a montarlo. Todo tiene licencia <a title="Licencia." href="http://creativecommons.org/licenses/by-sa/3.0/deed.es" target="_blank">CC-BY-SA 3.0</a>.</p>
<p><a title="Descarga de esquematicos EAGLE." href="http://www.roboops.es/wp-content/uploads/2008/10/Expansor I2C(Final).zip">Descarga de esquemáticos EAGLE (Necesario Eagle 5 o superior).</a></p>
<p><a title="Descargar la librería." href="http://www.roboops.es/wp-content/uploads/2008/08/MCP23X17.lbr">LIBRERÍA MCP23X17 ( Download Cadsoft Eagle library MCP23X17.lbr )</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.roboops.es/2008/10/06/expansor-de-gpios-i2c-pcb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jugando con los GPIO.</title>
		<link>http://www.roboops.es/2008/09/20/jugando-con-los-gpio/</link>
		<comments>http://www.roboops.es/2008/09/20/jugando-con-los-gpio/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 12:10:04 +0000</pubDate>
		<dc:creator>BoOpS</dc:creator>
				<category><![CDATA[Fonera 2.0]]></category>
		<category><![CDATA[Foneras]]></category>
		<category><![CDATA[Fonera]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[WIFI]]></category>

		<guid isPermaLink="false">http://www.roboops.es/?p=152</guid>
		<description><![CDATA[Hace tiempo, prácticamente a la semana de tener la Fonera 2.0 en mis manos estuve buscando las direcciones de los diferentes GPIO y me encontré con 6 GPIO &#8220;disponibles&#8221;, realmente 5 Leds mas un reset y un apagado: GPIO: 1 &#8230; <a href="http://www.roboops.es/2008/09/20/jugando-con-los-gpio/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo, prácticamente a la semana de tener la Fonera 2.0 en mis manos estuve buscando las direcciones de los diferentes GPIO y me encontré con 6 GPIO &#8220;disponibles&#8221;, realmente 5 Leds mas un reset y un apagado:</p>
<p>GPIO:<br />
1 -&gt; Wireless Naranja<br />
2 -&gt; Wireless Verde<br />
3 -&gt; USB (Verde)<br />
4 -&gt; Power Verde<br />
7 -&gt; Power Naranja<br />
5 -&gt; Reset<br />
6 -&gt; Apagado</p>
<p>Su uso viene siendo el mismo que en las anteriores versiones, los registros estan en /proc/gpio/ y estan ordenados así:</p>
<p>NUM_DIR Dirección del puerto a 1 como salida y a 0 como entrada.<br />
NUM_OUT Salida del puerto a 1 nivel alto (3v3) y a 0 nivel bajo (0v).<br />
NUM_IN Entrada del puerto a 1 cuando lee nivel alto y a 0 cuando lee nivel bajo. (No me he parado a comprobar los margenes)</p>
<p>Así que os dejo un vídeo con el resultado:</p>
<div class="wpv_videoc">
<div class="wpv_video"><object data="http://www.youtube.com/v/BW9Knzl_Ueo" type="application/x-shockwave-flash" width="100%" height="100%"><param name="movie" value="http://www.youtube.com/v/BW9Knzl_Ueo"></param></object></div>
</div>
<p>El proceso ha sido bien sencillo, creamos un script al que he llamado prueba con el siguiente código: (Para crearlo basta con hacer: &#8220;vi prueba&#8221; después pulsaremos &#8220;i&#8221; y pegaremos el código, para guardarlo &#8220;ESC&#8221; y escribir &#8220;:wq!&#8221;)</p>
<p><code>echo 1 &gt; /proc/gpio/1_dir<br />
echo 1 &gt; /proc/gpio/2_dir<br />
echo 1 &gt; /proc/gpio/3_dir<br />
echo 1 &gt; /proc/gpio/4_dir<br />
echo 1 &gt; /proc/gpio/7_dir<br />
echo 0 &gt; /proc/gpio/1_out<br />
echo 0 &gt; /proc/gpio/3_out<br />
echo 0 &gt; /proc/gpio/4_out<br />
echo 0 &gt; /proc/gpio/7_out<br />
echo 0 &gt; /proc/gpio/2_out<br />
sleep 1<br />
echo 1 &gt; /proc/gpio/2_out<br />
sleep 1<br />
echo 1 &gt; /proc/gpio/1_out<br />
sleep 1<br />
echo 1 &gt; /proc/gpio/3_out<br />
sleep 1<br />
echo 1 &gt; /proc/gpio/4_out<br />
sleep 1<br />
echo 1 &gt; /proc/gpio/7_out<br />
sleep 1<br />
echo 0 &gt; /proc/gpio/2_out<br />
sleep 1<br />
echo 0 &gt; /proc/gpio/7_out</code></p>
<p>Por orden: Primero configuramos todos los registros como salidas, apagamos todos los leds y vamos encendiéndolos con esperas de 1 segundo.  Y finalmente apagamos dos de los leds.</p>
<p>Para ejecutarlo primero debemos darle permiso de ejecución: &#8220;chmod prueba +x&#8221; y para lanzarlo escribiremos &#8220;./prueba&#8221;.</p>
<p>¡Espero que os animeis y le pongais ruedas a alguna fonera!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roboops.es/2008/09/20/jugando-con-los-gpio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Expansión de GPIOs por I2C</title>
		<link>http://www.roboops.es/2008/08/13/expansion-de-gpios-por-i2c/</link>
		<comments>http://www.roboops.es/2008/08/13/expansion-de-gpios-por-i2c/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 12:42:25 +0000</pubDate>
		<dc:creator>BoOpS</dc:creator>
				<category><![CDATA[Circuitos]]></category>
		<category><![CDATA[PICs]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.roboops.es/?p=136</guid>
		<description><![CDATA[Hace tiempo que pedí samples a Microchip de un circuito que me pareció interesante un expansor de BUS I2C de 16 bits (MCP23017)&#8230; Entre viajes y estudios no tuve tiempo de ponerme a montar nada hasta que anoche pensando en &#8230; <a href="http://www.roboops.es/2008/08/13/expansion-de-gpios-por-i2c/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo que pedí samples a Microchip de un circuito que me pareció interesante un expansor de BUS I2C de 16 bits (<a title="Datasheet" href="http://www.roboops.es/wp-content/uploads/2008/06/exgpio/MCP23017.pdf" target="_blank">MCP23017</a>)&#8230; Entre viajes y estudios no tuve tiempo de ponerme a montar nada hasta que anoche pensando en lo que podría hacer con la LCD me acorde de él, así que me puse a mirar su cortísimo <a title="Datasheet" href="http://www.roboops.es/wp-content/uploads/2008/06/exgpio/MCP23017.pdf" target="_blank">datasheet</a>. Así que hoy ha salido esto:</p>
<div class="wpv_videoc">
<div class="wpv_video"><object data="http://www.youtube.com/v/Yuy6QdaxpBQ" type="application/x-shockwave-flash" width="100%" height="100%"><param name="movie" value="http://www.youtube.com/v/Yuy6QdaxpBQ"></param></object></div>
</div>
<p>Aquí tenéis un pequeño Manual del uso básico de este circuito.</p>
<p>13/08/2008 &#8211; Añado librería Eagle del MCP23017.</p>
<p><span id="more-136"></span></p>
<p>En resumen el circuito y es una expansor I2C con las siguientes características:</p>
<p>Posibilidad de configurar 8 direcciones, permitiendo interconectar 8 módulos, lo que serían 128 IO&#8217;s.</p>
<p>Interface I2C de alta velocidad, 100 kHz, 400 kHz y 1.7MHz.</p>
<p>Dos salidas de interrupción por cambio de estado configurables.</p>
<p>Posibilidad de inversión en el modo de entrada.</p>
<p>Reset externo.</p>
<p>Sobre el hardware necesario casi ninguno, configurar las 3 entradas de dirección en la dirección que deseemos alimentarlo y conectarlo a nuestro bus I2C.</p>
<p>La programación se resume en 2 posibilidades. Usar el banco 0 (Activa por defecto) en la cual tendremos los bytes de control de los puertos correlativos:</p>
<p style="text-align: center;"><a title="Tabla de registros del Banco0" href="http://www.roboops.es/wp-content/uploads/2008/06/exgpio/banco0.jpg"><img class="aligncenter" src="http://www.roboops.es/wp-content/uploads/2008/06/exgpio/banco0p.jpg" alt="Tabla de registros del Banco0" /></a></p>
<p>O bien usar el banco 1 de modo que tendremos primero las direcciones correspondientes a los 8 primeros bits y a continuación la correspondiente a los otros ocho bits:</p>
<p style="text-align: center;"><a title="Tabla de registros del Banco1" href="http://www.roboops.es/wp-content/uploads/2008/06/exgpio/banco1.jpg"><img class="aligncenter" src="http://www.roboops.es/wp-content/uploads/2008/06/exgpio/banco1p.jpg" alt="Tabla de registros del Banco1" /></a></p>
<p>A la hora de escribir en el tendremos que tener en cuenta dos factores, la dirección del dispositivo que se compone con la siguiente secuencia:</p>
<p>0  1  0  0  A2  A1  A0  R/W</p>
<p>Por ejemplo si hemos configurado todas las entradas de dirección a positivo y vamos a proceder a escribir en el dispositivo usariamos: 0b01001110 o lo que es lo mismo 0x4E o 78 en Decimal.</p>
<p>Después de escribir ese byte tendremos que escribir la dirección del registro a la que queramos acceder, por ejemplo la configuración como entrada o salida del puerto A, IODIRA: Dirección 0&#215;00.</p>
<p>Aquí es donde tenemos que tener encuenta otro factor importante el tipo de avanze que tengamos configurado en el registro IOCON en concreto el bit 5: SEQOP, por defecto vale 0 de forma que si mandamos otro byte el puntero se habra despazado y escribiremos en el siguiente registro, siguiendo nuestro ejemplo estariamos escribiendo en IODIRB (Dirección 0&#215;01). Si activamos el bit de SEQOP y mandamos otro bit estariamos volviendo a escribir en IODIRA.</p>
<p>Bueno, con esto ya estamos preparados para entender el siguiente codigo ejemplo de escritura escrito en CCS:</p>
<blockquote><p>#use i2c(master, slow, sda=PIN_C1, scl=PIN_C2) //Configuramos el bus I2C</p>
<p>i2c_start(); //condición de inicio<br />
i2c_write(78); //escribimos la dirección del dispositivo<br />
i2c_write(00); //escribimos la dirección del registro<br />
i2c_write(00); //configuramos el registro IODIRA como todo salida.<br />
i2c_write(00); //configuramos el registro IODIRB como todo salida.<br />
i2c_stop(); //condición de parada</p>
<p>i2c_start();<br />
i2c_write(78); //Expansor de GPIO<br />
i2c_write(0&#215;12); //Reg. Puerto A<br />
i2c_write(0&#215;55); //Escribimos 01010101<br />
i2c_write(0xAA); //Escribimos 10101010 (Con el avanze del puntero escribimos en Reg. Puerto B<br />
i2c_stop();</p></blockquote>
<p>Notas: La configuración del bus I2C he usado el modo lento pero admite el modo rapido sin problemas, basta con poner Fast. Los puertos del Pic que yo he usado no forman parte del Hardware I2C así que los genera por software, en caso de usar puertos con hardware I2C y querer usarlo deberemos añadir: &#8220;NOFORCE_SW&#8221; Normalmente los dos primeros bloques se colocarian en la configuración (la directiva de #USE y la configuración como Salidas) y el tercer bloque en el codigo de &#8220;uso del hardware&#8221;.</p>
<p>Actualizo este articulo añadiendo una librería para EAGLE que acabo de hacer, es solo del expansor por I2C si alguien quiere seguir trabajando con ella y hacer la parte del SPI adelante.</p>
<p><a title="Descargar la librería." href="http://www.roboops.es/wp-content/uploads/2008/08/MCP23X17.lbr">LIBRERÍA MCP23X17 ( Download Cadsoft Eagle library MCP23X17.lbr )</a></p>
<p>Y bueno esto es todo lo que tengo por el momento.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.roboops.es/2008/08/13/expansion-de-gpios-por-i2c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
