<?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>Tech-Freaks</title>
	<atom:link href="http://tech-freaks.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://tech-freaks.net</link>
	<description>Microcontroladores, Electrónica, Tecnología, DIY y más</description>
	<lastBuildDate>Thu, 01 Jul 2010 03:04:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Receptor de Radio (Scanner) Casero</title>
		<link>http://tech-freaks.net/?p=998</link>
		<comments>http://tech-freaks.net/?p=998#comments</comments>
		<pubDate>Sat, 19 Jun 2010 15:42:41 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Microcontroladores PIC]]></category>
		<category><![CDATA[Proyectos Interesantes]]></category>
		<category><![CDATA[Radio]]></category>
		<category><![CDATA[FM]]></category>
		<category><![CDATA[Microcontroladores]]></category>
		<category><![CDATA[PCB]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[PLL]]></category>
		<category><![CDATA[RF]]></category>
		<category><![CDATA[Sintonizador]]></category>
		<category><![CDATA[TDA7000]]></category>
		<category><![CDATA[Varicap]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=998</guid>
		<description><![CDATA[Para aquellos que gusten de escuchar comunicaciones radiofónicas, sin duda no se pueden perder esta serie de artículos que escribió Mario Sacco, seguramente serán de interés para ustedes.]]></description>
			<content:encoded><![CDATA[<p>El señor Mario Sacco, quien escribe artículos sobre electrónica en el blog de tecnología &#8220;NeoTeo&#8221; siempre tiene algún artículo bastante interesante que leer. Para aquellos que gusten de escuchar comunicaciones radiofónicas, sin duda no se pueden perder esta serie de artículos que escribió sobre la construcción de un receptor multibanda, ya que seguramente serán de interés para ustedes.</p>
<div id="attachment_1046" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2010/06/receptor_neoteo.jpg"><img class="size-medium wp-image-1046" title="receptor_neoteo" src="http://tech-freaks.net/wp-content/uploads/2010/06/receptor_neoteo-300x204.jpg" alt="" width="300" height="204" /></a><p class="wp-caption-text">Circuito impreso del receptor basado en TDA7000, corazón de este proyecto</p></div>
<p>Llama la atención del proyecto que las piezas para construirlo se pueden obtener fácilmente de cualquier taller de reparación de televisores, o bien, de alguna televisión descompuesta y sin uso que tengamos en casa. Los resultados son sorprendentes para un proyecto de hobby, y sin lugar a dudas se trata de un montaje bastante recompensante en lo que se puede lograr con el. Tienes los enlaces a continuación que van recomendados en un 1000% (si, 1000 %).<br />
<span id="more-998"></span><br />
Por mi parte conseguí algunos de los componentes necesarios para el receptor de F.M basado en el TDA7000  incluido este último, pero aún me faltan algunos que no he logrado conseguir como el diodo varicap y un par de capacitores&#8230; ¿Y tu no te animas?</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="445" height="364" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/TR4dVe6qhQ4&amp;hl=es_MX&amp;fs=1&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="445" height="364" src="http://www.youtube.com/v/TR4dVe6qhQ4&amp;hl=es_MX&amp;fs=1&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Con este comienza todo: Mi primer receptor.</p>
<ul>
<li><a href="http://www.neoteo.com/mi-primer-receptor-tda7000.neo" target="_blank">Receptor de FM basado en TDA7000</a></li>
</ul>
<p>Escanner con TDA7000 y sintonizador de TV:</p>
<ul>
<li><a href="http://www.neoteo.com/receptor-multibanda-neoteo-parte-i.neo" target="_blank">Receptor parte 1</a></li>
<li><a href="http://www.neoteo.com/receptor-multibanda-neoteo-parte-ii.neo" target="_blank">Receptor parte 2</a></li>
<li><a href="http://www.neoteo.com/receptor-multibanda-neoteo-parte-iii.neo">Receptor parte 3</a></li>
<li><a href="http://www.neoteo.com/receptor-multibanda-neoteo-parte-iv.neo">Receptor parte 4</a></li>
</ul>
<p>Aplicaciones de este circuito:</p>
<ul>
<li><a href="http://www.neoteo.com/como-bajar-imagenes-desde-un-satelite.neo" target="_blank">Imágenes desde satélites meteorológicos.</a></li>
<li><a href="http://www.neoteo.com/como-bajar-imagenes-desde-un-satelite-parte-ii.neo" target="_blank">Imágenes desde satélites meteorológicos.</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=998</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dentro del software del dimmer [Parte 1]</title>
		<link>http://tech-freaks.net/?p=890</link>
		<comments>http://tech-freaks.net/?p=890#comments</comments>
		<pubDate>Wed, 24 Mar 2010 19:35:31 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Artículos y proyectos]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Microcontroladores PIC]]></category>
		<category><![CDATA[Proyectos Interesantes]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[CCS]]></category>
		<category><![CDATA[Control Remoto]]></category>
		<category><![CDATA[Dimmer]]></category>
		<category><![CDATA[Firmware]]></category>
		<category><![CDATA[Infrarrojo]]></category>
		<category><![CDATA[Lamparas incandescentes]]></category>
		<category><![CDATA[Mando a distancia]]></category>
		<category><![CDATA[Microcontroladores]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[PIC12F]]></category>
		<category><![CDATA[SIRC]]></category>
		<category><![CDATA[Sony]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=890</guid>
		<description><![CDATA[Esta entrada es parte de una serie que describe el funcionamiento del  firmware de mi dimmer con PIC. En concreto en esta hablo sobre el funcionamiento del detector de cruce por cero y el disparo del triac.]]></description>
			<content:encoded><![CDATA[<p>Desde la publicación del <a href="http://tech-freaks.net/?p=170" target="_self">dimmer</a>, he recibido muchos correos preguntando ciertas particularidades del software que lo controla. Esta es la razón por la cual he decidido crear esta serie de entradas con la intención de facilitar la tarea a todos aquellos que prefieren crear su propio software y hardware en vez de usar alguno de otro proyecto disponible en la red.</p>
<div id="attachment_227" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2009/01/dimmer_final03.jpg"><img class="size-medium wp-image-227" title="dimmer_final03" src="http://tech-freaks.net/wp-content/uploads/2009/01/dimmer_final03-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Cara superior e inferior del PCB</p></div>
<p>El firmware básicamente realiza las siguientes tareas:</p>
<ul>
<li>Monitorea el pin de detección de cruce por cero y carga el valor apropiado en un timmer del PIC, para que este se desborde en algún momento del semiciclo y disparar entonces el Triac.</li>
<li>Esta atento a los cambios de estado del pin en el que esta conectado el receptor infrarrojo, si se detecta un cambio en este pin se inicia la captura del tiempo del pulso (recordar que el protocolo IR de sony utiliza codificación por ancho de pulsos.</li>
<li>Detecta y reconoce las pulsaciones cortas y largas del pulsador para el control manual del dimmer.</li>
</ul>
<p>En esta primera parte me voy a concentrar en la detección de cruce por cero y el disparo del triac.</p>
<p><span id="more-890"></span></p>
<h2>Detección de los cruces por cero.</h2>
<p>Utilizaremos la interrupción externa del PIC para detectar cuando el voltaje se aproxima a cero y por lo tanto cuando debe comenzar el conteo para disparar el TRIAC.</p>
<p>Hablaremos entonces sobre la función <code>void vInterruptZeroCross()</code> que esta asociada a la interrupción externa. La variable iIntControl sirve para recordar que flanco queremos detectar en la siguiente interrupción externa, mientras que la variable global iLampBrightness contiene el valor a cargar en el timer y es modificada por las funciones que desean cambiar el brillo de la lámpara. Por otra parte,  iTriacFlag se utiliza como auxiliar para generar un pulso de corta duración en la interrupción de desbordamiento del timer0 y se explicará más adelante.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#INT_EXT</span>
<span style="color: #993333;">void</span> vInterruptZeroCross<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">static</span> <span style="color: #993333;">int</span> iIntControl <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	output_low<span style="color: #009900;">&#40;</span> _TRIAC_CONTROL <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Turn triac output to low level, just in case it is still high</span>
	iTriacFlag <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Set triac status flag to off status</span>
	set_timer0<span style="color: #009900;">&#40;</span> iLampBrightness <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Prepare timer to trigger the triac on the next TMR0 interrupt</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> iIntControl<span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span>			<span style="color: #666666; font-style: italic;">// Change the external interrupt edege alternately</span>
	<span style="color: #009900;">&#123;</span>
		iIntControl <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
		ext_int_edge<span style="color: #009900;">&#40;</span> H_TO_L <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span>
	<span style="color: #009900;">&#123;</span>
		iIntControl <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	       	ext_int_edge<span style="color: #009900;">&#40;</span> L_TO_H <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>En esta interrupción se realiza la carga del valor necesario al timer0  para que se desborde dentro de un intervalo de tiempo que corresponda con el periodo del semiciclo de corriente alterna. Para esto hay que configurar los prescalers para obtener un desbordamiento del timer un cada poco más de 8 milisegundos (1/(2*60)) para la red eléctrica de 60 Hz. El tiempo de incremento del timer determinara cuantos Tics nos caben en cada semiciclo de la red y por lo tanto la resolución con la que podremos controlar el brillo de la lámpara.</p>
<div id="attachment_939" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2010/03/control_fase.jpg"><img class="size-medium wp-image-939" title="control_fase" src="http://tech-freaks.net/wp-content/uploads/2010/03/control_fase-300x236.jpg" alt="" width="300" height="236" /></a><p class="wp-caption-text">El objetivo es generar una señal que este sincronizada con la red de 120V A.C.</p></div>
<p>Idealmente tendríamos  256 posibles niveles de intensidad, que corresponden a los posibles valores que podemos cargar al timer, sin embargo, hay factores prácticos que limitan este rango: como la precisión del detector de cruce por cero, la corriente mínima requerida para encender el triac y mantenerlo en estado de conducción, etc. Por lo tanto, de todos los valores posibles a cargar en el timer hay que descartar los primeros y los últimos. En mi caso, mediante experimentación con un osciloscopio y mi depurador ICD2 decidí limitar los valores a cargar en el timmer con las siguientes definiciones en el código fuente.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define _LAMP_TOP         225</span>
<span style="color: #339933;">#define _LAMP_MIN         40</span></pre></div></div>

<p>Siempre se puede jugar con este valor hasta obtener un funcionamiento óptimo. Estas definiciones me dejan con 186 valores útiles para cargar al timer. Hay que recordar que _LAMP_TOP representa el brillo máximo y por lo tanto el timer se debe cargar con un valor grande que haga que se desborde prácticamente al comienzo del semiciclo, mientras que _LAMP_MIN representa la mínima salida lumínica y si se carga ese valor al timer la interrupción de este ocurrirá prácticamente al final del semiciclo, permitiendo que el triac conduzca durante solamente un breve periodo de tiempo. Por lo tanto concluimos que para aumentar el brillo hay que incrementar el valor de la variable iLampBrightness, mientras que para disminuir el brillo hay que decrementarlo. Dicho esto podemos elaborar  las funciones que controlan el brillo a través de las teclas + / -, por ejemplo para aumentar el nivel de brillo:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> vLampBright<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	output_high<span style="color: #009900;">&#40;</span> _STATUS_LED <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	iLampBrightness <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> iLampBrightness <span style="color: #339933;">+</span> <span style="color: #0000dd;">5</span> <span style="color: #339933;">&lt;</span> _LAMP_TOP <span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> iLampBrightness <span style="color: #339933;">+</span> <span style="color: #0000dd;">5</span> <span style="color: #339933;">:</span> _LAMP_TOP<span style="color: #339933;">;</span>
	delay_ms<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">20</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	output_low<span style="color: #009900;">&#40;</span> _STATUS_LED <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Disparo del Triac</h2>
<p>Cuando ocurre una interrupción del timer0, el microcontrolador envía un pulso al gate del Triac para que este comience a conducir, una vez que el triac se ha disparado, podemos interrumpir el pulso al terminal de compuerta y el dispositivo seguirá conduciendo hasta que la corriente a través de los terminales MT1 y MT2 cae por debajo de cierto valor umbral, que es una característica propia de cada dispositivo. Al deshabilitar rápidamente el pulso en la compuerta evitamos consumir energía de manera innecesaria (hay que recordar que estamos limitados en este aspecto por la fuente capacitiva).</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#INT_TIMER0</span>
<span style="color: #993333;">void</span> vInterruptTimer0<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>iTriacFlag <span style="color: #009900;">&#41;</span>			<span style="color: #666666; font-style: italic;">//If the triac pin is low we change the state and prepare the timer</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> iLampBrightness <span style="color: #339933;">&gt;</span> _LAMP_MIN <span style="color: #009900;">&#41;</span>	<span style="color: #666666; font-style: italic;">// Do not trigger if level is set to min</span>
			output_high<span style="color: #009900;">&#40;</span> _TRIAC_CONTROL <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Turn on triac</span>
		set_timer0<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">250</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Next timer overflow will clear the triac pin</span>
		iTriacFlag <span style="color: #339933;">=</span> TRUE<span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Flag now signals that we need to turn off the triac output pin</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>				<span style="color: #666666; font-style: italic;">//The triac has been triggered, cut the pulse</span>
		output_low<span style="color: #009900;">&#40;</span> _TRIAC_CONTROL <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		set_timer0<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">//Set timer period to maximum, timer should not overflow untill next zero cross interrupt</span>
		iTriacFlag <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">//Change Triac Flag status, triac pin is now low</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Este código genera un pulso en el pin definido como _TRIAC_CONTROL. La primera interrupción coloca un 1 lógico en el pin del triac, cambia el valor de la variable iTriacFlag a 1 y coloca un valor grande en el registro del timer, lo cual produce una interrupción poco después de que se envío el pulso al terminal gate. Esta segunda interrupción del timer0, desactiva el pulso de gate al triac. Cambiando el valor cargado al timer en la primera interrupción (cuando !iTriacFlag se evalua como verdadero) se pueden lograr pulsos más largos o más cortos para manejar la compuerta del triac.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#INT_TIMER0</span>
<span style="color: #993333;">void</span> vInterruptTimer0<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>iTriacFlag <span style="color: #009900;">&#41;</span>			<span style="color: #666666; font-style: italic;">//If the triac pin is low we change the state and prepare the timer</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> iLampBrightness <span style="color: #339933;">&gt;</span> _LAMP_MIN <span style="color: #009900;">&#41;</span>	<span style="color: #666666; font-style: italic;">// Do not trigger if level is set to min</span>
			output_high<span style="color: #009900;">&#40;</span> _TRIAC_CONTROL <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Turn on triac</span>
		set_timer0<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">250</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Next timer overflow will clear the triac pin</span>
		iTriacFlag <span style="color: #339933;">=</span> TRUE<span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Flag now signals that we need to turn off the triac output pin</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>				<span style="color: #666666; font-style: italic;">//The triac has been triggered, cut the pulse</span>
		output_low<span style="color: #009900;">&#40;</span> _TRIAC_CONTROL <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		set_timer0<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">//Set timer period to maximum, timer should not overflow untill next zero cross interrupt</span>
		iTriacFlag <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">//Change Triac Flag status, triac pin is now low</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Conclusión</h2>
<p>Con los fragmentos de código anteriores, es posible construir un dimmer basado en PIC, tal vez no a control remoto, pero se pueden colocar un par de botones, los cuales aumenten y/o disminuyan la intensidad de la luz. Hay que recordar que trabajar con equipos conectados directamente a la red de 120 o 220 volts es peligroso y en la medida de lo posible hay que evitarlo. Conviene hacer las pruebas con un generador de funciones o alguna otra fuente que nos permita obtener una señal de 60 Hz para aplicar al PIC, o con un transformador y una lámpara de 12 volts. Si finalmente deciden conectarlo a la red eléctrica queda <strong>advertirles que es completamente bajo su responsabilidad</strong>.</p>
<h2>Comentarios.</h2>
<p>¿Tienes un comentario, duda, crítica, sugerencia?&#8230; Adelante, expresalo que no muerdo jeje.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=890</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Reloj con tubos Nixie y protocolo NTP</title>
		<link>http://tech-freaks.net/?p=917</link>
		<comments>http://tech-freaks.net/?p=917#comments</comments>
		<pubDate>Wed, 17 Mar 2010 02:48:22 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Microcontroladores AVR]]></category>
		<category><![CDATA[Proyectos Interesantes]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[ENC28J60]]></category>
		<category><![CDATA[Ethernet]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Network Time Protocol]]></category>
		<category><![CDATA[Nixie]]></category>
		<category><![CDATA[NTP]]></category>
		<category><![CDATA[Reloj]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=917</guid>
		<description><![CDATA[Tengo que admitir que siento una gran fascinación por dispositivos basados en bulbos o válvulas de vacío, como quiera que ustedes las conozcan, aunque la verdad nunca me he metido de lleno al tema. Sin embargo, hace mucho tiempo, tal vez desde muy pequeño, he sentido curiosidad por la forma en la que operan estos [...]]]></description>
			<content:encoded><![CDATA[<p>Tengo que admitir que siento una gran fascinación por dispositivos basados en bulbos o válvulas de vacío, como quiera que ustedes las conozcan, aunque la verdad nunca me he metido de lleno al tema. Sin embargo, hace mucho tiempo, tal vez desde muy pequeño, he sentido curiosidad por la forma en la que operan estos dispositivos y hasta cierto punto admiración por el suave y cálido brillo que emiten mientras están encendidos. No me queda duda de que si alguno de ustedes comparte al menos una ínfima parte de fascinación por estos dispositivos, les va a encantar el proyecto que les quiero presentar.</p>
<div id="attachment_918" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2010/03/reloj_nixie.jpg"><img class="size-medium wp-image-918" title="Los tubos nixie: Una forma diferente de presentar información" src="http://tech-freaks.net/wp-content/uploads/2010/03/reloj_nixie-300x225.jpg" alt="Los tubos nixie: Una forma diferente de presentar información" width="300" height="225" /></a><p class="wp-caption-text">Los tubos nixie: Una forma diferente de presentar información</p></div>
<p>Los tubos nixie son similares displays de 7 segmentos, pero fueron utilizados unas 3 o 4 décadas atrás, cuando no existía la tecnología de displays con leds, LCD u OLED a los que estamos acostumbrados hoy en día. Estos curiosos tubos son similares en aspecto a los tubos que predominaban en los receptores de radio y amplificadores de unas cuantas décadas atrás, solo que estos no permanecen fuera de nuestra vista, ya que su función es mostrar información como símbolos y números. Por desgracia o por fortuna, estos tubos nunca fueron tan populares entre los usuarios domésticos, ya que se pensaba que eran muy caros para aplicaciones de este tipo. Paradógicamente, en la actualidad y en pleno auge de las tecnologías de la información, hay gente que esta utilizando estos tubos para construir relojes digitales que aprovechan al máximo la conectividad y la tecnología actual y que para mi gusto, superan con creces a cualquier reloj comercial o no basado en displays LCD o leds debido a los trazos suaves y redondeados de sus dígitos y el cálido brillo del gas ionizado  que emana a través del vidrio.</p>
<p><span id="more-917"></span></p>
<div id="attachment_925" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2010/03/reloj_nixie_ntp.jpg"><img class="size-medium wp-image-925" title="reloj_nixie_ntp" src="http://tech-freaks.net/wp-content/uploads/2010/03/reloj_nixie_ntp-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Circuitos para el reloj nixie con protocolo NTP.</p></div>
<p>Aunque he visto ya varios circuitos similares este llamo especialmente mi atención, al grado de que me gustaría construir algo similar. El reloj que les presento tiene la capacidad de conectarse a internet a través de un cable ethernet y sincronizar el tiempo con algún servidor NTP (Protocolo de Tiempo de Red &#8211; Network Time Protocol) con lo cual siempre tendremos una hora precisa. Como pueden ver este reloj parece tener lo mejor de dos mundos y eso lo hace especial. A continuación enlaces y videos en youtube.</p>
<p>Mostrando la hora y fecha:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="340" height="285" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube-nocookie.com/v/aH-_WG5Hy8o&amp;hl=es_MX&amp;fs=1&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="340" height="285" src="http://www.youtube-nocookie.com/v/aH-_WG5Hy8o&amp;hl=es_MX&amp;fs=1&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Al iniciar, no hace falta ponerlo a tiempo:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="340" height="285" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube-nocookie.com/v/6kzDlCZGi_o&amp;hl=es_MX&amp;fs=1&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="340" height="285" src="http://www.youtube-nocookie.com/v/6kzDlCZGi_o&amp;hl=es_MX&amp;fs=1&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<ul>
<li>Visto en: <a href="http://hackedgadgets.com/2009/09/05/ntp-synced-nixie-tube-clock/" target="_blank">hackedgadgets.com</a></li>
<li>Página del proyecto: <a href="http://sites.google.com/site/evanquirk/Home/ntpsyncednixietubeclock" target="_blank">Reloj Nixie con NTP</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=917</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando MPLAB y el ICD2 en Linux</title>
		<link>http://tech-freaks.net/?p=677</link>
		<comments>http://tech-freaks.net/?p=677#comments</comments>
		<pubDate>Mon, 18 Jan 2010 22:26:07 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Artículos y proyectos]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Informática y Equipos]]></category>
		<category><![CDATA[Microcontroladores AVR]]></category>
		<category><![CDATA[Microcontroladores PIC]]></category>
		<category><![CDATA[Otros Microcontroladores]]></category>
		<category><![CDATA[ICD2]]></category>
		<category><![CDATA[Máquina Virtual]]></category>
		<category><![CDATA[Microchip]]></category>
		<category><![CDATA[MPLAB]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Programador]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[Virtual Box]]></category>
		<category><![CDATA[Virtualización]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=677</guid>
		<description><![CDATA[Una de las grandes desventajas de migrar a un sistema operativo basado en GNU/Linux es que resulta muy difícil utilizar el hardware que estamos acostumbrados a usar sin problemas desde  windows, por ejemplo: puede ocurrir que no existe el software o drivers necesarios o bien que no hay un equivalente  para linux. En algunos de [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las grandes desventajas de migrar a un sistema operativo basado en GNU/Linux es que resulta muy difícil utilizar el hardware que estamos acostumbrados a usar sin problemas desde  windows, por ejemplo: puede ocurrir que no existe el software o drivers necesarios o bien que no hay un equivalente  para linux. En algunos de estos casos se suele recurrir a software adicional que emula el API de windows como el conocidísimo wine. Sin embargo siempre podemos encontramos con que wine tiene demasiados problemas o directamente no funciona con la combinación de hardware/software que queremos usar. En mi caso, lo que mas extraño  es MPLAB, mi depurador ICD2 de microchip y mi programador universal USB chino que constantemente uso cuando trabajo en proyectos basados en microcontroladores. Aunque existe pikLAB, que es una alternativa a MPLAB, el soporte para algunos micros y para el depurador ICD2 esta todavía en etapas de desarrollo.</p>
<div id="attachment_883" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2010/01/ICD2_debugger.jpg"><img class="size-medium wp-image-883" title="ICD2_debugger" src="http://tech-freaks.net/wp-content/uploads/2010/01/ICD2_debugger-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Depurador en circuito ICD2 de Microchip</p></div>
<p>Afortunadamente, la virtualización viene a salvarnos en estos casos y usando un software (bastante conocido) llamado VirtualBox, es posible instalar bajo linux (S.O host), otro sistema operativo huésped (guest) como Windows XP o Windows 7 y hacer uso de (casi) todos los recursos de hardware del sistema anfitrión. Esto incluye los dispositivos USB, dispositivos de almacenamiento, de red, etc.</p>
<p><span id="more-677"></span></p>
<h2>Requerimientos.</h2>
<ul>
<li>Bajarse la versión <a href="http://www.virtualbox.org/" target="_blank">NO LIBRE de VirtualBox</a>, ya que la versión OSE, aún no tiene soporte para dispositivos USB.</li>
<li>Copia y licencia del sistema operativo Windows que vamos a instalar en la máquina virtual.</li>
<li>Espacio en disco suficiente para la instalación del Sistema Operativo Huesped, dentro de la partición de linux que estemos usando.</li>
<li>Contar con una instalación de alguna distribución de GNU/Linux. En este caso estoy usando Ubuntu 9.10, aunque en debian el proceso será similar.</li>
<li>Algunas otras cosas que probablemente se me olvidan.</li>
</ul>
<h2>Instalación del VirtualBox.</h2>
<p>Podemos instalar el VirtualBox descargando y usando el paquete DEB que se encuentra en la página oficial de VirtualBox, o bien añadiendo el repositorio de VirtualBox a los origenes de software del gestor de paquetes. Para añadir el repositorio tecleamos en la terminal el comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">nano</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apt<span style="color: #000000; font-weight: bold;">/</span>sources.list</pre></div></div>

<p>Ya que estemos en nano añadimos la linea correspondiente a nuestra distribución de ubuntu, ya sea ubuntu 9.04  o 9.10:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">deb http:<span style="color: #000000; font-weight: bold;">//</span>download.virtualbox.org<span style="color: #000000; font-weight: bold;">/</span>virtualbox<span style="color: #000000; font-weight: bold;">/</span>debian karmic non-free
deb http:<span style="color: #000000; font-weight: bold;">//</span>download.virtualbox.org<span style="color: #000000; font-weight: bold;">/</span>virtualbox<span style="color: #000000; font-weight: bold;">/</span>debian jaunty non-free</pre></div></div>

<p>Una vez que editamos el archivo, salimos  de nano con Ctrl+X y guardamos los cambios. Finalmente descargamos y añadimos la clave publica de sun para apt-secure:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-q</span> http:<span style="color: #000000; font-weight: bold;">//</span>download.virtualbox.org<span style="color: #000000; font-weight: bold;">/</span>virtualbox<span style="color: #000000; font-weight: bold;">/</span>debian<span style="color: #000000; font-weight: bold;">/</span>sun_vbox.asc <span style="color: #660033;">-O-</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-key</span> add -</pre></div></div>

<p>Una vez que ejecutemos estos comandos, podemos proceder a realizar la instalación del software, como hariamos con cualquier aplicación:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> virtualbox-<span style="color: #000000;">3.1</span></pre></div></div>

<p>Después de reiniciar la PC o de cerrar y volver a abrir la sesión, debemos tener un lanzador de VirtualBox en el menú Herramientas del Sistema&gt;VirtualBox. Si optamos por descargar el paquete manualmente desde la página web, hay que usar el siguiente comando para realizar el proceso de &#8220;desempaquetado&#8221; e instalación.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">dpkg</span> <span style="color: #660033;">-i</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>ruta<span style="color: #000000; font-weight: bold;">/</span>del<span style="color: #000000; font-weight: bold;">/</span>paquete<span style="color: #000000; font-weight: bold;">/</span>virtualbox-<span style="color: #000000;">3.1</span>_3.1.2-<span style="color: #000000;">56127</span>_Ubuntu_karmic_i386.deb</pre></div></div>

<h2>Preparando la máquina virtual.</h2>
<p>Hay que crear una máquina virtual para instalar el sistema operativo, para lo cual virtualbox incluye un asistente que nos ayudará a asignar el espacio en disco duro, memoria y algunas otras opciones del hardware. En este momento podemos decidir el tamaño que tendrá el disco duro virtual en el que se alojará el sistema operativo huésped y los programas que instalemos. Al momento de crear el disco duro, conviene crearlo con tamaño suficiente para que podamos instalar todas las aplicaciones que tengamos contempladas y además escoger el tipo dinámico; esto permitirá que usemos de manera más eficiente el espacio en disco. En la siguiente imagen se puede apreciar mejor el proceso completo de la creación de la máquina virtual y el disco duro.</p>
<div id="attachment_857" class="wp-caption alignnone" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2010/01/pasos.jpg"><img class="size-medium wp-image-857" title="pasos" src="http://tech-freaks.net/wp-content/uploads/2010/01/pasos-300x149.jpg" alt="Pasos para la creación de una máquina virtual" width="300" height="149" /></a><p class="wp-caption-text">Pasos para la creación de una máquina virtual</p></div>
<h2>Instalación de Windows en la máquina virtual.</h2>
<div id="attachment_862" class="wp-caption alignright" style="width: 160px"><a href="http://tech-freaks.net/wp-content/uploads/2010/01/drive_mount.jpg"><img class="size-thumbnail wp-image-862   " title="drive_mount" src="http://tech-freaks.net/wp-content/uploads/2010/01/drive_mount-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Permitir que virtual Box use la unidad DVD del host o especificar un ISO</p></div>
<p>La instalación de windows en la máquina virtual es similar a como la realizaríamos directamente sobre una computadora con el disco recién formateado, solo que en este caso podremos escuchar música y navegar por internet mientras se instala windows <img src='http://tech-freaks.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> &#8230; en dado caso la única diferencia es que hay que indicarle a Virtual Box que el sistema operativo huésped, podrá usar la unidad de DVD/CD del host antes de iniciar nuestra máquina recién creada, también deberíamos revisar el orden de los dispositivos desde los cuales va a arrancar la máquina virtual en la ventana de configuración de la máquina. Este es el procedimiento que seguí yo, por que mi laptop venía con un disco de recuperación en el que SOLAMENTE viene el sistema operativo Windows XP (gracias al cielo no trae el montón de porquería que los fabricantes acostumbran incluir pre-instalada en los equipos nuevos ni los drivers específicos para mi PC). Yo NO recomendaría usar un disco que instale por defecto drivers para el hardware especifico de nuestra pc, por que aunque sean los drivers correspondientes al hardware de la máquina, hay que recordar que el S.O huésped, no correrá directamente en el hardware del equipo, sino más bien sobre hardware virtual.</p>
<div id="attachment_863" class="wp-caption alignright" style="width: 160px"><a href="http://tech-freaks.net/wp-content/uploads/2010/01/boot_devices.jpg"><img class="size-thumbnail wp-image-863 " title="boot_devices" src="http://tech-freaks.net/wp-content/uploads/2010/01/boot_devices-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Verificar que la unidad de DVD este seleccionada como dispositivo para arrancar (booteable)</p></div>
<p>Si no se cuenta con un disco como el que tengo, hay muchos lugares en internet donde pueden conseguirse copias de windows, sin embargo la temática aquí no es como conseguirlo, así que eso queda de tarea. En dado caso podríamos tener una imagen en ISO del sistema operativo y siempre esta la opción de montarla para que la máquina virtual la vea como un disco insertado físicamente en la unidad. Después solo queda encender nuestra máquina virtual y ver como bootea desde CD para iniciar la instalación del S.O. huésped, en este caso el procedimiento depende del disco que estemos usando y normalmente bastará con seguir las instrucciones que nos vayan dando. Llegado este punto puedes poner un poco de música y seguir leyendo los pasos siguientes mientras se copia el sistema operativo nuevo.</p>
<div id="attachment_867" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2010/01/copying_files.jpg"><img class="size-medium wp-image-867 " title="copying_files" src="http://tech-freaks.net/wp-content/uploads/2010/01/copying_files-300x215.jpg" alt="Copiando archivos de Windows" width="300" height="215" /></a><p class="wp-caption-text">Copiando archivos de Windows desde mi disco de restauración</p></div>
<p>En cuanto termine la instalación del sistema operativo deberíamos poder acceder a este y comenzar la instalación del software o a ponerlo a punto y a nuestro gusto. Resulta conveniente instalar inmediatamente las aplicaciones virtualbox guest aditions  en el sistema huesped, ya que estas nos permitirán compartir carpetas entre el sistema operativo huesped y el host. Además de proveer una mejor integración de ambos sistemas, como lo es la detección de resolución automática de la ventana de virtualbox y el modo fluido.</p>
<div id="attachment_869" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2010/01/modo_fluido.png"><img class="size-medium wp-image-869" title="modo_fluido" src="http://tech-freaks.net/wp-content/uploads/2010/01/modo_fluido-300x187.png" alt="" width="300" height="187" /></a><p class="wp-caption-text">Aspecto del área de trabajo de ubuntu con el modo fluido de Virtual Box</p></div>
<h2>Configuración de USB.</h2>
<p>Hay que realizar algunos pasos de configuración una vez que tenemos el VB instalado en nuestro sistema operativo host, por ejemplo decirle que dispositivos USB podrán ser utilizados por el sistema operativo huésped. Para esto, hacemos click en configuración en la ventana principal del Virtual Box, mientras este seleccionada nuestra máquina virtual de Windows XP. Luego nos movemos al apartado de USB. Lo anterior se resume en la siguiente captura de pantalla.</p>
<p><a href="http://tech-freaks.net/wp-content/uploads/2009/11/vboxart01.png"><img class="alignnone size-medium wp-image-684" title="vboxart01" src="http://tech-freaks.net/wp-content/uploads/2009/11/vboxart01-300x187.png" alt="vboxart01" width="300" height="187" /></a></p>
<p>Una vez que damos de alta el MPLAB ICD2 en la ventana de dispositivos USB, iniciamos nuestra máquina virtual e inmediatamente Windows deberá avisarnos que se ha detectado un nuevo hardware y nos pedirá que tomemos acciones para instalar el driver del ICD2. A partir de este momento la instalación debería ser identica a como se realizaría en una máquina con windows XP.</p>
<h2>Conclusión.</h2>
<p>Podría parecer que tener dos sistemas operativos corriendo al mismo tiempo es algo redundante, sin embargo hay veces que no podemos prescindir de la funcionalidad de algunas aplicaciones escritas exclusivamente para Windows. Por otra parte la potencia, rendimiento, flexibilidad y seguridad de linux hace que cada vez se posicione como una alternativa más sólida frente a lo que estamos acostumbrados a ver en windows, basta mencionar librerías como GTK+ o el interprete de python para darse cuenta de la calidad del software y justificar la instalación de un sistema linux, sin mencionar muchas otras aplicaciones y servicios de excelente calidad que windows no puede ofrecer de manera gratuita o con la misma estabilidad y confiabilidad.</p>
<p>Desgraciadamente , la mayoría de las empresas deciden realizar el software para sus productos exclusivamente para windows, lo que hace que estemos atados al sistemas operativo de microsoft, aún así, usando Virtual Box, es posible instalar y usar dentro de linux algunos programas y/o hardware que no funcionaría bajo linux de ninguna otra forma (si no  tienen soporte en Wine, por ejemplo) esto nos ofrece la flexibilidad de trabajar con programas de ambos o con hardware diseñado para windows, sin la necesidad de suspender nuestro trabajo en linux para reiniciar la PC , como sería el caso para sistemas dual boot.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=677</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amplificador miniatura de 20 W x 2</title>
		<link>http://tech-freaks.net/?p=756</link>
		<comments>http://tech-freaks.net/?p=756#comments</comments>
		<pubDate>Tue, 17 Nov 2009 21:45:13 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Proyectos Interesantes]]></category>
		<category><![CDATA[Amplificadores]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Clase D]]></category>
		<category><![CDATA[Estereo]]></category>
		<category><![CDATA[I2C]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=756</guid>
		<description><![CDATA[se trata de un amplificador de audio estereofónico clase D en un chip QFN de 7 x 7 x 0.8 mm y capaz de desarrollar 20 W por canal con una carga de 4 ohms y con una distorsión harmónica total (THD) de 10% todo esto a 12 volts y sin necesidad de disipador de calor.]]></description>
			<content:encoded><![CDATA[<p>He recibido el boletín electrónico de la ṕagina de Manolo (micropic.es) y he visto algo que me deja impresionado, se trata de un amplificador de audio estereofónico clase D en un chip QFN de 7 x 7 x 0.8 mm y capaz de desarrollar 20 W por canal con una carga de 4 ohms y con una distorsión armónica total (THD) de 10% todo esto a 12 volts y sin necesidad de disipador de calor. ¡Bastante impresionante!, sobre todo cuando uno se acostumbra a esos circuitos integrados que requieren disipadores, un montón de componentes externos y hasta fuentes simétricas para producir como máximo 8 watts.</p>
<div id="attachment_757" class="wp-caption alignnone" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2009/11/audiomax.jpg"><img class="size-medium wp-image-757" title="audiomax" src="http://tech-freaks.net/wp-content/uploads/2009/11/audiomax-300x225.jpg" alt="Amplificador de audio construido por Manolo (http://www.micropic.es)" width="300" height="225" /></a><p class="wp-caption-text">Amplificador de audio construido por Manolo </p></div>
<p>Además incluye control de volumen por bus I2C o analógico, modo de silencio, y un montón de funciones y características destacables más. Vale la pena tenerlo en consideración para futuros proyectos.</p>
<p><span id="more-756"></span>Enlaces:</p>
<ul>
<li><a href="http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5178" target="_blank">Página del fabricante.</a></li>
<li><a href="http://www.micropic.es/index.php?option=com_content&amp;task=view&amp;id=87&amp;Itemid=1">Diagrama esquemático del amplificador de la foto.</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=756</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Midiendo temperatura MAX6675</title>
		<link>http://tech-freaks.net/?p=582</link>
		<comments>http://tech-freaks.net/?p=582#comments</comments>
		<pubDate>Wed, 11 Nov 2009 20:40:32 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Experimentos]]></category>
		<category><![CDATA[Microcontroladores PIC]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ADC]]></category>
		<category><![CDATA[FreeRTOS]]></category>
		<category><![CDATA[MAX6675]]></category>
		<category><![CDATA[Microcontroladores]]></category>
		<category><![CDATA[PIC24F]]></category>
		<category><![CDATA[SPI]]></category>
		<category><![CDATA[Temperatura]]></category>
		<category><![CDATA[Termopar]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=582</guid>
		<description><![CDATA[El circuito integrado MAX6675 de Maxim/Dallas Semiconductor es un convertidor analógico a digital para termopares tipo K. Bueno, la verdad es que este circuito tras su apariencia inocente con un encapsulado SOIC de 8 pines, esconde mucho más que un ADC y nos ahorrará bastante espacio al momento de diseñar un circuito impreso. En esta entrada encontrarás un ejemplo de como utilice este chip.]]></description>
			<content:encoded><![CDATA[<p>El circuito integrado MAX6675 de Maxim/Dallas Semiconductor es un convertidor analógico a digital para <a href="http://es.wikipedia.org/wiki/Termopar" target="_blank">termopares</a> tipo K. Bueno, la verdad es que este circuito tras su apariencia inocente con un encapsulado SOIC de 8 pines, esconde mucho más que un ADC y nos ahorrará bastante espacio al momento de diseñar un circuito impreso.</p>
<div id="attachment_635" class="wp-caption alignnone" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2009/10/max6675_pic.jpg"><img class="size-medium wp-image-635" title="max6675_pic" src="http://tech-freaks.net/wp-content/uploads/2009/10/max6675_pic-300x200.jpg" alt="MAX6675 junto a otros componentes" width="300" height="200" /></a><p class="wp-caption-text">MAX6675 junto a otros componentes</p></div>
<p>Dentro de este pequeño circuito se encuentra la electrónica necesaria para amplificar, compensar y convertir a digital el voltaje generado por el termopar, lo que hace muy sencilla la tarea de conectar un termopar a un microcontrolador. El único &#8220;pero&#8221; es que este circuito solo se consigue en <a href="http://es.wikipedia.org/wiki/Tecnolog%C3%ADa_de_montaje_superficial#Encapsulados" target="_blank">encapsulado SOIC</a>, por lo que no es tan fácil usarlo en el protoboard y hará falta adquirir o fabricar un adaptador para poder experimentar.</p>
<p><span id="more-582"></span></p>
<p>Existen muchos sensores de temperatura en el mercado, sin embargo las soluciones basadas en silicio, como el LM35 por citar un ejemplo que sea familiar, están normalmente limitados a un rango  de temperatura por debajo de los 150 grados centígrados. Lo que los deja fuera de consideración cuando debemos monitorear algún proceso con temperaturas superiores, afortunadamente los termopares vienen a salvar el día, permitiéndonos  mediciones en un rango más amplio, usualmente  de varias centenas de grados centígrados y sin un costo excesivo.</p>
<h2>Características del MAX6675.</h2>
<p>Hay algunas características importantes que se deben tomar en cuenta antes de usar este circuito, a continuación las más importantes:</p>
<ul>
<li><a href="http://es.wikipedia.org/wiki/Serial_Peripheral_Interface" target="_blank">Interfaz compatible con SPI</a> solo de lectura.</li>
<li>Resolución de 12 bits, 0.25 grados centígrados.</li>
<li>Medición hasta 1024 grados centígrados.</li>
<li>Alimentación de 3.3 a 5 volts.</li>
<li>Frecuencia de reloj SPI máxima Fscl 4.3 Mhz.</li>
<li>Tiempo de conversión 0.17 s máximo 0.22 segundos.</li>
<li>Consumo máximo de 1.5 mA.</li>
</ul>
<p>Existen más, pero creo que aquí esta lo más importante, para más detalles habrá que consultar la hoja de datos que proporciona el fabricante.</p>
<div id="attachment_596" class="wp-caption alignnone" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2009/10/max6675_estructura.jpg"><img class="size-medium wp-image-596" title="max6675_estructura" src="http://tech-freaks.net/wp-content/uploads/2009/10/max6675_estructura-300x233.jpg" alt="Estructura del MAX6675, tomado de la hoja de datos" width="300" height="233" /></a><p class="wp-caption-text">Estructura del MAX6675, tomado de la hoja de datos</p></div>
<h2>Formato de Salida.</h2>
<p>El MAX6675 se conecta con un microcontrolador mediante una interfaz de 3 lineas compatible con el estándar SPI. El formato en el que el MAX6675 envía datos al microcontrolador es el siguiente.</p>
<p><a href="http://tech-freaks.net/wp-content/uploads/2009/10/max6675_spi.JPG"><img class="size-full wp-image-584 alignnone" title="max6675_spi" src="http://tech-freaks.net/wp-content/uploads/2009/10/max6675_spi.JPG" alt="max6675_spi" width="448" height="65" /></a></p>
<p>Como se puede observar, además de la palabra digital correspondiente a la temperatura tenemos un bit que nos indica si el termopar esta abierto (desconectado o roto, por ejemplo) que podemos usar para tomar acciones correctivas o informativas en el software, como disparar una alarma o mostrar un aviso. También hay una buena cantidad de bits que no tienen significado.</p>
<h2>Software de ejemplo.</h2>
<p>Para este ejemplo estaré usando un microcontrolador PIC24, ya que he venido trabajando los últimos meses con estos microcontroladores. Usaremos el módulo SPI con interrupciones del microcontrolador para comunicarnos con el MAX6675. El software que escribí, usa colas (queues) de <a href="http://www.freertos.org/" target="_blank">FreeRTOS</a> para gestionar la entrada de datos por el módulo SPI al que esta conectado el MAX6675 (<a href="http://en.wikipedia.org/wiki/Interrupt" target="_blank">I/O de datos por interrupcion</a>), sin embargo las funciones de colas e incluso las funciones asociadas a la interrupción pueden descartarse y simplemente usar la técnica de <a href="http://en.wikipedia.org/wiki/Polling_(computer_science)" target="_blank">bit polling</a> para esperar hasta que el módulo SPI termine la transferencia, por lo tanto puede usarse este código como base para usar el MAX6675 con cualquier otro microcontrolador sin importar nuestras preferencias o requisitos de programación.</p>
<div id="attachment_960" class="wp-caption aligncenter" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2009/11/TEK0003.jpg"><img class="size-medium wp-image-960" title="TEK0003" src="http://tech-freaks.net/wp-content/uploads/2009/11/TEK0003-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">El modulo SPI queda configurado para funcionar como lo especifica la hoja de datos del MAX6675</p></div>
<p><strong>Inicializar módulo SPI:</strong> Afortunadamente el MAX6675 no requiere de ninguna inicialización, por lo tanto lo único que hace esta función es cargar los valores iniciales en los registros del módulo SPI del PIC y también se lleva a cabo la inicialización de la cola de FreeRTOS con la que se comunicará el MAX con la aplicación. Esta cola actúa mas bien como un semáforo, por que solo tiene capacidad para almacenar un elemento. Cuando la ISR del módulo SPI recoge el valor leído y lo coloca en la cola, la tarea (task) que estaba esperando el dato puede continuar con su ejecución.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> iThermocoupleInitialize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>	<span style="color: #666666; font-style: italic;">// Setup SPI module for MAX6675 operation</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Prepare RTOS resources</span>
	xThrmcplQueue <span style="color: #339933;">=</span> xQueueCreate<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> xThrmcplQueue <span style="color: #339933;">==</span> NULL <span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">return</span> E_THERMOCOUPLE_FAIL<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Initialize MAX6675 chip select PORT and TRIS registers</span>
	CONFIG_THERMOCOUPLE_CS1_PORT <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	CONFIG_THERMOCOUPLE_CS2_PORT <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	CONFIG_THERMOCOUPLE_CS1_TRIS <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	CONFIG_THERMOCOUPLE_CS2_TRIS <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// SPI1 module configuration</span>
	SPI1CON1 <span style="color: #339933;">=</span> <span style="color: #208080;">0x043A</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Primary prescaler 2:1, secondary 4:1. SPI operating at 2 Mhz @ 16 MIPS</span>
	SPI1CON2 <span style="color: #339933;">=</span> <span style="color: #208080;">0x0000</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// No framed SPI support</span>
	SPI1STAT <span style="color: #339933;">=</span> <span style="color: #208080;">0X0000</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Clear SPI status flags</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Interrupt configuration</span>
	IFS0bits.<span style="color: #202020;">SPI1IF</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 	<span style="color: #666666; font-style: italic;">// Clear interrupt flag</span>
	IEC0bits.<span style="color: #202020;">SPI1IE</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> 	<span style="color: #666666; font-style: italic;">// Enable SPI interrupt</span>
	SPI1STATbits.<span style="color: #202020;">SPIEN</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// Enable SPI module</span>
&nbsp;
	<span style="color: #b1b100;">return</span> E_THERMOCOUPLE_OK<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Leyendo el resultado:</strong> Si observamos el formato de salida del MAX6675 veremos que los datos transmitidos tienen una buena cantidad de bits de relleno o sin significado, por lo que hay que eliminarlos antes de que el resultado pueda usarse para convertirse a grados centígrados. La función en C que escribí para leer el termopar retorna un unsigned int que corresponde al valor leído desde el MAX6675, NO a la temperatura en grados centígrados.  Existe otra función para leer el termopar que además hacer lo mismo que la siguiente función también puede reportarnos si el termopar esta abierto (ver los archivos de codigo fuente).</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> iThermocoupleRead<span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">enum</span> eThermocoupleInputs eThermocouple <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> iTempBuffer <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// ADD HERE CHIP SELECT PINS TO DRIVE MORE MAX6675 CHIPS</span>
	<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span> eThermocouple <span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">case</span> E_TC1<span style="color: #339933;">:</span>
			CONFIG_THERMOCOUPLE_CS1_PORT <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> E_TC2<span style="color: #339933;">:</span>
			CONFIG_THERMOCOUPLE_CS2_PORT <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
			<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	asm<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;nop&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	asm<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;nop&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// Wait for CS to stabilize, 100 nS min( view timing diagrams )</span>
	SPI1BUF <span style="color: #339933;">=</span> <span style="color: #208080;">0xAAAA</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Transmit dummy byte to start reception</span>
&nbsp;
	xQueueReceive<span style="color: #009900;">&#40;</span> xThrmcplQueue<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>iTempBuffer<span style="color: #339933;">,</span> portMAX_DELAY <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// The calling task is blocked until the thermocouple reading is received</span>
	iTempBuffer <span style="color: #339933;">&amp;=</span> <span style="color: #208080;">0x7FF8</span><span style="color: #339933;">;</span>				<span style="color: #666666; font-style: italic;">// apply mask to leave valid data only</span>
	iTempBuffer <span style="color: #339933;">=</span> iTempBuffer <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// align data</span>
	<span style="color: #b1b100;">return</span> iTempBuffer<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Rutina de interrupción:</strong> En la rutina de interrupción del modulo SPI se realiza la lectura del registro correspondiente al buffer de recepción y se envía la palabra leída a través de la cola para que sea procesada por el código de la aplicación.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">static</span> <span style="color: #993333;">void</span> prvThermocoupleISR<span style="color: #009900;">&#40;</span> portBASE_TYPE <span style="color: #339933;">*</span> pxTaskWoken <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> iTempBuffer <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	iTempBuffer <span style="color: #339933;">=</span> SPI1BUF<span style="color: #339933;">;</span>
	xQueueSendToBackFromISR<span style="color: #009900;">&#40;</span> xThrmcplQueue<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>iTempBuffer<span style="color: #339933;">,</span> pxTaskWoken <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// Send received word to the queue</span>
	<span style="color: #666666; font-style: italic;">// ADD HERE CHIP SELECT PINS TO DRIVE MORE MAX6675 CHIPS</span>
	CONFIG_THERMOCOUPLE_CS1_PORT <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// Release chip select lines</span>
	CONFIG_THERMOCOUPLE_CS2_PORT <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
	IFS0bits.<span style="color: #202020;">SPI1IF</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Clear module interrupt flag</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> __attribute__<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>interrupt<span style="color: #339933;">,</span> auto_psv<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> _SPI1Interrupt <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	portBASE_TYPE xTaskWoken <span style="color: #339933;">=</span> pdFALSE<span style="color: #339933;">;</span>
	prvThermocoupleISR<span style="color: #009900;">&#40;</span> <span style="color: #339933;">&amp;</span> xTaskWoken <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> xTaskWoken <span style="color: #339933;">!=</span> pdFALSE <span style="color: #009900;">&#41;</span>		<span style="color: #666666; font-style: italic;">// Check if interrupt caused a task to wake</span>
		taskYIELD <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// Force Context Switch</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como se puede ver realizar la medición de temperatura es bastante fácil, ni siquiera hay que preocuparse demasiado de los detalles de la conversión A/D. Lo único que se debe tomar en cuenta es que al MAX6675 le toma alrededor de 220 milisegundos como máximo completar una conversión, por lo que como máximo debemos leer el valor de la temperatura unas 4 o 5 veces por segundo. Esto será más que suficiente para la mayoría de las aplicaciones. Hay que recordar que al llamar a la función iThermocoupleIsOpen() equivale a leer la temperatura y por lo tanto además del bit de termopar abierto, vamos a leer la ultima conversión de temperatura que realizo el integrado con su reloj interno. Voy a citar la hoja de datos del integrado:</p>
<blockquote><p>Force CS low and apply a clock signal at SCK to read the results at SO. Forcing CS low immediately stops any conversion process. Initiate a new conversion process by forcing CS high.</p></blockquote>
<p>Por lo tanto, si llamamos a la función iThermocoupleIsOpen() e inmediatamente después llamamos a iThermocoupleRead() cualquier proceso de conversión que el MAX pudiera estar realizando entre las llamadas a dichas funciones se detendrá y las dos funciones leerán el mismo valor de temperatura, que es el correspondiente a la última conversión que se pudo completar (aunque la función iThermocoupleIsOpen no toma en cuenta el valor de temperatura, aún así tiene que leerlo). En resumen&#8230; hay que respetar el ciclo de CS para el MAX6675 y permitirle 220 milisegundos entre lecturas, de lo contrario hay que estar consientes de lo que esperamos leer:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> iDiagnosticThermocouple<span style="color: #009900;">&#40;</span> xHardwareResources xHardware<span style="color: #339933;">,</span> <span style="color: #993333;">void</span> <span style="color: #339933;">*</span> pvActionParams <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">char</span> cBuffer<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">17</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">// Holds the string to be printed to the LCD</span>
&nbsp;
	vLcdDriverCommand<span style="color: #009900;">&#40;</span> lcdCLEAR<span style="color: #339933;">,</span> xHardware<span style="color: #339933;">-&gt;</span>xLcdDisplay <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Clear LCD display</span>
	<span style="color: #b1b100;">do</span>
	<span style="color: #009900;">&#123;</span>
		vLcdDriverCommand<span style="color: #009900;">&#40;</span> lcdHOME<span style="color: #339933;">,</span> xHardware<span style="color: #339933;">-&gt;</span>xLcdDisplay <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// move pointer/cursor to address 0</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> iThermocoupleIsOpen<span style="color: #009900;">&#40;</span> E_TC1 <span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> E_THERMOCOUPLE_OK <span style="color: #009900;">&#41;</span>		<span style="color: #666666; font-style: italic;">// check if thermocouple is open</span>
			vHelpersAltSprintf<span style="color: #009900;">&#40;</span> cBuffer<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Probe 1: %03u%cC&quot;</span><span style="color: #339933;">,</span> iThermocoupleRead<span style="color: #009900;">&#40;</span> E_TC1 <span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xDF</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// If not, read and display the current temperature</span>
		<span style="color: #b1b100;">else</span>
			vHelpersAltSprintf<span style="color: #009900;">&#40;</span> cBuffer<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Probe 1: Open&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Display thermocouple open</span>
		vLcdDriverPutStr<span style="color: #009900;">&#40;</span> cBuffer<span style="color: #339933;">,</span> xHardware<span style="color: #339933;">-&gt;</span>xLcdDisplay <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// Print line to LCD</span>
		vTaskDelay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> xKeypadGetEvent<span style="color: #009900;">&#40;</span> xHardware<span style="color: #339933;">-&gt;</span>xKeypad<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> pdFALSE <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como se puede ver en mi función de diagnostico, se llama a las dos funciones iThermocoupleIsOpen() y iThermocoupleRead() sin ningún retardo entre ellas, por lo tanto, el valor del campo temperature reading será el mismo en ambas lecturas, sin embargo, verán que respeto el tiempo mínimo de conversión cuando espero valores válidos, manteniendo la linea CS en alto por mas de 220 mS (de hecho tiene un retardo de 500 mS). Podría hacerse en definitiva de muchas otras formas, pero esta es la que implemente yo.</p>
<h2>Otras consideraciones.</h2>
<p>Hay que recordar que el termopar opera con voltajes muy bajos que son amplificados. He notado que las mediciones son bastante sensibles a la interferencia de otros aparatos, por ejemplo, sucede que al acercar el cable de una fuente de poder conmutada de una laptop (que es de dudosa calidad y al parecer mal filtrada) la medición que realiza el MAX6675 muestra valores irreales y me causo un poco de problemas al principio, antes de darme cuenta del problema. En la hoja de datos menciona algunos consejos para mejorar la estabilidad de las mediciones entre las que se encuentran colocar capacitores bypass cerca de los pines de alimentación del MAX6675 y proveer un plano de masa adecuado en el circuito impreso.</p>
<p>Por otra parte quedan pendientes las consideraciones sobre la linealidad del termopar, que requiere más procesamiento de la lectura como la implementación de tablas de búsqueda o solucionar ecuaciones polinomiales de grado superior, consumiendo más recursos del microcontrolador. Afortunadamente el termopar tipo K tiene una respuesta cercana a la lineal y permite una buena aproximación con el programa tal como esta, sin embargo para aplicaciones que requieren mayor precisión o un mayor rango, no podemos saltarnos este paso. Para más información se pueden revisar algunas notas de aplicación de Microchip Technology.</p>
<ul>
<li><a href="http://ww1.microchip.com/downloads/en/AppNotes/00679a.pdf" target="_blank">Temperature Sensing Technologies</a></li>
<li><a href="http://ww1.microchip.com/downloads/en/AppNotes/00844a.pdf" target="_blank">Simplified Thermocouple Interfaces &amp; PICmicro MCUs</a></li>
</ul>
<p>Finalmente agradecer a la gente de Maxim/Dallas Semiconductor por las muestras del MAX6675.</p>
<h2>Descarga de los archivos para el termopar.</h2>
<p>Aquí tienes los archivos de código fuente en C que contienen todas las funciones necesarias para leer el termopar. Hay que recordar que el ejemplo NO compila directamente ya que depende de FreeRTOS y otros modulos que yo hice. Por otra parte, si ya tienes un proyecto con FreeRTOS deberá ser fácil agregar estos módulos para permitir mediciones de temperatura usando un termopar + PIC24F o dsPIC.</p>
<a class="downloadlink" href="http://tech-freaks.net/wp-content/plugins/download-monitor/download.php?id=6" title="Versión1.0 descargado 54 veces" >Driver MAX6675 FreeRTOS (54)</a>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 2862px; width: 1px; height: 1px;">

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">E_TC1</pre></div></div>

</div>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=582</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>México: Mi muy partícular punto de vista</title>
		<link>http://tech-freaks.net/?p=649</link>
		<comments>http://tech-freaks.net/?p=649#comments</comments>
		<pubDate>Fri, 16 Oct 2009 16:14:11 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Offtopic]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[CFE]]></category>
		<category><![CDATA[Economía]]></category>
		<category><![CDATA[Felipe Calderón]]></category>
		<category><![CDATA[Impuestos]]></category>
		<category><![CDATA[Luz y Fuerza]]></category>
		<category><![CDATA[México]]></category>
		<category><![CDATA[Política]]></category>
		<category><![CDATA[SME]]></category>
		<category><![CDATA[Sociedad]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=649</guid>
		<description><![CDATA[Los últimos meses han sido bastante duros para la sociedad mexicana, hemos visto de todo y hemos vivido momentos bastante difíciles, sobre todo en lo referente al acontecer de la política del país. Lo más preocupante desde mi punto de vista es que parece que no vamos hacia la solución de los problemas de la [...]]]></description>
			<content:encoded><![CDATA[<p>Los últimos meses han sido bastante duros para la sociedad mexicana, hemos visto de todo y hemos vivido momentos bastante difíciles, sobre todo en lo referente al acontecer de la política del país. Lo más preocupante desde mi punto de vista es que parece que no vamos hacia la solución de los problemas de la sociedad mexicana, más bien todo lo contrario. Y es que en vez de que todos estemos unidos y busquemos como mejorar la <em>calidad de vida y sobre todo la competitividad del país</em> (un reto bastante grande), cada vez es más notoria la separación de la sociedad, por una parte hay quienes piensan que las acciones del actual gobierno son acertadas, mientras que en el bando contrario hay gente que, creo yo, con justa razón se opone al <em>gobierno ineficiente</em> y a las acciones que no ofrecen suficientes argumentos lógicos para realizarse como lo es el aumento de los impuestos previstos por el nuevo paquete económico propuesto por el gobierno.</p>
<p>Y es que resulta bastante conveniente para las autoridades tomar la salida fácil y cargar el peso de la crisis, pero<em> sobre todo del mal gobierno que hemos tenido durante años</em>, a la clase trabajadora, por que finalmente somos nosotros los más afectados con estas medidas, que  en mi opinión, difícilmente funcionarán como una solución a largo plazo para los problemas que aquejan al país. Producidos en su mayoría por una mafia de saqueadores que solo han visto por sus intereses personales, cuyas raíces vienen desde hace años, desde los gobiernos priistas  y que, según veo esta tan arraigada que tomará aún unos cuantos años más en disolverse ya que tiene continuidad en los gobiernos panistas.</p>
<p><span id="more-649"></span>Vivimos en un país en el que desgraciadamente se reprime  hostiga y limita con la burocracia, extorsión, trámites, impuestos y demás  a los profesionistas o emprendedores que quieren desarrollar conceptos nuevos, innovar y ganarse la vida de manera honrada mientras que de forma discreta o bien descaradamente se permite aquello que es chueco, bajo el agua, corrupto o ilícito o que esta en el límite de serlo. Vivimos en un país en el que resulta más fácil para los políticos cargarle la mano a la gente que trabaja, se gana la vida en negocios honestos, paga impuestos y paradógicamente también paga los sueldos de aquellos que supuestamente deberían velar por los intereses del país, mientras que otra minoría que se dedica al comercio informal, a la piratería y al contrabando, viven sin preocupación y para ellos es como si no existiera la ley ni los impuestos. Vivimos en un país en el que se beneficia con fueros a políticos y funcionarios corruptos, en el que el monopolio de los <strong><em>medios televisivos, manipula y esconde la información a su conveniencia</em></strong> o de acuerdo a los <em>intereses de la clase política</em>, donde en vez de invertir en educación de calidad para convertirnos en un país competitivo, se <a href="http://www.eluniversal.com.mx/notas/632256.html" target="_blank">reducen los presupuestos orientados a la educación</a>&#8230; y es que justamente un pueblo ignorante es más fácil de manipular. Donde no hay control sobre como, cuando y con quien se invierte el dinero de los contribuyentes y por lo tanto no hay quien controle y pida cuentas claras al gobierno.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/irZNsFFGkWI&amp;hl=es&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/irZNsFFGkWI&amp;hl=es&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Y justamente ahora que estamos en medio de una crisis económica se le ocurre al presidente liquidar a todos los trabajadores de la paraestatal Luz y Fuerza del centro sin antes proponer una solución alternativa al conflicto y de paso acabar, de manera estratégica, con uno de los sindicatos más fuertes de México: el SME, para luego poder libremente cerrar la compañía, con el argumento de que la empresa esta quebrada. Yo me pregunto por que las empresas nunca prosperan cuando son dependencias del estado: ¿Por que Telmex paso de ser una compañía inviable a ser una de las empresas más productivas?, ¿Por que gente que aquí vive en la pobreza emigra a otro país y encuentra una forma digna de vida? ¿Por que tienen que venir empresas extranjeras a beneficiarse con nuestro trabajo y aumentar la riqueza de sus países mientras nosotros nos empobrecemos y somos menos competitivos?&#8230; <em>¿No será a caso que lo más ineficiente, voraz e insustentable en este país es la corrupción del propio gobierno?</em></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/RTixp_bhPx4&#038;hl=es_MX&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/RTixp_bhPx4&#038;hl=es_MX&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Si bien es cierto y me consta (por que incluso he tenido problemas de cobros excesivos y cortes de servicio) que el servicio, administración y trato al cliente de la compañia Luz y Fuerza no es el mejor, hay que ser objetivos y reconocer que tampoco lo es el de ciertas empresas que pasaron o son iniciativa privada, como Telmex, muchos bancos, aseguradoras y otras tantas compañías privadas que operan en el país, también con empleados despotas y corruptos y que no hay quien les ponga un alto. O incluso la misma CFE (que por azares del destino esta a cargo de  <a href="http://www.esmas.com/noticierostelevisa/biografias/307460.html" target="_blank">Alfredo Elías Ayub</a>) empresa de cuyos servicios he escuchado bastantes quejas por parte de quienes viven en provincia y que supuestamente suplantará a Luz y Fuerza. No puedo explicarme como hay gente que se alegre de ver esta situación y que se atreva hasta a felicitar al presidente, cuando un gran número de gente posiblemente pase a formar parte del creciente grupo de desempleados, pero sobre todo lo que más debería preocuparnos, las posibles consecuencias  a largo plazo: que sea un intento de privatizar la energía eléctrica.</p>
<p>Según mi punto de vista <em>no hay nada que festejar</em>, a menos que te guste ver a los demás en la incertidumbre y ver como los gobernantes dividen cada vez más a la sociedad para llevar a cabo sus objetivos, en este caso culpando a los trabajadores de Luz y Fuerza de la situación de la compañía, a través de una campaña en los medios de comunicación. Todos deberíamos tener una actitud más prudente al respecto. Aquí tienen un ejemplo de lo que comento: es una cita de los comentarios de una de las entradas de la página web del diario &#8221;El Universal&#8221;:</p>
<blockquote><p>Y llego el festejo por partida doble NOS VAMOS AL MUNDIAL y DESAPARECEN EL NIDO DE PRANGANAS ,EBRIOS,GORRONES, EXTORSIONADORES Y ME PUEDO SEGUIR TODO MI DOMINGO ESCRIBIENDO PERO PREFIERO FESTEJAR JAJAJAJA por engolosinados se hubieran preocupado por dar un buen servicio verdad tomadores de lectura jajaja y cajeras apaticas jajajaj a BUSCARLE PAPA</p></blockquote>
<p>Comentarios como este nos dan una idea de la pobreza mental que también aqueja al país, carajo, este tipo cree que absolutamente todos los que trabajan en el SME y Luz y Fuerza quedan englobados en su lista de adjetivos, y que se merecen lo que esta pasando, típica mentalidad del mexicano. Se nos olvida que la mayor responsabilidad la tienen los directivos y jefes de la empresa y sobre todo los gobiernos que los han colocado en esos puestos y que han pasado sin hacer nada para eficientar la compañía (al contrario, han hecho todo lo posible por jodernos más), así como los líderes sindicales que no previeron la necesidad de adaptarse y mejorar para cuidar la fuente de empleo de sus trabajadores y siendo honestos, también hay algunos empleados ineficientes y corruptos que dan mala fama a la compañía.</p>
<p>En resumen, es exactamente lo mismo que con los impuestos: El gobierno y los líderes no reconocen su responsabilidad y el &#8221;presidente del empleo&#8221; se limita a liquidar la compañía y dejar desempleados a los que se queden fuera del grupo de los 10,000 que serán recontratados (si es que esto sucede) ¿Y si el plan de nuestro presidente para hacer viable la compañía fracasa que pasará con ella? ¿A caso se venderá al mejor postor  o será que el plan es privatizarla poco a poco al fusionarla con CFE?</p>
<p>Si el presidente quisiera acabar con organismos ineficientes y corruptos (como lo es LyF y el SME, supuestamente) debería tal vez empezar a ver otras instituciones como el sindicato de maestros con Elba Esther Gordillo como su líder ¿No creen? o también con los sindicatos de PEMEX y el Instituto Mexicano del Seguro Social&#8230; pero seamos realistas, si esto pasara con el régimen actual, a donde va a parar el dinero que se ahorre (a mediano o largo plazo) quitándoles a los trabajadores de Luz y Fuerza sus &#8216;&#8217;sueldazos&#8221; y  su &#8221;disparatada&#8221; prestación de no pagar luz y además dejando a 30,000 o más personas sin empleo&#8230; ¿Servirá este dinero para pagar las pensiones millonarias de nuestros ex-presidentes?, ¿Para pagar los gastos de campaña ridículos de los partidos políticos?, ¿para pagar los restaurantes de lujo de los funcionarios del <a href="http://eleconomista.com.mx/notas-online/politica/2009/02/25/ganar-333000-mes-no-inmoral-ife" target="_blank">IFE</a> y sus muchos otros <a href="http://www.informador.com.mx/mexico/2009/144195/6/cesar-nava-llama-a-reducir-financiamiento-al-ife.htm" target="_blank">despilfarros</a>? o ¿para pagar los sueldos millonarios de los diputados y senadores? &#8230; ¿pasará lo de siempre e irá a dar a las arcas de los políticos?</p>
<p>En muchos aspectos la decisión del presidente parece bastante criticable por que no se consideran muchos aspectos, entre ellos las consecuencias sociales de este movimiento, el impacto que tendrá sobre CFE absorber a 10,000 trabajadores más,  el desempleo y el posible impacto en la calidad del servicio, en fin, seguramente es difícil contemplar todo lo que implica el acontecimiento que estamos viviendo. Habrá que ver las siguientes acciones del presidente sobre otros organismos con fama de ineficientes y veremos si la acción contra LyF fue digna de respeto y admiración como dicen algunos, ya que es el comienzo de un verdadero cambio (mmmm&#8230;. ¿Será?) o por el contrario, son acciones reprobables con fines políticos y con intereses personales de por medio&#8230;  solo el tiempo lo dirá. En cuanto a Luz y Fuerza, ahora se ven las consecuencias del exceso de confianza y el hecho de que algunos trabajadores se escudaron en su sindicato para dar un mal servicio (pésimo si se quiere) además de fomentar y esconder la corrupción, la ineficiencia y los excesos en todos sus niveles lo cual  terminó con la desmoralización de la empresa y desvanece, casi por completo, cualquier esperanza de apoyo que la sociedad pudiera brindarles a los trabajadores de LyF. En cualquier caso, lástima por las personas que laboraban allí honestamente y hoy se ven envueltas en el conflicto en los medios y la incertidumbre de quedar desempleados.</p>
<p>En fin, como siempre me gustaría saber su opinión al respecto y les recomiento leer: <a href="http://www.eluniversal.com.mx/graficos/pdf09/tresmiradas.pdf" target="_blank"></a></p>
<ul>
<li><a href="http://www.eluniversal.com.mx/graficos/pdf09/tresmiradas.pdf" target="_blank">El universal: PDF  Tres miradas de la situación de LyF</a></li>
<li><a href="http://www.cnee-sur.net/Boletin%2003%20CNEE%20Metro%20Ago%2003-09.pdf" target="_blank">Bolietin del més de agosto del <span lang="ES-MX">Comité Nacional de Estudios de la Energía (CNEE)</span></a></li>
<li>Y sobre todo el blog titulado &#8221;Asaltando la red&#8221; en donde tenemos una buena<a href="http://alcieloporasalto.blogspot.com/" target="_blank"> fuente de información sobre del entorno de Luz y fuerza</a> en los últimos años.</li>
</ul>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 411px; width: 1px; height: 1px;">UNIVERSAL &#8220;PDF Tres miradas de la situación de LyFC</div>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=649</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atacado rápido de Circuitos Impresos</title>
		<link>http://tech-freaks.net/?p=639</link>
		<comments>http://tech-freaks.net/?p=639#comments</comments>
		<pubDate>Fri, 09 Oct 2009 18:16:03 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Proyectos Interesantes]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Atacado]]></category>
		<category><![CDATA[Casera]]></category>
		<category><![CDATA[Cicuitos Impresos]]></category>
		<category><![CDATA[Fabricación]]></category>
		<category><![CDATA[PCB]]></category>
		<category><![CDATA[Prototipo]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=639</guid>
		<description><![CDATA[Se trata de un método para atacado de PCBs que me pareció interesante además de poco convencional. Según este método puede atacarse un circuito en un par de minutos, a diferencia de los 10 o más que se requieren si se deja la placa reposando en cloruro férrico, además de que es mucho más simple y barato que los tanques especiales para este fin.]]></description>
			<content:encoded><![CDATA[<p>Todos los que nos dedicamos a la electrónica ya sea por hobby o como profesión sabemos que realizar PCBs de forma <a href="http://tech-freaks.net/wp-content/uploads/2009/10/atacado.jpg"><img class="size-medium wp-image-641 alignright" style="margin: 10px;" title="atacado" src="http://tech-freaks.net/wp-content/uploads/2009/10/atacado-277x300.jpg" alt="atacado" width="222" height="240" /></a>casera requiere de bastante tiempo para transferir el diseño a la PCB, atacar y perforar los circuitos. Bueno pues supuestamente (digo supuestamente por que no lo he probado, pero seguramente lo haré) ahora podremos ahorrar un tiempo importante en el proceso de atacado quimico.</p>
<p>Mientras navegaba por la red me encontré con un método para atacado de PCBs que me pareció interesante además de poco convencional. Según este método puede atacarse un circuito en un par de minutos, a diferencia de los 10 o más que se requieren si se deja la placa reposando en cloruro férrico, además de que es mucho más simple y barato que fabricar o comprar los <a href="http://zedomax.com/blog/2008/06/16/diy-how-to-make-an-etching-tank-with-aquarium-pump-and-heater/" target="_blank">tanques especiales </a>para este fin.</p>
<p>Pulsa en leer más para ver los enlaces a las instrucciones.</p>
<p><span id="more-639"></span>En instructables hay instrucciones en ingles para el método de &#8220;Atacado por contacto&#8221;, aunque si no se te da eso de leer cosas en inglés las fotografías explican muy bien el proceso. Por otra parte esta este enlace de una tienda, que vende productos para fabricar circuitos impresos, que explica los distintos métodos de atacado, también en inglés.</p>
<p><a href="http://www.instructables.com/id/Sponge-Ferric-Chloride-Method-Etch-Circuit-Bo/" target="_blank">http://www.instructables.com/id/Sponge-Ferric-Chloride-Method-Etch-Circuit-Bo/</a></p>
<p><a href="http://www.pulsarprofx.com/PCBfx/main_site/pages/tech_support/no_etching_tank/no_etching_tank.html" target="_blank">http://www.pulsarprofx.com/PCBfx/main_site/pages/tech_support/no_etching_tank/no_etching_tank.html</a></p>
<p>Si alguien lo prueba me gustaría que me contaran como les fue.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=639</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Control de Servo (Joystick + PC + Arduino)</title>
		<link>http://tech-freaks.net/?p=589</link>
		<comments>http://tech-freaks.net/?p=589#comments</comments>
		<pubDate>Sat, 03 Oct 2009 18:59:37 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Microcontroladores AVR]]></category>
		<category><![CDATA[ATMEGA]]></category>
		<category><![CDATA[Atmel]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[Joystick]]></category>
		<category><![CDATA[Motor]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[RC]]></category>
		<category><![CDATA[Servo]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=589</guid>
		<description><![CDATA[Se trata de un desarrollo basado en arduino y una pc con un interprete de python. Consiste en el control de un servo RC mediante un joystick, usando la placa arduino como intermediario, el interprete de python en la PC se encarga de leer los movimientos del joystick, usando la librería pyGame, para luego enviarlos vía serial al arduino.]]></description>
			<content:encoded><![CDATA[<p>Esta vez les cuento sobre otro proyecto con esta popular plataforma basada en chips de Atmel. Se trata de un desarrollo basado en arduino y una pc con un interprete de python. Consiste en el control de un servo RC mediante un joystick, usando la placa arduino como intermediario, el interprete de python en la PC se encarga de leer los movimientos del joystick, usando la librería pyGame, para luego enviarlos vía serial al arduino.</p>
<div id="attachment_599" class="wp-caption alignnone" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2009/10/arduino_servo.jpg"><img class="size-medium wp-image-599" title="arduino_servo" src="http://tech-freaks.net/wp-content/uploads/2009/10/arduino_servo-300x212.jpg" alt="Servo RC controlado con joystick" width="300" height="212" /></a><p class="wp-caption-text">Servo RC controlado con joystick</p></div>
<p>El vídeo a continuación lo he tomado de la página del proyecto. Me parece una forma interesante de comenzar con la programación en python a la vez que se logra comunicación con hardware.</p>
<p><span id="more-589"></span>El proyecto esta basado en las librerías pySerial y pyGame, en la página del autor se encuentra el código fuente (sketch) para el arduino y el script de python, ambos necesarios para construir una réplica del proyecto.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="380" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://blip.tv/play/wkeilE+HtUY" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="380" height="300" src="http://blip.tv/play/wkeilE+HtUY" allowfullscreen="true"></embed></object></p>
<p>Enlace a la página del proyecto: <a href="http://principialabs.com/joystick-control-of-a-servo/">http://principialabs.com/joystick-control-of-a-servo/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=589</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phDuino: Medidor de pH con Arduino</title>
		<link>http://tech-freaks.net/?p=571</link>
		<comments>http://tech-freaks.net/?p=571#comments</comments>
		<pubDate>Wed, 30 Sep 2009 17:34:43 +0000</pubDate>
		<dc:creator>Rubén</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Microcontroladores AVR]]></category>
		<category><![CDATA[Proyectos Interesantes]]></category>
		<category><![CDATA[Analogico]]></category>
		<category><![CDATA[ATMEGA]]></category>
		<category><![CDATA[Atmel]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[Medidor]]></category>
		<category><![CDATA[Microcontroladores]]></category>
		<category><![CDATA[pH]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://tech-freaks.net/?p=571</guid>
		<description><![CDATA[Este interesante proyecto nos muestra como medir el potencial de hidrógeno de una solución usando la placa de arduino y un circuito analógico especialmente diseñado.]]></description>
			<content:encoded><![CDATA[<p>El <a href="http://es.wikipedia.org/wiki/PH" target="_blank">pH</a> es una magnitud que nos indica la acidez o basicidad de una solución. Es de suma importancia conocer dicha magnitud en algunos procesos como la fermentación de vino y cerveza, monitoreo de ríos y lagos, o incluso para la gente que se dedica seriamente al hobby de la acuariofilia. Este interesante proyecto nos muestra como medir el potencial de hidrógeno de una solución usando la placa de arduino y un circuito analógico especialmente diseñado.</p>
<div id="attachment_572" class="wp-caption alignnone" style="width: 310px"><a href="http://tech-freaks.net/wp-content/uploads/2009/09/phduino.JPG"><img class="size-medium wp-image-572" title="phduino" src="http://tech-freaks.net/wp-content/uploads/2009/09/phduino-300x225.jpg" alt="Arduino con la placa Shield para medir pH" width="300" height="225" /></a><p class="wp-caption-text">Arduino con la placa shield para medir pH</p></div>
<p>Puede ser útil para aquellos que estén buscando un circuito para monitorear/controlar algún proceso químico. Según el autor, puede no ser tan preciso como un instrumento comercial, pero tiene la ventaja de ser completamente programable y además como se trata de un arduino, se tiene disponible la interfaz USB.</p>
<p>Sin duda un proyecto bastante interesante y que se publica de manera abierta para que todos podamos replicarlo, tienes los enlaces a continuación.</p>
<p>Página del proyecto:<a href="http://code.google.com/p/phduino/" target="_blank"> http://code.google.com/p/phduino/</a></p>
<p>Vía: <a href="http://hackaday.com/2009/09/01/arduino-ph-meter/" target="_blank">Hack a Day </a></p>
]]></content:encoded>
			<wfw:commentRss>http://tech-freaks.net/?feed=rss2&amp;p=571</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
