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

<channel>
	<title>jhuss blog &#187; 2007 &#187; Setiembre</title>
	<atom:link href="http://jhuss.com/2007/09/feed/" rel="self" type="application/rss+xml" />
	<link>http://jhuss.com</link>
	<description>...Un Mundo Libre por descubrir...</description>
	<pubDate>Thu, 03 Jul 2008 17:49:29 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Empezando con PICs</title>
		<link>http://jhuss.com/2007/09/11/empezando-con-pics/</link>
		<comments>http://jhuss.com/2007/09/11/empezando-con-pics/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 02:18:01 +0000</pubDate>
		<dc:creator>jhuss</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Software Libre]]></category>

		<category><![CDATA[T&eacute;cnico]]></category>

		<guid isPermaLink="false">http://jhuss.com/2007/09/11/empezando-con-pics/</guid>
		<description><![CDATA[Es un articulo del blog de NetAndTech que consegu&#237; en Internet, muy bueno, lo copio en mi blog con el mismo titulo, haciendo el respectivo trackback al post original
el post: http://netandtech.wordpress.com/hardware/empezando-con-pics
Consegu&#237; ese post porque ando buscando informaci&#243;n sobre ese mundo entre el hardware y el software, lo vi como un buen comienzo para mi, espero [...]]]></description>
			<content:encoded><![CDATA[<p>Es un articulo del blog de <a href="http://netandtech.wordpress.com/" target="_blank">NetAndTech</a> que consegu&iacute; en Internet, muy bueno, lo copio en mi blog con el mismo titulo, haciendo el respectivo trackback al post original</p>
<p>el post: <a href="http://netandtech.wordpress.com/hardware/empezando-con-pics" target="_blank">http://netandtech.wordpress.com/hardware/empezando-con-pics</a></p>
<p>Consegu&iacute; ese post porque ando buscando informaci&oacute;n sobre ese mundo entre el hardware y el software, lo vi como un buen comienzo para mi, espero que le sirva a otros <img src='http://jhuss.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>a continuaci&oacute;n el post:</p>
<p></p>
<h3>Empezando con Microcontroladores</h3>
<p>Antes de nada, quisiera explicar el motivo por el que escribo esta &#8220;documentaci&oacute;n&#8221;. Seguro que hay muchos escritos sobre microcontroladores en la Web. ¿Por qu&eacute; otro m&aacute;s? Bueno, este no quiere ser otro m&aacute;s. No pretendo crear un curso de microcontroladores, puesto que un curso debe abarcar una gran cantidad de datos generales, que yo no abarcar&eacute;. No. M&aacute;s bien, lo que pretendo es escribir una serie de &#8220;recetas&#8221; que me ayuden (a mi y a cualquiera que las necesite) cuando quiera recordar algo determinado: ICSP, conversi&oacute;n A/D, buses I2C, SPI, USART, etc. As&iacute; pues, estos documentos mayormente pretender subsanar la poca capacidad de almacenamiento de datos que tengo <img src='http://netandtech.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Como tambi&eacute;n pretendo que puedan ser &uacute;tiles para mucha gente (por que sino escribirlos aqu&iacute;), pues intentar&eacute; empezar por cosas sencillas y b&aacute;sicas, y hacerlo todo lo m&aacute;s comprensible posible. Una de las cosas que no har&eacute; ser&aacute; dar explicaciones extensas sobre temas relacionados. En su lugar, intentar&eacute; dejar recursos suficientes para los autodidactas que pretendan saber m&aacute;s.</p>
<p>En cuanto al &#8220;background&#8221; que deber&iacute;a tener todo aquel que quiera comprender esto, no soy muy exigente. Lo m&aacute;s importante es que le guste aprender y no se canse pronto: las cosas nunca salen a la primera. Eso es imprescindible. El que sepa algo de sistemas inform&aacute;ticos, programaci&oacute;n y electr&oacute;nica no viene nada mal, pero no es vital.</p>
<p>Ah, un peque&ntilde;o detalle m&aacute;s: ¿te puedo tutear? Excelente. <img src='http://netandtech.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Empecemos</h3>
<p>La pregunta del mill&oacute;n: ¿que es un microcontrolador? Pues b&aacute;sicamente un microcontrolador es un dispositivo electr&oacute;nico de peque&ntilde;o tama&ntilde;o capaz de realizar operaciones e interactuar con el entorno exterior para llevar a cabo una tarea. Generalmente son circuitos integrados (IC, Integrated Circuit) programables, es decir, el usuario puede decidir que labor va a desempe&ntilde;ar, codificando en alg&uacute;n lenguaje los pasos que debe dar.</p>
<p>Para entendernos, podemos hacer una analog&iacute;a con un PC. En un PC, a groso modo, tenemos diferentes dispositivos que desempe&ntilde;an diversas labores. Contamos con una Unidad Central de Proceso (CPU, Central Proccess Unit) que se encarga de los c&aacute;lculos, una unidad de almacenamiento para nuestros programas y/o datos personales y dispositivos perif&eacute;ricos para la interactuaci&oacute;n humana con el PC (HID, Human Interface Devices). En un microcontrolador podemos encontrar las mismas funcionalidades: contamos con una UCP para ejecutar nuestros programas, un espacio donde almacenarlos as&iacute; como nuestros datos, y una interfaz de comunicaci&oacute;n con el exterior.</p>
<p>Si quieres una definici&oacute;n m&aacute;s exacta y m&aacute;s extensa, as&iacute; como detalles sobre la arquitectura de un microcontrolador PIC, puedes irte al &#8220;datasheet&#8221; de cualquier PIC de microchip, disponibles en su p&aacute;gina web: <a href="http://www.microchip.com" target="_microchip">www.microchip.com</a> o a la entrada sobre <a href="http://es.wikipedia.org/wiki/Microcontrolador_PIC" target="_wikipedia">PIC&#8217;s</a> en la Wikipedia.</p>
<p>Existen muchos fabricantes de microcontroladores, as&iacute; como diversas arquitecturas e implementaciones. En general hablar&eacute; de una familia muy conocida y para la cual existen muchas herramientas: los PIC de microchip. Esto no quiere decir que deje de lado a los <a href="http://es.wikipedia.org/wiki/AVR" target="_wikipedia">AVR de Atmel</a> o a los preciosos <a href="http://es.wikipedia.org/wiki/ARM" target="_wikipedia">ARM</a>. ¡Ni que decir tiene! Hablaremos de ellos en otro momento.</p>
<p>Me gustan los PIC&#8217;s por diversas razones. En primer lugar, porque existen muchas herramientas para trabajar con ellos. En segundo lugar, porque existe una extensa documentaci&oacute;n al respecto, sobre todo los datasheets que ofrece el fabricante y los AN&#8217;s (Application Notes) que son muy interesantes. Tambi&eacute;n por que existen herramientas tanto hardware como software libres para programarlos, depurarlos, emularlos, etc. Otra cosa que me llama la atenci&oacute;n es su reducido precio. Y alguna otra raz&oacute;n personal que no recuerdo. <img src='http://netandtech.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Algunas notas sobre los PIC&#8217;s</h3>
<p>Los PIC&#8217;s componen una familia extensa de microcontroladores, cada uno con sus peculiaridades que ser&aacute;n comentadas cuando hablemos de ellos. Sin embargo, podemos citar caracter&iacute;sticas comunes a todos ellos. Por ejemplo, los PIC&#8217;s est&aacute;n dise&ntilde;ados siguiendo la arquitectura Harvard, en donde la memoria de datos est&aacute; separada de la de programa. Tambi&eacute;n son RISC (Reduced Instruction Set Computer), es decir, cuentan con un n&uacute;mero reducido de instrucciones, en concreto con unas 35 (depende del microcontrolador). Suelen tener una memoria <a href="http://es.wikipedia.org/wiki/Memoria_flash" target="_wikipedia">Flash</a> para programas y una <a href="http://es.wikipedia.org/wiki/EEPROM" target="_wikipedia">EEPROM</a> para datos. </p>
<h3>Entorno de trabajo</h3>
<p>Entremos en lo interesante. Para empezar vamos a dise&ntilde;ar un simple &#8220;proof of concept&#8221;, es decir, haremos un peque&ntilde;o programa que simplemente configurar&aacute; el PIC para que encienda y apague un <a href="http://es.wikipedia.org/wiki/LED" target="_wikipedia">LED</a> a la frecuencia de 1Hz (aprox.), lo compilaremos y lo grabaremos en el PIC elegido. Despu&eacute;s montaremos una <a href="http://es.wikipedia.org/wiki/Protoboard" target="_wikipedia">placa de prototipos</a> con el micro y todo lo necesario para que funcione. B&aacute;sicamente, estos son los ingredientes necesarios:</p>
<ol>
<li><b>PICmicro:</b> El microcontrolador que vamos a emplear. En este caso vamos a usar uno de gama media, el <a href="http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf" target="_microchip">PIC16F84A</a> (si no tienes este, para un ejemplo tan sencillo como este seguro que te vale cualquiera, pero has de tener en cuenta las diferencias entre ambos en todo momento). Es un micro sencillo, de 18 pines, con 68 bytes de RAM, 64 bytes de EEPROM (para datos) y 1KiB (Kilo-Information-Byte = 1024 bytes) para programas.
<p><a href='http://netandtech.files.wordpress.com/2007/01/micros.jpg' title='micros.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/micros.miniatura.jpg' alt='micros.jpg' /></a>
</li>
<li><b>Programador:</b> Necesitamos el hardware necesario para escribir el programa que hagamos en el PIC. Microchip ha dise&ntilde;ado diferentes programadores, que puedes conseguir de cualquier distribuidor o desde su Web, a un precio moderado. Desde luego, esa suele ser la mejor opci&oacute;n, pero hay m&aacute;s. Puedes por ejemplo, tomar el datasheet de uno de los modelos de Microchip, en el que te vienen los esquemas e incluso el <a href="http://es.wikipedia.org/wiki/Circuito_impreso" target="_wikipedia">PCB</a>, para hacerlo tu mismo. O puedes tomar alg&uacute;n programador libre de los que circulan por la red e implementarlo. Simplemente busca por <a href="http://www.google.es/search?hl=es&amp;q=PIC+programmer&amp;btnG=B%C3%BAsqueda&amp;meta=" target="_google">Pic programmer</a>. El que yo usar&eacute; ser&aacute; el PICSTART PLUS de Microchip, pero el PicKit 2 funciona bastante bien y no es tan caro. Busca informaci&oacute;n si tienes dudas.
<p><a href='http://netandtech.files.wordpress.com/2007/01/picstart.jpg' title='picstart.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/picstart.miniatura.jpg' alt='picstart.jpg' /></a>
</li>
<li><b>ProtoBoard:</b> Necesitamos un sitio donde ensamblar los componentes. Una placa de prototipos sencilla nos vendr&aacute; de perlas, junto con el set de jumpers adecuado (puedes usar un trozo de cable UTP de pares trenzados). No cuesta mucho en las tiendas de electr&oacute;nica. Si no tienes una, va a ser dif&iacute;cil hacer las pruebas, porque tendr&aacute;s que ingeni&aacute;rtelas para conectar los componentes entre s&iacute; (sold&aacute;ndolos en una placa perforada por ejemplo).
<p><a href='http://netandtech.files.wordpress.com/2007/01/real_bb.jpg' title='real_bb.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/real_bb.miniatura.jpg' alt='real_bb.jpg' /></a>
</li>
<li><b>Componentes:</b> Este ejemplo es muy sencillo, por lo que el n&uacute;mero de componentes es muy reducido. Necesitamos:
<ol>
<li>1 Cristal de cuarzo de 4 MHz</li>
<li>2 Condensadores de entre 15 y 33 pF (yo los uso de 22 pF) </li>
<li>1 Resistencia de 1K (1KOhm) 0.25W</li>
<li>1 LED </li>
</ol>
<p><a href='http://netandtech.files.wordpress.com/2007/01/comps.jpg' title='comps.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/comps.miniatura.jpg' alt='comps.jpg' /></a>
</li>
<li><b>Herramientas:</b> B&aacute;sicamente una fuente de alimentaci&oacute;n estable de entre 2 y 5V de poca potencia (los PIC&#8217;s consumen muy poco): puedes usar 3 pilas de 1.5V, una fuente de alimentaci&oacute;n estabilizada regulable, etc. Adem&aacute;s te ser&iacute;a &uacute;til un pol&iacute;metro, unos alicates y unas pinzas.
</li>
<li><b>Software:</b> GNU/Linux. A ser posible Debian. Por mi parte, prefiero hacer las cosas con herramientas libres. Existen muchas utilidades libres disponibles. Si no tienes Debian pero si otro GNU/Linux, puedes buscar los binarios empaquetados para tu distribuci&oacute;n o las fuentes para compilarlas tu mismo. Si usas Debian, todas las herramientas est&aacute;n disponibles en los repositorios oficiales. Si no tienes GNU/Linux, lo siento por ti :-(. Tienes IDE&#8217;s de desarrollo disponibles, como el MPLAB de Microchip para Windows, o el IcProg, e incluso las gputils est&aacute;n portadas para Windows y Mac OS X,  pero yo no te puedo dar soporte para ninguna porque yo no uso Windows :-). Las herramientas son:
<ol>
<li><a href="http://gputils.sourceforge.net/" target="_gputils">GPUTILS</a></li>
<li><a href="http://www.dattalo.com/gnupic/gpsim.html" target="_gpsim">GPSIM</a></li>
<li><a href="http://home.pacbell.net/theposts/picmicro/" target="_picp">(G)PICP</a></li>
</ol>
<p>Cada una se explicar&aacute; en su momento. Algo que quiero rese&ntilde;ar es que todas estas herramientas se pueden englobar bajo <a href="http://www.gnupic.org/" target="_gnupic">GNUPIC</a>, en donde puedes encontrar muchos proyectos libres para trabajar con PICS, desde programadores (hardware y software), simuladores&#8230; hasta librer&iacute;as e IDE&#8217;s.</p>
<p>Si visitas la p&aacute;gina de GNUPIC ver&aacute;s que decantarse por un entorno de trabajo libre es una buena opci&oacute;n. Recuerda que siempre puedes instalarte GNU/Linux, pero de eso, hablaremos otro d&iacute;a :-).
</li>
</ol>
<h3>Antes de programar</h3>
<p>No podemos ponernos a programar el PIC sin antes saber que estamos haciendo. Nuestro objetivo es dotar al microcontrolador del conjunto de instrucciones que queremos que siga. Todas esas instrucciones pertenecen al juego de palabras que el microcontrolador entiende. El PIC es electr&oacute;nico y solo entiende datos en binario. Pero decirle los pasos que debe seguir en binario ser&iacute;a una labor herc&uacute;lea, as&iacute; que usamos un lenguaje mnemot&eacute;cnico m&aacute;s sencillo, que consta de unas 35 instrucciones. Estas instrucciones son at&oacute;micas, realizan labores individuales bien diferenciadas. Las iremos conociendo poco a poco.</p>
<p>Por otro lado, debemos saber que un PIC ejecuta las instrucciones de una forma secuencial, es decir, una detr&aacute;s de la otra (aunque gracias al pipeline, tenemos cierto solapamiento, pero eso de momento no nos incumbe). Eso no quiere decir que si escribimos 10 instrucciones, la n&uacute;mero 3 se ejecutar&aacute; antes que la 5. ¿Como? Es sencillo si tienes en cuenta que contamos con instrucciones que sirven para dar saltos. As&iacute; pues, podemos saber el flujo de ejecuci&oacute;n del programa de una forma relativamente sencilla. </p>
<p>Otra cosa importante a saber es que podemos referenciar posiciones de memoria espec&iacute;ficas, cosa muy &uacute;til a la hora de acceder a los &#8220;perif&eacute;ricos&#8221; del PIC, porque suelen ser accesibles como si fuesen posiciones de memoria. Un ejemplo claro de esto son los puertos del PIC. En un PIC, la manera m&aacute;s usual de comunicarse con el mundo exterior es por medio de los PUERTOS. Estos no son sino registros especiales que est&aacute;n mapeados con ciertos pines del integrado. Es decir, que podemos acceder a una posici&oacute;n de memoria (un registro realmente) en el que podemos leer el nivel de las se&ntilde;ales que entran en un conjunto de pines del circuito. Por ejemplo, podemos tener un puerto llamado PORTA, de 1 byte, es decir 8 bits. Cada uno de estos bits est&aacute; mapeado con una patita del CI. Por ello, si todas las patitas tienen un nivel l&oacute;gico bajo (es decir, un 0), cuando leamos el registro PORTA, leeremos &#8216;00000000&#8242;. En cambio, si todas tuviesen un nivel l&oacute;gico alto (es decir, un 1), leer&iacute;amos &#8216;11111111&#8242;, etc.</p>
<p>En este caso, cuando leemos el PORTA, estamos leyendo un registro, es decir, una celda de memoria que contiene un valor. Existen m&uacute;ltiples registros en un PIC, algunos de prop&oacute;sito espec&iacute;fico, como el PORTA, y otros de prop&oacute;sito general, que podemos usar para guardar lo que queramos. Existe un registro especial, llamado Working Register, o simplemente W, que cumple un cometido espec&iacute;fico. Podemos decir que nos sirve de comod&iacute;n para muchas instrucciones, y donde se guardan los resultados de muchas operaciones. Lo veremos con m&aacute;s profundidad un poco m&aacute;s adelante. </p>
<p>Por &uacute;ltimo, recomiendo encarecidamente que te leas el datasheet del PIC que vayas a usar, pues tiene mucha informaci&oacute;n muy bien explicada de todo el integrado. Ah&iacute; es donde vas a aprender muchas cosas interesantes que aqu&iacute; no voy a explicar. Particularmente, suele contener el juego completo de instrucciones, los bancos de registros, un diagrama de su ALU para ver el flujo de datos, as&iacute; como caracter&iacute;sticas espec&iacute;ficas de cada PIC. Para este ejemplo, nos ser&aacute; util tener el Pinout del PIC16f84A:</p>
<p><a href='http://netandtech.files.wordpress.com/2007/02/pic16f84-pinout.jpg' title='pic16f84-pinout.jpg'><img src='http://netandtech.files.wordpress.com/2007/02/pic16f84-pinout.miniatura.jpg' alt='pic16f84-pinout.jpg' /></a></p>
<h3>Primera aproximaci&oacute;n</h3>
<p>Todo esto se puede entender f&aacute;cilmente con un ejemplo. Vamos a escribir unas cuantas instrucciones y ver que es lo que hacen. Ver&aacute;s como son muy intuitivas y sencillas de recordar.</p>
<pre>
         movlw   240    ; Mueve el literal al registro W,
                        ; es decir, pone en W el valor 240.

         clrf    0x10   ; Pone a 0 el registro 0x10
         movwf   0x10   ; Pone el valor de W en el registro 0x10

         addwf   0x10,1 ; Suma el contenido de W con el del registro
                        ; 0x10 y lo deja en el mismo registro 0x10
</pre>
<p>Se puede observar que las instrucciones hacen cosas bien definidas. Simplemente manipulan datos o registros, o el flujo de ejecuci&oacute;n del programa, pero siempre de una manera controlable. Algo que todav&iacute;a no he comentado es la existencia de un registro especial, llamado STATUS, que almacena el estado del PIC. Cada uno de sus bits es una bandera sobre un hecho determinado. Por ejemplo, sabemos que si sumamos dos valores de 8 bits el resultado puede ser mayor de 8 bits. Si esto ocurre, se produce un overflow. En ese caso, se pone a 1 una bandera llamada C (de Carry, Acarreo). Veremos todas las banderas cuando las usemos.</p>
<p>Observemos m&aacute;s de cerca el PIC que vamos a usar. Es un integrado de 18 pines, como ya sabemos. Dos de ellos est&aacute;n destinados a la alimentaci&oacute;n, Vdd y Vss. Otros dos los podemos usar para la se&ntilde;al de reloj, que es una se&ntilde;al que marca el ritmo de trabajo del PIC. Estos son OSC1 y OSC2. El MCLR es el pin de RESET, que nos sirve para reiniciar el microcontrolador. Luego tenemos los pines de dos PUERTOS: A, de 5 bits (RA0-RA4) y B, de 8 bits (RB0-RB7). Veamos que podemos hacer con ellos :-).</p>
<h3>Codigo del ejemplo</h3>
<p>Bueno, nos vamos a dejar de teor&iacute;a y vamos a escribir el programa final. Intentar&eacute; explicarlo detenidamente, resaltando aquellas cosas que no hemos visto todav&iacute;a. El c&oacute;digo lo puedes escribir con tu editor de textos preferido, siempre y cuando lo guardes como texto plano no formateado. Yo te recomiendo <a href="http://www.gnu.org/software/emacs/emacs.html" target="_emacs">Emacs</a> (no solo para esto, sino para todo :-)). Todo lo que se escribe despues de un &#8220;punto y coma&#8221; (;), es un comentario y el compilador lo ignorar&aacute;.</p>
<pre>
;;; Ejemplo de programaci&oacute;n PIC
;;; Oscar Ace&ntilde;a (C) 2007

;;; Cambia el estado de RA0 con una
;;; frecuencia aproximada de 1 Hz.

	list	p=pic16f84   ; Le indica al compilador
			     ; que micro usar.
	include &lt;p16f84.inc&gt;    ; A&ntilde;ade las constantes a usar.

	;; Directiva de comfiguraci&oacute;n de micro
	__CONFIG _CP_OFF &amp; _WDT_OFF &amp; _XT_OSC

	org	0	     ; Direcci&oacute;n de memoria 0
	goto	main	     ; Salto a la etiqueta main.

	org	4	     ; Direcci&oacute;n de memoria 4
	retfie		     ; Retorna si re produce una excep.

TIME1 equ d'255'	     ; Constantes
TIME2 equ d'227'
TIME3 equ d'6'
REG1  equ 0x10
REG2  equ 0x11
REG3  equ 0x12

main:
	bsf	STATUS,RP0   ; Banco 1
	bcf	TRISA,0	     ; RA0 como salida
	bcf	STATUS,RP0   ; Banco 0

up:
	bsf	PORTA,0      ; RA0 a 1

	movlw	TIME3	     ; movemos el valor de TIME3
	movwf	REG3	     ; en el registro REG3
_up1:
	movlw	TIME2        ; movemos el valor de TIME2
	movwf	REG2	     ; en el registro REG2
_up2:
	movlw	TIME1	     ; movemos el valor de TIME1
	movwf	REG1	     ; en el registro REG1

	decfsz	REG1,F	     ; Decrementamos REG1 y volvemos aqui
	goto	$-1	     ; si el resultado no es cero.

	decfsz	REG2,F	     ; Decrementamos REG2 y volvemos aqui
	goto	_up2	     ; si el resultado no es cero.

	decfsz  REG3,F	     ; Decrementamos REG3 y volvemos aqui
	goto    _up1	     ; si el resultado no es cero.

down:	bcf	PORTA,0      ; Ponemos RA0 a 0

	movlw	TIME3        ; movemos el valor de TIME3
	movwf	REG3	     ; en el registro REG3
_down1:
	movlw	TIME2	     ; movemos el valor de TIME2
	movwf	REG2	     ; en el registro REG2
_down2:
	movlw	TIME1	     ; movemos el valor de TIME1
	movwf	REG1	     ; en el registro REG1

	decfsz	REG1,F	     ; Decrementamos REG1 y volvemos aqui
	goto	$-1	     ; si el resultado no es cero.

	decfsz	REG2,F	     ; Decrementamos REG2 y volvemos aqui
	goto	_down2	     ; si el resultado no es cero.

	decfsz	REG3,F	     ; Decrementamos REG3 y volvemos aqui
	goto	_down1	     ; si el resultado no es cero.

	goto	up           ; Volvemos a 'up'
	end		     ; Finaliza el codigo
</pre>
<p>Gu&aacute;rdalo con la extensi&oacute;n .asm, por ejemplo &#8216;test.asm&#8217;.</p>
<p>No te preocupes por el hecho de que sea mucho c&oacute;digo y de que no entiendas muchas cosas. Vamos poco a poco. En primer lugar, ignora si quieres todos los comentarios, solo sirven para aclarar un poco el c&oacute;digo. Quiz&aacute; sea un poco m&aacute;s limpio sin ellos.</p>
<p>Lo que debemos distinguir en toda esa lista de instrucciones son dos grandes grupos: las propias del microcontrolador y las que son para el compilador. El compilador es un software que b&aacute;sicamente traduce las instrucciones en ASM (es decir, lo que nosotros escribimos) a c&oacute;digo m&aacute;quina (es decir, lo que el PIC entiende). Para facilitarnos la tarea, el compilador acepta ciertas &oacute;rdenes. Por ejemplo, la primera de todas, &#8220;list	p=pic16f84&#8243;, le indica al compilador que queremos que compile el c&oacute;digo para un pic 16f84. </p>
<p>La seguna orden tambi&eacute;n es para el compilador: &#8220;include &lt;p16f84.inc&gt;&#8221;. Indica que se debe cargar un archivo llamado &#8216;p16f84.inc&#8217;, que se encuentra en la ruta predefinida del compilador. Este archivo contiene b&aacute;sicamente un conjunto de constantes para nuestro uso. Por ejemplo, cuando hacemos referencia a PORTA, lo que hacemos es usar una de esas constantes predefinidas. As&iacute; no tenemos que poner el valor n&uacute;merico, 0&#215;5. Si buscas ese fichero y lo abres, ver&aacute;s que contiene m&aacute;s instrucciones, del tipo &#8220;<i>NAME</i> EQU </i>VALOR</i>&#8220;. Eso nos hace ver que podemos dividir el c&oacute;digo de nuestros programas en diferentes archivos, o que podemos tener una biblioteca de funciones que podemos usar en muchos casos, pudiendo reutilizar el c&oacute;digo.</p>
<p>La tercera indica al programador como debe configurar el micro cuando se grabe el programa. Es una directiva de configuraci&oacute;n. En este caso, le indica que no debe activar la protecci&oacute;n de c&oacute;digo (una opci&oacute;n de seguridad que impide que cualquiera pueda leer el contenido de un microcontrolador), _CP_OFF; tambi&eacute;n que debe desactivar un perif&eacute;rico interno de protecci&oacute;n llamado WatchDog Timer, _WDT_OFF; y tambi&eacute;n le indica que como fuente de reloj vamos a usar un oscilador de cuarzo de tipo XT, __XT_OSC. Existen m&aacute;s opciones que veremos cuando sea necesario.</p>
<p>La siguiente directiva, &#8220;org 0&#8243;, le indica al programador que la pr&oacute;xima instrucci&oacute;n debe escribirla en la posici&oacute;n de memoria n&uacute;mero 0. La instrucci&oacute;n que escribir&aacute; ser&aacute; &#8220;goto main&#8221;. La instrucci&oacute;n &#8220;goto&#8221; hace lo que debe hacer: un salto, es decir, la pr&oacute;xima instrucci&oacute;n que ejecutar&aacute; ser&aacute; la que est&aacute; marcada por la etiqueta &#8216;main&#8217;. Una etiqueta es un nombre que se le pone a una direcci&oacute;n de memoria, por ejemplo main. En PIC asm, podemos poner etiquetas donde queramos, siempre y cuando vayan despu&eacute;s de un retorno de carro. Simplemente escribes el nombre y pones dos puntos, &#8220;main:&#8221;. </p>
<p>La siguiente instrucci&oacute;n nueva es &#8220;retfie&#8221;, que se escribir&aacute; en la posici&oacute;n 4 y no por capricho. En el pic, existe la posibilidad de que alg&uacute;n agente &#8220;externo&#8221; a la ejecuci&oacute;n del programa tenga prioridad y se le atienda a &eacute;l, utilizando un mecanismo llamado &#8220;interrupci&oacute;n&#8221;. Cuando se produce una interrupci&oacute;n, el 16f84 deja la instrucci&oacute;n que iba a ejecutar y se dirije a la posici&oacute;n 4, a ejecutar lo que all&iacute; haya hasta que se encuentre con la instrucci&oacute;n &#8220;retfie&#8221;, que le indica que debe volver a donde estaba. Contaremos m&aacute;s profundamente este mecanismo en otra entrega, por ahora nos vale entender que si se produce alguna interrupci&oacute;n, simplemente retorna sin hacer nada y sigue su curso el programa, por eso el &#8220;retfie&#8221;.</p>
<p>Las siguientes seis instrucciones son para el compilador. Simplemente se definen 6 constantes, usando el mecanismo antes mencionado: &#8220;<i>NOMBRE</i> EQU <i>VALOR</i>&#8220;. En adelante, cuando el compilador se encuentre con el <i>NOMBRE</i> lo sustituir&aacute; por su <i>VALOR</i>.</p>
<p>Lo siguiente, &#8220;main:&#8221;, es una etiqueta :-).</p>
<p>La pr&oacute;xima instrucci&oacute;n merece una peque&ntilde;a explicaci&oacute;n, pero breve. En el pic 16f84 existen, como sabes, diferentes registros. Lo que no sabes es que est&aacute;n distribuidos en diferentes conjuntos l&oacute;gicos, llamados bancos, de igual tama&ntilde;o. En el 16f84 hay 2 bancos. Por defecto, cuando hacemos referencia a un registro, como PORTA o 0&#215;5, el micro nos devolver&aacute; el registro en el banco 0, es decir el 0&#215;5 del banco 0. Si queremos que use otro banco, se lo debemos especificar. Esto lo hacemos poniendo a uno un bit en el registro de estado del sistema: RP0 en STATUS. Para ponerlo a uno, usamos la instrucci&oacute;n que pone a 1 un bit determinado: &#8220;bsf REG,BIT&#8221;, de Bit Set File (que no te confunda lo de File, hace referencia a un registro).</p>
<p>Lo siguiente, &#8220;bcf TRISA,0&#8243; hace lo contrario, pone a 0 un bit de un registro. En este caso, el registro es TRISA, que es el registro de configuraci&oacute;n del puerto A. Como los puertos en el PIC pueden servir de entrada/salida, debemos especificar si ser&aacute;n de entrada o de salida. Por defecto, est&aacute;n puestos como entrada (es decir, que si lees el registro TRISA leeras un 1 por cada patita). Como regla mnemot&eacute;cnica, podemos asimilar que un 1 implica Input mientras que un 0 indica Output. As&iacute; que ponemos como salida (0) el pin 0 del puerto A.</p>
<p>Volvemos a indicar que queremos usar el banco 0: &#8220;bcf STATUS,RP0&#8243;.</p>
<p>Bien, hasta aqu&iacute; todo era de configuraci&oacute;n. Ahora empezamos a hacer lo que de verdad quer&iacute;amos hacer. ¿Como podemos conseguir que ese pin de salida cambie cada segundo (aprox.)? Bueno, pues hay diversas maneras. La mejor de todas implica que explique conceptos sobre temporizadores e interrupciones as&iacute; como unas cuantas instrucciones m&aacute;s. La m&aacute;s sencilla de ver, pero sin duda la peor es la que vamos a usar. :-). As&iacute; solo tendremos que utilizar 3 instrucciones nuevas m&aacute;s.</p>
<p>El m&eacute;todo es sencillo. Como usamos un cristal de 4MHz, podr&iacute;amos deducir que cada instrucci&oacute;n se ejecuta en un tiempo de 1/4000000 s, o lo que es lo mismo, 250 ns (nanosegundos). Pero debido a ciertas mejoras para conseguir algo de procesamiento paralelo (m&aacute;s bien semi-solapado), tenemos que cada pulso de reloj, internamente, se divide entre 4. Por ello, realmente, el periodo de instrucci&oacute;n es de 1us (1 microsegundo). Para conseguir que cada segundo cambie un pin del IC, tenemos que contar 1.000.000 de instrucciones, y entonces cambiar. ¿Como? Pues lo que podr&iacute;amos hacer ser&iacute;a almacenar en un contador una cantidad, e ir restandole 1 hasta que se quede en 0. Bien, pero ¿que cantidad?. Debemos tener en cuenta que en el bucle principal, vamos a ejecutar 3 instrucciones de media: 1 para disminuir el contador, 2 para hacer el salto a la instrucci&oacute;n que disminuye (las instrucciones de salto suelen requerir dos ciclos). Por ello, necesitar&iacute;amos guardar 300.000 aprox. Pero eso, en binario ocupa m&aacute;s de 8 bits, que es el m&aacute;ximo que puede guardar un registro. Lo tenemos que dividir en etapas, 3 en este caso. Cada una almacena un valor y lo decrementa. Cuando una etapa termina, se decrementa el valor de otra y se inicia la primera de nuevo. Es un decremento en cascada. </p>
<p>Haciendo los c&aacute;luclos emp&iacute;ricamente, obtegno 255, 227 y 6 ya que 255*227*6*3 = 1041930, que es 1 segundo aproximado (con mucho error realmente, casi 42 ms, pero para el ejemplo nos basta. Si quieres refinar, cambia los n&uacute;meros). </p>
<p>As&iacute; que guardamos en tres registros (REG1, REG2, REG3) los valores 255, 227 y 6. Decrementamos consecutivamente REG1. Cuando llegue a cero, decrementamos REG2 en 1 y volvemos a poner 255 en REG1 y a decrementarlo. Cuando REG2 llegue a 0, decrementamos en 1 a REG3 y volvemos a iterar sobre REG1 y REG2. Cuando REG3 sea 0, ya podemos cambiar el estado del pin 0 del PORTA.</p>
<p>Creamos dos bucles id&eacute;nticos (aunque bien se podr&iacute;a reutilizar el mismo bucle), uno para encender el LED y otro para apagarlo, de forma que se ejecuta indefinidamente.</p>
<p>Las 3 instrucciones que faltan por explicar son:<br />
&#8220;movlw VAL&#8221;, que coloca en W el valor VAL (MOVe Literal to W)<br />
&#8220;movwf REG&#8221;, que mueve el valor de W al registro REG (MOVe W to File)<br />
&#8220;decfsz REG,POS&#8221; que decrementa el registro REG en uno, colocandolo en W o en F, dependiendo de POS, y si el resultado es 0, salta la siguiente instrucci&oacute;n (DECrement File and Skip if Zero).</p>
<p>La &uacute;ltima directiva, &#8220;end&#8221;, solo le indica al compilador que el c&oacute;digo ASM termina ah&iacute;.</p>
<h3>Compilando y programando</h3>
<p>Bueno, espero que no hayas tenido muchos problemas hasta aqu&iacute;. No es f&aacute;cil la primera aproximaci&oacute;n, pero seguro que te engancha :-).</p>
<p>El siguiente paso es compilar el c&oacute;digo. Algo muy sencillo gracias a los compiladores. Si tuvi&eacute;ramos que hacerlo a mano&#8230; <img src='http://netandtech.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>El compilador que usaremos es &#8220;gpasm&#8221;, para GNU/Linux. Viene dentro de las gputils (y adem&aacute;s est&aacute; empaquetado para Debian, por lo que instalarlo es sencill&iacute;simo). Para compilar nuestro ejemplo, s&oacute;lo tenemos que escribir:</p>
<pre>
$ gpasm test.asm
</pre>
<p>Si todo ha salido bien, obtendr&aacute;s tres archivos m&aacute;s: test.hex, test.cod y test.lst. Quiz&aacute; obtengas un mensaje como:</p>
<pre>
test.asm:28:Message [302] Register in operand not in bank 0. Ensure bank bits are correct.
</pre>
<p>No te preocupes, esta vez no es un error. Simplemente nos indica que estamos haciendo una operaci&oacute;n con un registro que est&aacute; en el banco 1. Es bueno saberlo, porque nos puede ahorrar m&aacute;s de un problema.</p>
<p>En cuanto a los ficheros que ha creado el compilador, &#8216;test.cod&#8217; es un fichero codificado que nos servir&aacute; m&aacute;s tarde para simular la ejecuci&oacute;n del programa. El &#8216;test.hex&#8217; es una versi&oacute;n compilada, en hexadecimal, del programa. Ser&aacute; la que cargaremos en el PIC. Por &uacute;ltimo, test.lst, que pr&aacute;cticamente es un mapa de memoria e informaci&oacute;n sobre la compilaci&oacute;n.</p>
<p>Para asegurarnos de que nuestro programa funciona como debiera, ser&iacute;a muy &uacute;til contar con alg&uacute;n mecanismo para simularlo directamente en nuestro PC. En este caso contamos con uno: gpsim. Gpsim posee una interfaz gr&aacute;fica, pero en la versi&oacute;n que hab&iacute;a cuando escrib&iacute; esto, surgen algunos problemas. La depuraci&oacute;n desde consola esta bastante lograda y permite usar funciones que no te permite la Gui. Para probar nuestro programa simplemente tecleamos:</p>
<pre>
$ gpsim -s test.cod
</pre>
<p>Se nos abrir&aacute;n varias ventanas. Una de ellas controla la ejecuci&oacute;n del programa. En otra podemos ver un mapa de los registros. Tambi&eacute;n podemos ver el codigo fuente, y el contador de programa, que es un puntero a la instrucci&oacute;n en ejecuci&oacute;n en ese momento. Otra cosa muy &uacute;til es el pinout, es decir, podemos ver el estado de los pines I/O del integrado: si est&aacute;n como entrada o salida y el nivel.</p>
<table border="0">
<tr>
<td><a href='http://netandtech.files.wordpress.com/2007/01/main.jpg' title='main.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/main.miniatura.jpg' alt='main.jpg' /></a></td>
<td><a href='http://netandtech.files.wordpress.com/2007/01/gpsim_bb.jpg' title='gpsim_bb.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/gpsim_bb.miniatura.jpg' alt='gpsim_bb.jpg' /></a></td>
<tr>
<td><a href='http://netandtech.files.wordpress.com/2007/01/src.jpg' title='src.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/src.miniatura.jpg' alt='src.jpg' /></a></td>
<td><a href='http://netandtech.files.wordpress.com/2007/01/ram.jpg' title='ram.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/ram.miniatura.jpg' alt='ram.jpg' /></a></td>
</tr>
</table>
<p>El interfaz es muy intuitivo. Podemos ejecutar el programa como si estuviera en un micro real, o ir paso a paso. Tambi&eacute;n podemos especificar la frecuencia del reloj, o establecer puntos de ruptura donde se parar&aacute; la ejecuci&oacute;n del programa. En fin, puedes hacer pruebas para comprobar que todo funciona.</p>
<p>Una vez que est&aacute;s convencido de que todo funciona correctamente, es hora de cargar el programa en el PIC. En primer lugar debes tener conectado el programador al PC. No importa si es usb o serie. Conectalo al pc e intenta verificar que el software te lo reconoce. Por ejemplo, si usas el PICSTART PLUS, puedes ejecutar esto:</p>
<pre>
$ picp /dev/ttyS0 -v
</pre>
<p>Si el programador est&aacute; conectado al ttyS0, te dir&aacute; versi&oacute;n del firmware. Si te dice que no est&aacute; conectado, aunque realmente lo est&aacute;, puede ser que sea un ttyS diferente. Si no dice nada, es que est&aacute; conectado, pero no reconoce el firmware que tiene (a mi me pasa si uso otro que no sea el PICSTART PLUS).</p>
<p>Si has comprobado que el programador est&aacute; bien conectado, inserta el PIC y carga el programa. En el caso del picp, lo hacemos as&iacute; (si usas otro, como el picprog, la p&aacute;gina del manual te puede ayudar sobre las opciones disponibles, &#8216;man picprog&#8217;)</p>
<pre>
$ picp /dev/ttyS0 16f84 -wp test.hex
</pre>
<p>Esto graba (la opcion -w) en la memoria de programa (la opcion &#8216;p&#8217;) el fichero hexadecimal test.hex, para un pic 16f84, usando un programador conectado al ttyS0.</p>
<p>No tardar&aacute; mucho. Una vez que lo hayas programado, puedes desconectar el programador y sacar el micro.</p>
<h3>Pruebas finales</h3>
<p>Ahora, lo que nos queda es probarlo en la placa de pruebas. El esquema del circuito que tenemos que hacer es muy sencillo. Lo primero es conectar el cristal a las patitas OSC1 y OSC2. A estas mismas patitas tenemos que conectar los dos condensadores de 22 pF uni&eacute;ndolos a GND. Conectamos Vss a GND y Vdd a una fuente de +5V. Adem&aacute;s tambi&eacute;n tenemos que conectar a +5V el MCLR, con una resistencia de 1K. Por &uacute;ltimo, conectamos un diodo LED a la patita RA0 y a GND con una resistencia de 1K.</p>
<p><a href='http://netandtech.files.wordpress.com/2007/01/esquema.png' title='esquema.png'><img src='http://netandtech.files.wordpress.com/2007/01/esquema.miniatura.png' alt='esquema.png' /></a></p>
<p>Listo. Si le metemos corriente, el LED deber&iacute;a parpadear a la frecuencia de 1Hz (aprox.).</p>
<table border="0">
<tr>
<td colspan="2"><a href='http://netandtech.files.wordpress.com/2007/01/montaje_all.jpg' title='montaje_all.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/montaje_all.miniatura.jpg' alt='montaje_all.jpg' /></a></td>
<tr>
<td><a href='http://netandtech.files.wordpress.com/2007/01/montaje_off.jpg' title='montaje_off.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/montaje_off.miniatura.jpg' alt='montaje_off.jpg' /></a></td>
<td><a href='http://netandtech.files.wordpress.com/2007/01/montaje_on.jpg' title='montaje_on.jpg'><img src='http://netandtech.files.wordpress.com/2007/01/montaje_on.miniatura.jpg' alt='montaje_on.jpg' /></a></td>
</tr>
</table>
<h3>Conclusi&oacute;n</h3>
<p>Con las herramientas actuales, programar microcontroladores PIC es muy sencillo, como has visto. El programa de ejemplo no esta optimizado, ya que es posible hacer esto mismo de forma m&aacute;s precisa y con menos c&oacute;digo, pero que implica conocer otros dispositivos del PIC que dejar&eacute; para m&aacute;s tarde.Pod&iacute;amos haber hecho un ejemplo m&aacute;s sencillo, como encender simplemente un LED, pero eso es algo demasiado f&aacute;cil como para que merezca la pena <img src='http://netandtech.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Espero que hayas disfrutado y comprendido todo. Si tienes dudas, primero busca documentaci&oacute;n y despu&eacute;s pregunta.</p>
<p>¡Ahh! Quiz&aacute; te interese la siguiente parte: <a href="http://netandtech.wordpress.com/hardware/un-segundo-con-el-pic/">un segundo con el PIC</a> donde se pretenden hacer las cosas un poco mejor&#8230; <img src='http://netandtech.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://jhuss.com/2007/09/11/empezando-con-pics/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gtk y ventanas transparentes</title>
		<link>http://jhuss.com/2007/09/11/gtk-y-ventanas-transparentes/</link>
		<comments>http://jhuss.com/2007/09/11/gtk-y-ventanas-transparentes/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 05:37:11 +0000</pubDate>
		<dc:creator>jhuss</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Software Libre]]></category>

		<category><![CDATA[T&eacute;cnico]]></category>

		<guid isPermaLink="false">http://jhuss.com/2007/09/11/gtk-y-ventanas-transparentes/</guid>
		<description><![CDATA[La pregunta surge en #unplug por willigulip, en la que dec&#237;a: ¿en gtk se pueden hacer ventanas transparentes?&#8221;
En verdad no me he preocupado por ese tipo de funciones en gtk, pero tenia la idea que se pod&#237;a hacer con cairo
Empece a buscar por Internet, y la verdad que hay poca informaci&#243;n sobre el tema, esta [...]]]></description>
			<content:encoded><![CDATA[<p>La pregunta surge en #unplug por <a href="http://willigulip.blogspot.com/" target="_blank">willigulip</a>, en la que dec&iacute;a: ¿en gtk se pueden hacer ventanas transparentes?&#8221;</p>
<p>En verdad no me he preocupado por ese tipo de funciones en gtk, pero tenia la idea que se pod&iacute;a hacer con <a href="http://cairographics.org/" target="_blank">cairo</a></p>
<p>Empece a buscar por Internet, y la verdad que hay poca informaci&oacute;n sobre el tema, esta muy dispersa.</p>
<p>Un ejemplo sencillo es el de sphinX, un script escrito en: <a href="http://www.pygtk.org/" target="_blank">pygtk</a> y <a href="http://cairographics.org/pycairo/" target="_blank">pycairo</a>.</p>
<p><a href="http://kanslozebagger.org/archives/65" target="_blank">SphinX</a> se encuentra en Kansloze Bagger</p>
<p>Para descargar: <a href="http://kanslozebagger.org/sphinX/sphinX-0.2.tar.bz2" target="_blank">sphinX-0.2.tar.bz2</a></p>
<p>Para ejecutarlo, despu&eacute;s de descomprimirlo, en una consola, ir al directorio donde lo extrajeron y escribir: <strong>python sphinX.py</strong><br />
<br />
<img src="http://kanslozebagger.org/wp-content/images/sphinX.png" alt="sphinX" /></p>
<p>Existe otro ejemplo mas elaborado, <a href="http://macslow.thepimp.net/?page_id=23" target="_blank">cairo-clock</a> de MacSlow&rsquo;s que utiliza <a href="http://www.gtk.org/" target="_blank">gtk+</a>, cairo y <a href="http://librsvg.sourceforge.net/" target="_blank">librsvg</a></p>
<p>En la pagina est&aacute;n disponible 2 v&iacute;deos de muestra:</p>
<p><a href="http://macslow.thepimp.net/clips/cairo-clock-smooth-1.ogg" target="_blank"><img src="http://macslow.thepimp.net/shots/small_cairo-clock-smooth-1_ogg.png" alt="cairo-clock-smooth-1" /></a><br />
<br />
<a href="http://macslow.thepimp.net/clips/cairo-clock-smooth-2.ogg" target="_blank"><img src="http://macslow.thepimp.net/shots/small_cairo-clock-smooth-2_ogg.png" alt="cairo-clock-smooth-2" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://jhuss.com/2007/09/11/gtk-y-ventanas-transparentes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mi Nueva Imagen</title>
		<link>http://jhuss.com/2007/09/11/mi-nueva-imagen/</link>
		<comments>http://jhuss.com/2007/09/11/mi-nueva-imagen/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 05:02:23 +0000</pubDate>
		<dc:creator>jhuss</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://jhuss.com/2007/09/11/mi-nueva-imagen/</guid>
		<description><![CDATA[He actualizado el tema de mi blog  
Bueno no mucho que contar, lo que buscaba era un tema con soporte para widgets
encontr&#233; un tema interesante llamado tarski que en el men&#250; de administrador tiene algunas opciones para cambiar algunos aspectos visuales, y ademas que se activa la opci&#243;n de widgets, en la que se [...]]]></description>
			<content:encoded><![CDATA[<p>He actualizado el tema de mi blog <img src='http://jhuss.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Bueno no mucho que contar, lo que buscaba era un tema con soporte para widgets</p>
<p>encontr&eacute; un tema interesante llamado <a href="http://tarskitheme.com/" target="_blank">tarski</a> que en el men&uacute; de administrador tiene algunas opciones para cambiar algunos aspectos visuales, y ademas que se activa la opci&oacute;n de widgets, en la que se puede personalizar la barra lateral, el orden en que se muestran, etc..</p>
<p>Ademas active el plugin de akismet para el spam, ya no es necesario el formulario math para controlar el spam</p>
]]></content:encoded>
			<wfw:commentRss>http://jhuss.com/2007/09/11/mi-nueva-imagen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>M&#250;sica Libre</title>
		<link>http://jhuss.com/2007/09/10/musica-libre/</link>
		<comments>http://jhuss.com/2007/09/10/musica-libre/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 14:49:12 +0000</pubDate>
		<dc:creator>jhuss</dc:creator>
		
		<category><![CDATA[Arte]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[M&uacute;sica]]></category>

		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://jhuss.com/2007/09/10/musica-libre/</guid>
		<description><![CDATA[
Desde hace alg&#250;n tiempo conozco jamendo, es un sitio en el que se consigue m&#250;sica libre.
No hab&#237;a tenido inter&#233;s en revisar la pagina, pero en tiempo de ocio me puse a buscar a ver que tiene, existe muy buena m&#250;sica, pero otras para mi no tanto, deben ser que es algo experimental, pero mucho!.
La mayor&#237;a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://img.jamendo.com/logo/jamendo-200-es.png" alt="jamendo" /></p>
<p>Desde hace alg&uacute;n tiempo conozco <a href="http://www.jamendo.com/es" target="_blank">jamendo</a>, es un sitio en el que se consigue m&uacute;sica libre.</p>
<p>No hab&iacute;a tenido inter&eacute;s en revisar la pagina, pero en tiempo de ocio me puse a buscar a ver que tiene, existe muy buena m&uacute;sica, pero otras para mi no tanto, deben ser que es algo experimental, pero mucho!.</p>
<p>La mayor&iacute;a de la m&uacute;sica que all&iacute; esta tiene tag de electronica y rock, pero existen muchos otros g&eacute;neros.</p>
<p>El uso de jamendo es f&aacute;cil, puedes escuchar un numero limitado de canciones, cuando termine te pide registrarse para seguir escuchando y poder bajar m&uacute;sica, el registro es gratuito, y la m&uacute;sica esta bajo varias licencias libres.</p>
<p>Para muestra, me ha gustado mucho este grupo: <a href="http://www.jamendo.com/es/artist/tryad" target="_blank">t r y ^ d</a></p>
<p><img src="http://img.jamendo.com/albums/3661/covers/1.130.jpg" alt="tryad" /></p>
]]></content:encoded>
			<wfw:commentRss>http://jhuss.com/2007/09/10/musica-libre/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
