<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Soloelectronicos</title>
	<atom:link href="http://soloelectronicos.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://soloelectronicos.wordpress.com</link>
	<description>Circuitos electrónicos actuales</description>
	<lastBuildDate>Tue, 08 Sep 2009 18:00:14 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='soloelectronicos.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/58f4c66947572e5afd487fe0e2e2bdac?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Soloelectronicos</title>
		<link>http://soloelectronicos.wordpress.com</link>
	</image>
			<item>
		<title>Un despertador  muy perspicaz</title>
		<link>http://soloelectronicos.wordpress.com/2009/09/08/un-despertador-muy-perspicaz/</link>
		<comments>http://soloelectronicos.wordpress.com/2009/09/08/un-despertador-muy-perspicaz/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 17:40:10 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[Domotica]]></category>
		<category><![CDATA[PIC]]></category>
		<category><![CDATA[PIC's]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=275</guid>
		<description><![CDATA[
Realmente la electrónica evoluciona a un ritmo  frenético y la verdad es que lo queramos o no, la electrónica del siglo XXI es difícil de entender sin la ayuda de los elementos programables, ocupando sin  duda un lugar crucial  en este apartado, los microcontroladores, por su gran flexibilidad, bajo precio y altísimas prestaciones, por lo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=275&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img style="border:0 initial initial;" title="circuito_funcionando" src="http://soloelectronicos.files.wordpress.com/2009/09/circuito_funcionando.jpg?w=400" alt="circuito_funcionando" width="400" /></p>
<p>Realmente la electrónica evoluciona a un ritmo  frenético y la verdad es que lo queramos o no, la electrónica del siglo XXI es difícil de entender sin la ayuda de los elementos programables, ocupando sin  duda un lugar crucial  en este apartado, los microcontroladores, por su gran flexibilidad, bajo precio y altísimas prestaciones, por lo que cada vez mas, dispositivos corrientes  (incluso  de relativa sencillez), integran en gran parte de su electrónica un microcontrolador  o un microprocesador, siendo cada vez mayor la lista de dispositivos y aparatos  que  utilizan esta tecnología: electrodomésticos, periféricos para ordenadores, teléfonos móviles, etc.</p>
<p>La verdad es que si bien la electrónica en general se ha visto muy mejorada por la simplificación de los componentes necesarios  en cualquier proyecto complejo ( piénsese que  un microcontrolador  integra prácticamente todo lo necesario: CPU, memoria, timers, puertos de E/S, controladores de LCD, etc. ), no lo ha sido  así  el software requerido para  que estos  cumplan con el cometido deseado, pues tradicionalmente este  se creaba   basándose en   ensamblador, el cual es  un lenguaje  muy  potente  por ser muy cercano a la maquina, si bien como contrapartida, es muy dependiente de esta, y además es  de relativa  dificultad  para todos los aficionados que desean empezar en este mundo y no poseen los conocimientos de programación que se requieren.</p>
<p>Afortunadamente  en el mundo de los dispositivos programables recientemente han aparecido nuevos lenguajes más próximos al lenguaje natural (en C  o en Basic)   que nos pueden ayudar  en el desarrollo del software de estos dispositivos: precisamente   desde estas líneas intentaremos demostrar la gran sencillez  para realizar un proyecto electrónico medianamente  complejo basándonos en un simple y barato microcontrolador (en esta ocasión usaremos el PIC16F84A)   desde cero usando el sencillísimo   lenguaje  PIC-BASIC-PRO (en adelante PBP).</p>
<p>A  continuación intentaremos  transmitir los conocimientos mínimos para que cualquiera que no haya programado  ningún PIC, simplemente  estudiando  las explicaciones siguientes, junto con los ejemplos  de porciones del proyecto, pueda iniciarse progresivamente  en la comprensión  de la programación de estos dispositivos tan potentes, de modo que  al final como colofón pueda comprender  el programa definitivo, el cual es plenamente funcional, y será encargado de gestionar por completo el proyecto  del reloj-temporizador semanal con salida a LCD que se  propone.</p>
<p>Tal  y como se ha adelantado, el proyecto versara sobre  un  reloj con display LCD de dos líneas en el que mostraremos información de la hora actual  ,el día de la semana y el modo de temporización  seleccionado) contando para su control de  varios pulsadores ( para ajustes de  día de semana, hora y día actual, ajuste de hora  de activación y ajuste de modalidad de activación) y dos salidas independientes ( una para la luz de fondo del display y otra para usos varios:  buzzer, relé, etc.).</p>
<p>El corazón del circuito tal y como hemos expuesto Serra un PIC16F84 el cual programemos con el código en PBP   que más adelante  citaremos (aunque la mayoría de las partes de este ya han sido comentadas.</p>
<p>A este conectaremos por un lado  los cinco pulsadores, las dos salidas  y por otro lado el display LCD.</p>
<p>Respecto a las entradas utilizaremos pulsadores normalmente abiertos  conectados  a su vez a resistencias de 10k para asegurar que en  reposo hay un valor alto.</p>
<p>En cuanto al display, para esta ocasión utilizaremos cualquier LCD de dos líneas compatible con Hitachi 44780, el cual conectaremos al PIC  en modo 4 bits (utilizando los 4 bits altos) .El resto de  las conexiones del LCD lo haremos según la recomendación de PBP:</p>
<p>Pin 1àgnd</p>
<p>Pin2à+5V</p>
<p>Pin3  à+5v</p>
<p>Pin4(RS) àRA4</p>
<p>Pin5 àN.C.</p>
<p>Pin6(EN) àRB3</p>
<p>Pines7,8,9.10 àN.C.</p>
<p>Pin 11àRA0</p>
<p>Pin 12à RA1</p>
<p>Pin 13à RA2</p>
<p>Pin 14àRA3</p>
<p>Por ultimo, todo el circuito podemos  alimentarlo o bien con alimentador filtrado  a cuya salida conectaremos un regulador tipo 78L05  y dos condensadores de filtro  tanto en la entrada como en la salida de este o bien en su lugar una económica fuente conmutada de 5V ya montada( en cuyo caso no necesitaremos el citado  regulador y el circuito será aun más compacto.</p>
<p>El circuito se completa con un diodo de protección a la entrada  para evitar  cambios de polaridad dado que  el circuito lo alimentaremos con un simple alimentador externo  reciclado  que  entregue  5V.<br />
<img src="http://soloelectronicos.files.wordpress.com/2009/09/diseno-despertador.jpg?w=400" alt="diseño despertador" title="diseño despertador" width="400" class="alignnone size-large wp-image-282" /></p>
<h1>Lista de componentes</h1>
<p>R1=47K</p>
<p>R2,R3,R4 ,R5 y R8=10K</p>
<p>R6,R7=470ohm</p>
<p>C1,C2=10Mf/16v</p>
<p>C3,C4=10nF</p>
<p>C5,C6=27pf</p>
<p>Q1=XTAL 4Mhz</p>
<p>U1=78L05</p>
<p>IC1= PIC16F84A</p>
<p>DIS2=display 16 caracteres y 2 lineas (POWERTIP PC1602F)</p>
<p>Varios:</p>
<p>Bloque Diodos leds tricolor( se puede reciclar  de una economica lamparita decorativa alimentada con pilas de botón fácilmente localizable en tiendas de decoración) .</p>
<p>S1, S2, S3, S4, S5= pulsadores miniatura normalmente abiertos.</p>
<p>Un zumbador de 5V.</p>
<p>Fuente conmutada de 5v 100mA( por  ejemplo se puede recuperar de un cargador de teléfono móvil en desuso).</p>
<p>Caja: usaremos una vieja caja de plástico de disquetes de 3 ½” .</p>
<p>Circuitos Impresos</p>
<p>Dada la sencillez del circuito este circuito puede realizarse muy  fácilmente sobre una placa  de puntos, o bien sobre una placa de prototipos o si lo desea sobre una simple  placa de una cara cuyo diseño se adjunta:</p>
<p><img src="http://soloelectronicos.files.wordpress.com/2009/09/circuito_impreso.jpg?w=400" alt="circuito_impreso" title="circuito_impreso" width="400" class="alignnone size-full wp-image-283" /></p>
<h1>Diseño  a doble cara</h1>
<p>Dada la extrema sencillez del circuito no se aconseja  realizar un circuito impreso de doble cara, pero para el lector que le interese se presenta a continuación junto con las conexiones de este con el resto de componentes.</p>
<h1>Conexiones placa doble cara</h1>
<table border="1" cellspacing="0" cellpadding="0" width="36%">
<tbody>
<tr>
<td width="27%" valign="top">Conector</td>
<td width="33%" valign="top">FUNCIÓN</td>
<td width="39%" valign="top">CONEXIÓN A</td>
</tr>
<tr>
<td width="27%" valign="top">1</td>
<td width="33%" valign="top">GND</td>
<td width="39%" valign="top"></td>
</tr>
<tr>
<td width="27%" valign="top">2</td>
<td width="33%" valign="top">+5V</td>
<td width="39%" valign="top"></td>
</tr>
<tr>
<td width="27%" valign="top">3</td>
<td width="33%" valign="top">+5V</td>
<td width="39%" valign="top"></td>
</tr>
<tr>
<td width="27%" valign="top">4</td>
<td width="33%" valign="top">RA0</td>
<td width="39%" valign="top">PIN 11 LCD</td>
</tr>
<tr>
<td width="27%" valign="top">5</td>
<td width="33%" valign="top">RA1</td>
<td width="39%" valign="top">PIN12 LCD</td>
</tr>
<tr>
<td width="27%" valign="top">6</td>
<td width="33%" valign="top">RA2</td>
<td width="39%" valign="top">PIN13 LCD</td>
</tr>
<tr>
<td width="27%" valign="top">7</td>
<td width="33%" valign="top">RA3</td>
<td width="39%" valign="top">PIN14 LCD</td>
</tr>
<tr>
<td width="27%" valign="top">8</td>
<td width="33%" valign="top">RA4</td>
<td width="39%" valign="top">PIN 4 LCD</td>
</tr>
<tr>
<td width="27%" valign="top">9</td>
<td width="33%" valign="top">RB0</td>
<td width="39%" valign="top">SALIDA 1</td>
</tr>
<tr>
<td width="27%" valign="top">10</td>
<td width="33%" valign="top">RB1</td>
<td width="39%" valign="top">SALIDA2</td>
</tr>
<tr>
<td width="27%" valign="top">11</td>
<td width="33%" valign="top">RB2</td>
<td width="39%" valign="top">PULSADOR1</td>
</tr>
<tr>
<td width="27%" valign="top">12</td>
<td width="33%" valign="top">RB3</td>
<td width="39%" valign="top">PIN6 LCD</td>
</tr>
<tr>
<td width="27%" valign="top">13</td>
<td width="33%" valign="top">RB4</td>
<td width="39%" valign="top">PULSADOR2</td>
</tr>
<tr>
<td width="27%" valign="top">14</td>
<td width="33%" valign="top">RB5</td>
<td width="39%" valign="top">PULSADOR3</td>
</tr>
<tr>
<td width="27%" valign="top">15</td>
<td width="33%" valign="top">RB6</td>
<td width="39%" valign="top">PULSADOR4</td>
</tr>
<tr>
<td width="27%" valign="top">16</td>
<td width="33%" valign="top">RB7</td>
<td width="39%" valign="top">PULSADOR5</td>
</tr>
<tr>
<td width="27%" valign="top">17</td>
<td width="33%" valign="top">N.C.</td>
<td width="39%" valign="top"></td>
</tr>
<tr>
<td width="27%" valign="top">18</td>
<td width="33%" valign="top">N.C.</td>
<td width="39%" valign="top"></td>
</tr>
<tr>
<td width="27%" valign="top">19</td>
<td width="33%" valign="top">+5V</td>
<td width="39%" valign="top"></td>
</tr>
<tr>
<td width="27%" valign="top">20</td>
<td width="33%" valign="top">GND</td>
<td width="39%" valign="top"></td>
</tr>
</tbody>
</table>
<h1>Pasos para la construcción del prototipo</h1>
<h2>Paso 1: Compilación del código fuente</h2>
<p>El código  generado en PBP  por si mismo  no es apto para ser  cargado en el PIC,  ya que este solo  entiende su propio lenguaje máquina, para lo cual deberemos convertir  con un complilador nuestro código escrito en PBP a un código que el micro pueda procesar.</p>
<p>Existe una versión gratuita  limitada de  PIC Basic Pro  en su web oficial <a href="http://www.melabs.com/pbpdemo.htm">http://www.melabs.com/pbpdemo.htm</a></p>
<p>Como el lector adivinara el  entorno del compilador   PIC-BASIC-PRO es algo austero (requiere trabajar en línea de comandos y un editor de texto),  por lo que por lo general lo normal será usar un entorno de desarrollo Grafico (IDE) donde el editor, grabador, compilador,  etc. estén  integrados  como por ejemplo el MicroCode Studio  de la casa Mecanique ,el cual se puede descargar de la siguiente url: <a href="http://www.mecanique.co.uk/products/compiler/pbp.html">http://www.mecanique.co.uk/products/compiler/pbp.html</a></p>
<p>NOTA: Para aquellos lectores que  deseen adquirir directamente el código del proyecto ya compilado y no deseen compilarlos por ellos  mismos pueden solicitarlo gratuitamente a: soloelectronicos@telefonica.es</p>
<h2>Paso 2: Simulación del código fuente</h2>
<p>Con objeto de no estar continuamente programando  el PIC, existen simuladores para no tener que realiza ningún  prototipo  físicamente y de esta manera evaluar  el comportamiento global de este  antes de estudiar su realización real.</p>
<p>Existen muchos simuladoras, por software (por ejemplo Proteus es el más famoso),  pero existe uno especifico para PIC’s: el PIC Simulator de  OshonSoft (se puede descargar una versión limitada en <a href="http://www.oshonsoft.com/downloads.html">http://www.oshonsoft.com/downloads.html</a> )</p>
<p>Suponiendo  instalado el software para la simulación del código,  realizaremos los siguientes pasos:</p>
<ol>
<li>FileàLoad Programà .hex</li>
<li>ToolsàLCD ModuleàChange LCD Module Color SchemeàLCDtype 2x:2&#215;16,data lines:portA.interface 4 bits Low,RS:A4,E line=B3,r/W:no used</li>
</ol>
<ol>
<li>Tools àMicrocontroller View</li>
<li>RateàFast</li>
<li>SimulationàStart</li>
</ol>
<h2>Paso 3: Grabación del PIC</h2>
<p>Una vez obtenido el código ensamblado y simulado necesitaremos  un simple circuito llamado programador  para salvar el .hex en la flash del PIC. Normalmente los programadores más simples están   basados  en el diseño JDM, siendo el más usual el TE20 (  se puede conseguir fácilmente    en <a href="http://todoelectronica.com/">http://todoelectronica.com</a> ).</p>
<p>Para poder emplear nuestro grabador, necesitaremos un software grabador que lo permita. Uno de los programas para grabación de PIC’s mas conocidos es  el Ic-Prog, el cual se puede descargar gratuitamente de <a href="http://www.ic-prog.com/index1.htm">http://www.ic-prog.com/index1.htm</a></p>
<h2>Proceso de Grabación  a través  del ICPROG  con el TE20</h2>
<p>Ponemos en marcha en ICPROG 1.06b, si lo iniciamos por primera vez, nos saldrá una pantalla de configuración, si no es el caso, pulsamos la tecla F3 (settingsàHardware), una vez en ella, colocaremos las siguientes opciones:</p>
<p>·        Programmer: JDM Programmer</p>
<p>·        Ports: Com1 o Com2 dependiendo de donde hallamos colocado el TE20</p>
<p>·        I/O Delay: Normalmente, tiene que estar a 5, pero si nos da problemas al programar la eeprom, lo colocaremos en 4.</p>
<p>·        Interface: Direct I/O</p>
<p>·        Communication: Todas sin activar</p>
<p>Ahora nos vamos a SettingsàOptions, y chequearemos las pestañas:</p>
<p>·        I²C: Ambas tienen que estar desactivadas</p>
<p>·        Misc: Desactivar la opción de “Enable Vcc control for JDM”</p>
<p>·        Programming: Tiene relación con el fuse “CP”   (Code Protection) para la protección del PIC tendremos que desactivar ambas casillas, pero si queremos verificar que nuestro PIC o eeprom ha sido bien grabado tendremos que desactivar el fuse “CP” y activaremos cualquiera de la dos casillas, la primera lo verifica al acabar de programar y la segunda mientras programa (se aconseja dejar la primera opción). Si activamos el verificado y el fuse “CP” nos dará el 0000h.</p>
<p>Seguidamente en la parte izquierda de la pantalla  seleccionamos los  fuses y Oscilator:</p>
<p>FUSES</p>
<p>·        “WDT” <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> erro Guardián. Cuando el programa entra en un bucle infinito, el WDT se desborda y resetea el PIC</p>
<p>·        “PWRT”:Power on Reset. Hasta que el PIC no alcance una tensión de funcionamiento correcta lo mantiene en reset</p>
<p>·        “CP”: Code Protection. Protege el código contra lectura.</p>
<p>OSCILATOR</p>
<p>·        “LP”:Oscilador de bajo consumo, de frecuencia de 35 a 200Khz.</p>
<p>·        “XT”:Oscilador para frecuencias estándar, de 100Khz a 4Mhz</p>
<p>·        “HS”:Oscilador de alta velocidad de 4Mhz a 10Mhz (Cristal de Cuarzo) àlo seleccionaremos</p>
<p>·        “RC”:Oscilador de bajo coste formado por condensador y resistencia</p>
<p>Finalmente, una vez llegado ha este punto, vamos a comenzar la programación del PIC en nuestro TE20 que debe de estas desenchufado del cable ext. RS232, con las muescas del chip que coincida con las muescas del  zócalo de 18 pines. Una vez colocado, enchufamos el TE20 al cable, elegimos el chip (en nuestro caso  PIC 16F84) en el menú superior   abrimos el archivo compilado (.hex), el oscillator debe de estar en XT y los fuses todos desactivados, el CP lo podemos activar o no, dependiendo de las necesidades.</p>
<p>Ya sólo nos queda cruzar los dedos y darle a Commandà Program all o al icono que tiene un chip con un rayo&#8230;</p>
<p>Si tuviéramos algún problema en la grabación del chip  bajaríamos la velocidad del puerto donde estuviera enchufado el TE20 a 2400 bits por segundo, pero si persiste el problema consultar  en esta URL: http://soloelectronicos.wordpress.com/2008/07/24/como-grabar-un-PIC16fxx-desde-un-portatil-con-el-te20jdm/).</p>
<h2>Paso4: Realización del circuito</h2>
<p>Como el lector  habrá comprobado a lo largo de todos los apartados anteriores, tras el  paso de  grabación del PIC, ya solo  nos queda alimentar este  y  conexionar  todos sus periféricos para que nuestro proyecto cobre vida</p>
<p>En este proyecto, la realización práctica incluye  tres  partes:</p>
<ul>
<li>La      placa de control en la que incluiremos los siguientes elementos:</li>
</ul>
<p>-          El circuito del resonador formado por el cristal de cuarzo de 4Mhz  y los dos condensadores cerámicos conectados a este .</p>
<p>-          La fuente de alimentación  de 5voltios 50mA(opcional si o se cuenta con una fuente externa de estas características ), formada por un regulador  tipo 75L05(de baja potencia) y lo respectivos condensadores de desacople .</p>
<p>-          El zumbador  ( que conectaremos a B1).</p>
<p>-          Las resistencias de 10K  que nos aseguran en valor alto en las entradas asociadas a los pulsadores.</p>
<p>-          El microcontrolador programado con el programa descrito.</p>
<ul>
<li>La      placa del display LCD de dos líneas que       se conectara a la  placa de      control de la siguiente forma:</li>
</ul>
<p>Pin 1àgnd</p>
<p>Pin2à+5V</p>
<p>Pin3  à+5v</p>
<p>Pin4(RS) àRA4</p>
<p>Pin5 àN.C.</p>
<p>Pin6(EN) àRB3</p>
<p>Pines7,8,9.10 àN.C.</p>
<p>Pin 11àRA0</p>
<p>Pin 12à RA1</p>
<p>Pin 13à RA2</p>
<p>Pin 14àRA3</p>
<ul>
<li>La placa de entradas: tal y como se ha descrito en nuestro caso estará constituido por  cinco  pulsadores normalmente abiertos, los cuales conectaremos directamente a la placa de control   a B7, B6, B5, B4, B2, B3 ( recuerde que en esta ya hemos incluido las resistencias de 10K.</li>
</ul>
<h2>Paso 5: Comprobación de resultados</h2>
<p>Normalmente si el  micro está bien grabado y las conexiones de éste a sus periféricos son correctas el circuito debiera funcionar a  la primera sin problemas.</p>
<p>Un buen indicador de funcionamiento es el display LCD, de modo que si este no visualiza nada en su pantalla  lo más normal es que sea por  de falta de alimentación, en cuyo caso  comprobaremos   con un polímetro si la tensión de alimentación llega tanto  al micro como al LCD.</p>
<p>Si aún llegando alimentación al LCD, en el display de este  aparecen solos unos bloques oscuros en las primeras columnas  de la primera fila es señal de que o el micro no esta funcionando o las conexiones de este no son correctas, para lo cual comprobaremos  en primer lugar que las  conexiones del LCD a la placa de control son las correctas: echo esto deberían ya verse caracteres correctos en el LCD.</p>
<p>Si persiste aún el mensaje en el LCD es señal que las conexiones internas son incorrectas por lo que comprobaremos  que la resistencia de 47k esta correctamente conectada al pin 6 así como el cristal y los dos condensadores lo están  a los pines 15 y 16 del micro.</p>
<p>Una vez el circuito este funcionando ya solo cabe ajustar el reloj interno a la hora actual por lo que en primer lugar ajustaremos el día de semana y  la hora  actual  pulsando sobre el pulsador de  días/horas (al pasar 24 horas automáticamente se cambia al día de la semana siguiente hasta llegar al domingo que se vuelve a repetir el ciclo) y  después ajustaremos  los minutos pulsando directamente sobre el botón de  minutos ( al pulsar se va incrementando su valor hasta llegar a 60,momento en el cual vuelve a empezar desde 1.</p>
<p>Seguidamente ajustaremos  la hora de alarma pulsando el botón  de hora y minutos  de la hora de activación de la  alarma ( por simplificar el número de pulsadores  este  ajusta los minutos y también las horas de modo que presionando este se van incrementando los minutos de la hora de activación de modo que si se llega hasta los 60 minutos automáticamente se incrementa el valor  de las horas hasta llegar a las 24 h, momento en el que se vuelve a repetir el proceso.</p>
<p>Finalmente elegiremos el modo de activación, presionando sucesivamente el botón de modo , el cual definirá la periodicidad  semanal de activación, mostrando los siguientes mensajes en el lcd:</p>
<ol>
<li>‘Off’:      desactiva el circuito de temporización.</li>
<li>‘Tod’=      lo activa para todos los días de  la      semana.</li>
<li>‘Lab’=      solo lo activa para los días laborales ( de Lunes a Viernes).</li>
<li>‘NoL’      =lo activa para todos los días excepto los Lunes.</li>
<li>‘Mañ’      =lo activa puntualmente para el día siguiente.</li>
</ol>
<p>Para finalizar para desactivar tanto la luz de cortesía como el buzzer pulsaremos simplemente el botón “stop”.</p>
<p>Como detalle de cortesía, como puede verse en el código, pulsando cualquier pulsador se encenderá la luz del display aproximadamente un minuto.</p>
<p>Por ultimo animo desde estas líneas a que el lector experimente con el código en PBP que a continuación  se adjunta  adoptándolo y personalizando a las necesidades y exigencias particulares  que se crean oportunos a nuevos proyectos, pues como habrá podido observar realmente programar un PIC no es tan complicado ¿verdad?</p>
<h2>Listado del programa en PBP</h2>
<p>&#8216;****************************************************************</p>
<p>&#8216;***********************************************</p>
<p>&#8216;***  PROGRAMADOR SEMANAL CON SALIDA a rele</p>
<p>&#8216;***     Por Carlos Rodríguez Navarro</p>
<p>&#8216;***    soloelectronicos@telefonica.es</p>
<p>&#8216;****    procesador PIC16F84</p>
<p>&#8216;****  28/octubre/2008</p>
<p>&#8216;</p>
<p>&#8216; DISPLAY LCD HD 44480</p>
<p>&#8216;RA0,RA1,RA2,RA3=DATOS(PINES 11-14)</p>
<p>&#8216;RB3=ENABLE   (PIN 6)</p>
<p>&#8216;RA4=RS     (PIN 4)</p>
<p>&#8216;vcc (pin 2)</p>
<p>&#8216;gnd (pin 1)</p>
<p>&#8216;vee(pin 3)   a vcc</p>
<p>&#8216;SALIDAS</p>
<p>&#8216;alarma1   portb.0    &#8217;salida</p>
<p>&#8216; luz portb.1     &#8217;salida</p>
<p>&#8216;PULSADORES</p>
<p>&#8216;alarma_boton portb.2    &#8216;ent</p>
<p>&#8217;solo_hora_boton portb.7  &#8216;ent</p>
<p>&#8216;hora_boton portb.4    &#8216;ent</p>
<p>&#8216;prog_boton portb.5    &#8216;ent</p>
<p>&#8216;periodo_boton portb.6  &#8216;ent</p>
<p>&#8216;***********************************************</p>
<p>symbol alarma1=portb.0    &#8217;salida</p>
<p>symbol luz=portb.1     &#8217;salida</p>
<p>SYMBOL alarma_boton=portb.2    &#8216;ent</p>
<p>SYMBOL  solo_hora_boton=portb.7 &#8216; ent</p>
<p>symbol  hora_boton=portb.4    &#8216;ent</p>
<p>symbol  prog_boton=portb.5    &#8216;ent</p>
<p>symbol periodo_boton=portb.6  &#8216;ent</p>
<p>ticks var byte</p>
<p>hora var byte</p>
<p>horaal VAR BYTE</p>
<p>minuto var byte</p>
<p>minutoal VAR BYTE</p>
<p>segundo var byte</p>
<p>semana VAR BYTE</p>
<p>delay var byte</p>
<p>DESC VAR BYTE</p>
<p>desc1 var byte</p>
<p>lunes var bit</p>
<p>martes var bit</p>
<p>miercoles var bit</p>
<p>jueves var bit</p>
<p>viernes var bit</p>
<p>sabado var bit</p>
<p>domingo VAR Bit</p>
<p>PATTERN VAR BYTE</p>
<p>i var byte</p>
<p>minutoluz var byte</p>
<p>TRISA=0      &#8217;PORTA COMO SALIDAS         ( 0=output,1=input)</p>
<p>TRISB= $f4  &#8216;116   &#8216;RB0,RB1,rb3 COMO SALIDAS   resto entradas   1110100=  116</p>
<p>&#8216;PONER A CERO HORA,MIN,SEG Y TICLS</p>
<p>HORA=0</p>
<p>horaal=0</p>
<p>MINUTO=0</p>
<p>minutoal=0</p>
<p>SEGUNDO=2</p>
<p>semana= 1</p>
<p>TICKS=0</p>
<p>DESC=0</p>
<p>DESC1=0</p>
<p>Lcdout $fe, 1 &#8216; Clear LCD screen</p>
<p>lcdout $FE,2</p>
<p>lcdout &#8220;CRN&#8221;   &#8216;mensaje de cortesia</p>
<p>pause 10</p>
<p>&#8216;INICIALIZAR VECTOR INTERRUPCOPN</p>
<p>OPTION_REG=$05  &#8216;timer prescaler es cargado a 64 a traves de option_reg  00000101</p>
<p>ON INTERRUPT GOTO ISR</p>
<p>INTCON=$A0           &#8217;habilita INTERRUPCIONES POR TMR0</p>
<p>&#8216;BORRAR DISPLAY</p>
<p>LOOP:           &#8216;bucle principal de ejecucion</p>
<p>&#8216;bloque de ajuste minutos,hora, segundos y dia de la semana</p>
<p>IF solo_hora_boton=0 THEN      &#8217;si se pulsa el boton de ajuste</p>
<p>GOSUB RETARDO</p>
<p>IF solo_hora_boton=0 THEN      &#8217;si se pulsa el boton de ajuste</p>
<p>MINUTO=MINUTO+1               &#8217;se incrementan minutos</p>
<p>gosub minuto60</p>
<p>endif</p>
<p>endif</p>
<p>&#8216;bloque de ajuste minutos,hora, segundos y dia de la semana</p>
<p>IF HORA_boton=0 THEN      &#8217;si se pulsa el boton de ajuste</p>
<p>GOSUB RETARDO</p>
<p>IF HORA_boton=0 THEN      &#8217;si se pulsa el boton de ajuste</p>
<p>minuto=60</p>
<p>&#8216;  hora=hora+1</p>
<p>GOSUB minuto60 &#8216;HORA24</p>
<p>endif</p>
<p>endif</p>
<p>&#8216;bloque de ajuste hora de alarma</p>
<p>IF PROG_boton=0 THEN      &#8217;si se pulsa el boton de ajuste    hora alarmas</p>
<p>GOSUB RETARDO</p>
<p>IF PROG_boton=0 THEN      &#8217;si se pulsa el boton de ajuste    hora alarmas</p>
<p>MINUTOAL=MINUTOAL+1               &#8217;se incrementan minutos</p>
<p>IF MINUTOAL&gt;59 THEN            &#8216;horas</p>
<p>MINUTOAL=0</p>
<p>horaAL=horaAL+1</p>
<p>endif</p>
<p>if horaal&gt;23 then horaal=0</p>
<p>endif</p>
<p>endif</p>
<p>&#8216;bloque ajuste periodicidad  de alarma ( 6 modos)</p>
<p>IF periodo_boton=0 THEN      &#8217;si se pulsa el boton de ajuste de semanas</p>
<p>GOSUB RETARDO</p>
<p>IF periodo_boton=0 THEN</p>
<p>DESC=DESC +1</p>
<p>DESC1=DESC</p>
<p>IF DESC=6 THEN</p>
<p>desc=0</p>
<p>DESC1=0</p>
<p>ENDIF</p>
<p>endif</p>
<p>endif</p>
<p>&#8216;bloque apagado de alarma y de la  luz</p>
<p>IF alarma_boton=0 THEN      &#8217;si se pulsa el boton de ajuste de semanas</p>
<p>pause 150</p>
<p>IF alarma_boton=0 THEN</p>
<p>desc=desc1 &#8216;restara modalidad alarmqa</p>
<p>low alarma1     &#8216;resetea alarma</p>
<p>low luz</p>
<p>endif</p>
<p>endif</p>
<p>&#8216;condicion de alarma</p>
<p>if hora=horaal and minuto=minutoal and segundo=1  and ( semana=   lunes*1  or   semana=martes*2 or  semana=miercoles*3 or     semana=jueves*4 or      semana=viernes*5 or   semana=sabado*6 or  semana=domingo *7)   then</p>
<p>GOSUB LUZON       &#8216; enciende luz de fondo</p>
<p>HIGH ALARMA1      &#8216;activa alarma</p>
<p>desc=5         &#8216;PINTA EN PANTALLA</p>
<p>ENDIF</p>
<p>&#8216;apaga la luz de fondo al minuto</p>
<p>if minutoluz=minuto then</p>
<p>gosub  luz_fondo_off</p>
<p>endif</p>
<p>gosub display</p>
<p>goto loop             &#8216;bucle principal de ejecucion</p>
<p>&#8216;RUTINA DE SERVICIO</p>
<p>DISABLE</p>
<p>ISR:</p>
<p>TICKS=TICKS +1</p>
<p>if ticks&lt;61 THEN SINACTUALIZAR</p>
<p>TICKS=0</p>
<p>SEGUNDO=SEGUNDO+1</p>
<p>IF SEGUNDO=60 THEN</p>
<p>SEGUNDO=0</p>
<p>MINUTO=MINUTO+1</p>
<p>gosub minuto60</p>
<p>ENDIF</p>
<p>SINACTUALIZAR:</p>
<p>INTCON.2=0   &#8216;   REACTIVA TMR0</p>
<p>RESUME</p>
<p>ENABLE</p>
<p>END</p>
<p>display:</p>
<p>lcdout $FE,2</p>
<p>lcdout dEC2 hora,&#8221;:&#8221;,DEC2 minuto ,&#8221;:&#8221;,DEC2 SEGUNDO,&#8221; &#8220;</p>
<p>LOOKUP semana,["0","L","M","M","J","V","S","D","M"] ,pattern</p>
<p>LCDOUT PATTERN</p>
<p>LOOKUP semana,["F","U","A","I","U","I","A","O","A"] ,pattern</p>
<p>lcdout pattern</p>
<p>lcdout $FE,2</p>
<p>LcdOut $FE, $C0 &#8216;Principio segunda linea</p>
<p>lcdout dEC2 horaAL,&#8221;:&#8221;,DEC2 minutoAL ,&#8221; &#8220;</p>
<p>select case desc</p>
<p>case 0:       LCDOUT &#8220;OFF&#8221;</p>
<p>gosub borra</p>
<p>case 1:     &#8216;todos los dias</p>
<p>gosub llena</p>
<p>LCDOUT &#8220;Tod &#8220;&#8216;&#8221;LMXJVSD&#8221;</p>
<p>case 2: &#8216;laborales</p>
<p>gosub llena</p>
<p>sabado=0</p>
<p>domingo=0</p>
<p>LCDOUT &#8220;Lab&#8221;&#8216; LMXJV  &#8220;</p>
<p>case 3 :   &#8216;libra lunes</p>
<p>gosub llena</p>
<p>lunes=0</p>
<p>LCDOUT &#8220;NoL&#8221;</p>
<p>case 4:         lcdout &#8220;Mañ&#8221;</p>
<p>GOSUB BORRA</p>
<p>IF  SEMANA=1 then martes=1</p>
<p>if semana=2 then  miercoles=1</p>
<p>if semana=3 then jueves=1</p>
<p>if semana=4 then viernes=1</p>
<p>if semana=5 then sabado=1</p>
<p>if semana=6 then domingo=1</p>
<p>if semana=7 then lunes=1</p>
<p>case 5:</p>
<p>lcdout &#8220;ON &#8220;</p>
<p>end select</p>
<p>return</p>
<p>llena:               &#8216;inicializa a 1 los indicadores semanales</p>
<p>lunes=1</p>
<p>martes=1</p>
<p>miercoles=1</p>
<p>jueves=1</p>
<p>viernes=1</p>
<p>sabado=1</p>
<p>domingo=1</p>
<p>return</p>
<p>borra:         &#8216;inicializa a 0 los indicadores semanales</p>
<p>lunes=0</p>
<p>martes=0</p>
<p>miercoles=0</p>
<p>jueves=0</p>
<p>viernes=0</p>
<p>sabado=0</p>
<p>domingo=0</p>
<p>return</p>
<p>LUZON:</p>
<p>HIGH LUZ      &#8216;activa la luz de fondo guardando el minuto</p>
<p>minutoluz = minuto+1</p>
<p>if minutoluz&gt;60 then minutoluz=1</p>
<p>RETURN</p>
<p>RETARDO:  &#8216;antirebotes de 150ms  pulsadores activando tambien la  luz de fondo</p>
<p>PAUSE 250</p>
<p>GOSUB LUZON         &#8216; enciende luz de fondo</p>
<p>RETURN</p>
<p>HORA24:      &#8217;si se incrementan las horas mas de 24h</p>
<p>IF HORA=24 THEN</p>
<p>HORA=0</p>
<p>semana=semana+1</p>
<p>if semana&gt;7 then    semana=1</p>
<p>endif</p>
<p>RETURN</p>
<p>minuto60:  &#8216; si se incrementan los minutos mas de 60</p>
<p>IF MINUTO=60 THEN</p>
<p>MINUTO=0</p>
<p>HORA=HORA+1</p>
<p>GOSUB HORA24</p>
<p>ENDIF</p>
<p>return</p>
<p>luz_fondo_off:      &#8216;apaga luz de fondo</p>
<p>low luz</p>
<p>minutoluz=61</p>
<p>return</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/275/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=275&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2009/09/08/un-despertador-muy-perspicaz/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>

		<media:content url="http://soloelectronicos.files.wordpress.com/2009/09/circuito_funcionando.jpg?w=1024" medium="image">
			<media:title type="html">circuito_funcionando</media:title>
		</media:content>

		<media:content url="http://soloelectronicos.files.wordpress.com/2009/09/diseno-despertador.jpg?w=701" medium="image">
			<media:title type="html">diseño despertador</media:title>
		</media:content>

		<media:content url="http://soloelectronicos.files.wordpress.com/2009/09/circuito_impreso.jpg" medium="image">
			<media:title type="html">circuito_impreso</media:title>
		</media:content>
	</item>
		<item>
		<title>El viejo PIC16F84A</title>
		<link>http://soloelectronicos.wordpress.com/2009/09/08/el-viejo-pic16f84a/</link>
		<comments>http://soloelectronicos.wordpress.com/2009/09/08/el-viejo-pic16f84a/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 17:37:06 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=273</guid>
		<description><![CDATA[El corazón del proyecto: el PIC16F84A
En este proyecto  hemos elegido por su flexibilidad, bajo precio, alta disponibilidad  y fácil entorno de desarrollo el  PIC16F84A  de Microchip.
Veamos muy brevemente   una relación de sus principales características:

Repertorio de 35      Instrucciones donde, todas las instrucciones se ejecutan en un solo ciclo    [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=273&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h1>El corazón del proyecto: el PIC16F84A</h1>
<p>En este proyecto  hemos elegido por su flexibilidad, bajo precio, alta disponibilidad  y fácil entorno de desarrollo el  PIC16F84A  de Microchip.</p>
<p>Veamos muy brevemente   una relación de sus principales características:</p>
<ul>
<li>Repertorio de 35      Instrucciones donde, todas las instrucciones se ejecutan en un solo ciclo      excepto las de salto que necesitan dos, (como cada ciclo de  máquina del PIC son 4 ciclos de reloj      con un cristal de 4 MHz, se ejecutarán 1 millón de instrucciones por      segundo.</li>
</ul>
<ul>
<li>Memoria
<ul>
<li> Memoria de programa Flash de 1 K x 14 bits (cuenta con un contador de programa de 13 bit, lo que en teoría permitiría direccionar 4 KB de memoria, aunque el 16F84 solo dispone de 1KB de memoria implementada.</li>
<li>Memoria RAM dividida en 2 áreas: 22 registros de propósito específico (SFR) y 68 de propósito general (GPR) como memoria de datos.  Además 15 registros de funciones especiales.</li>
<li>Memoria de datos EEPROM de 64 bytes. (Soporta 1.000.000 de ciclos de borrado/escritura de la memoria EEPROM y 40 años de retención de la memoria EEPROM.</li>
</ul>
</li>
</ul>
<ul>
<li>4 fuentes de interrupciones:
<ul>
<li>A través del pin RB0/INT.</li>
<li>Desbordamiento del temporizador TMR0.</li>
<li>Interrupción por cambio de estado de los pins 4:7 del Puerto B.</li>
<li>Completada la escritura de la memoria EEPROM.</li>
</ul>
</li>
<li>13 pins de E/S con control individual de dirección. (PortA de 5 bits RA0:RA4&gt; y  PortB de 8 bits &lt;RB0:RB7&gt; ).</li>
<li>Contador/Temporizador TMR0 de 8 bits con divisor programable.</li>
<li>Tecnología de baja potencia y alta velocidad CMOS Flash/EEPROM.</li>
<li>Características eléctricas  generales
<ul>
<li>Disipación de potencia total de 800 mW.</li>
<li>Máxima corriente en puertos del puerto &#8220;A”: como fuente 50 mA y  como sumidero 80 mA,  y del  puerto &#8220;B&#8221; como fuente 100 mA y como sumidero 150 mA.</li>
<li>Máxima corriente que puede suministrar una sola salida como fuente o sumidero, 25 mA.</li>
<li>Rango de alimentación: de 4,5 a 5.5 v y de  10 a 20 mA en configuración de oscilador HS (FOSC=20 MHz, VDD=5,5V).</li>
</ul>
</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/273/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/273/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/273/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=273&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2009/09/08/el-viejo-pic16f84a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>
	</item>
		<item>
		<title>Introduccion al PIC-Basic</title>
		<link>http://soloelectronicos.wordpress.com/2009/09/08/introduccion-al-pic-basic/</link>
		<comments>http://soloelectronicos.wordpress.com/2009/09/08/introduccion-al-pic-basic/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 17:35:21 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[PIC]]></category>
		<category><![CDATA[PIC's]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=271</guid>
		<description><![CDATA[Introducción al lenguaje PIC-BASIC-PRO
Variables
La programación sería prácticamente imposible sin el uso de variables. Podemos hacernos una imagen mental de la variable consistente en una caja en la que podemos guardar algo. Esa caja es una de las muchas que disponemos, y tiene en su frente pegada una etiqueta con su nombre. Estas cajas tienen ciertas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=271&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h1>Introducción al lenguaje PIC-BASIC-PRO</h1>
<h2>Variables</h2>
<p>La programación sería prácticamente imposible sin el uso de variables. Podemos hacernos una imagen mental de la variable consistente en una caja en la que podemos guardar algo. Esa caja es una de las muchas que disponemos, y tiene en su frente pegada una etiqueta con su nombre. Estas cajas tienen ciertas particularidades, que hace que solo se puedan guardar en ellas determinados tipos de objetos.</p>
<p>En esta analogía, cada caja es una variable, su contenido es el valor que adopta, y la etiqueta es el nombre de la variable. Como su nombre  indica, y como veremos mas adelante, el contenido de una variable puede ser modificado a lo largo del programa</p>
<h2>Tipos de datos</h2>
<p>En PBP tenemos distintos tipos de variables, según el dato que puedan almacenar:</p>
<ul>
<li>Bit :un bit de longitud, almacena 0 o 1 únicamente</li>
<li>Byte :un byte de longitud, almacena números enteros entre 0 y 255.</li>
<li>Word: dos bytes de longitud, almacenan números enteros entre 0 y 65,535(accederemos individualmente a cada uno de los bytes que componen un Word mediante las extensiones &#8220;. HB&#8221; y &#8220;. LB”) .</li>
</ul>
<h2>VAR</h2>
<p>Las variables deben ser declaradas antes de utilizarlas, mediante la instrucción var, pero a diferencia de otros lenguajes en PBP, la declaración de variables puede ser hecha en cualquier parte del programa, y todas las variables son consideradas <strong>globales</strong>, es decir, su valor es accesible desde todas las subrutinas y zonas del programa, estando lógicamente limitado su  número al tamaño de  memoria RAM disponible en cada microcontrolador.</p>
<p>En el programa de  este proyecto utilizamos los siguientes variables:</p>
<p><em>ticks var byte: </em><em>almacena el numero de pulsos que serán utilizados para calcular los segundos</em></p>
<p><em>hora var byte</em><em> :almacenara la hora actual</em></p>
<p><em>horaal VAR BYTE</em><em>: almacenara la hora de la alarma</em></p>
<p><em>minuto var byte :</em><em> almacenara los  minutos de la hora  actual</em></p>
<p><em>minutoal VAR BYTE</em><em> :  almacenara el minuto de la alarma</em></p>
<p><em>segundo var byte :</em><em> almacenara los segundos de la hora actual</em></p>
<p><em>semana VAR BYTE</em><em> :almacenara el día de semana actual</em></p>
<p><em>delay var byte</em><em> : define el retardo para evitar lecturas erróneas en los pulsadores</em></p>
<p><em> DESC VAR BYTE : almacenara el modo de activación </em></p>
<p><em>PATTERN VAR BYTE: almacenara</em><em> el tipo de día en dos caracteres</em></p>
<p><em> lunes var bit: define si la alarma se activara los lunes</em></p>
<p><em> martes var bit: define si la alarma se activara los martes</em></p>
<p><em> miercoles var bit</em><em> : define si la alarma se activara los miércoles</em></p>
<p><em> jueves var bit : define si la alarma se activara los jueves</em></p>
<p><em> viernes var bit : define si la alarma se activara los viernes</em></p>
<p><em> sabado var bit : define si la alarma se activara los sábados</em></p>
<p><em> domingo VAR Bit : define si la alarma se activara los domingos</em></p>
<h2>PUERTOS</h2>
<p>Poco nos serviría un PIC  si no tuviésemos posibilidad de conectar éste con el mundo real  como displays, pulsadores, leds, relés, etc., cometido que se hace a través de los llamados puertos de entrad/salida.</p>
<p>Todos los puertos están disponibles para usar en los programas PBP, como si se tratase de variables del tipo BYTE con el nombre del registro utilizado en las hojas de características (PORTA, PORTB, TRISA, etc..). También se puede acceder a bits individuales simplemente usando las variables tipo byte RA, RB, RC, RD, RE o bien las tipo bit RA0, RA1, RA2,&#8230;, RE6, RE7.</p>
<p>Como en la mayoría de los controladores de E/S en  PBP debe definirse como emplearemos los bits de cada puerto (como entrada o como salida), cometido que se realizará a través del comando TRIS seguido  del nombre del puerto  asignándolo a un valor que en binario   transcribe   cada  bit  según esté a cero o uno como  ceros, si funciona ese bit como salidas o como entrada.</p>
<p>En el programa  de este proyecto utilizamos la siguiente definición de bits en los puertos:</p>
<p>TRISA=0      : define todos los bits del PORTA como  SALIDAS</p>
<p>TRISB= $F4  &#8216; define algunos  bits del PORTB como  SALIDAS( los bits que estén a cero: BO, B1 Y B3 EL RESTO SERIAN ENTRADAS), veámoslo mas detalladamente: f4 en Hexadecimal es 11110100 en binario  por lo que si  miramos de izda a derecha este numero , los bits b0,b1 y b3 están  a cero  y   el resto ( b2,,b4,b5,b6 ,b7 )  a uno, por eso  las primeras RB0,RB1 Y RB3 se define como bits de salida (a las que conectaremos los circuitos de aplicación que nos interesen: buzzer, leds, relés etc.)    y las otras se definen como entradas RB2,RB4,RB5,RB6  y RB7 (a los que conectaremos  los pulsadores en el  proyecto).</p>
<h2>SYMBOL</h2>
<p>Una forma de escribir programas que nos resulte mucho más fáciles de entender es el uso de nombres simbólicos, o SYMBOL. Un &#8220;symbol&#8221; es una cadena que contiene código, asignado a un nombre. Al momento de compilar,  PBP hace la &#8220;búsqueda y reemplazo&#8221; de nuestros símbolos y luego genera el código ASM y el HEX. Supongamos que tiene un buzzer conectado al bit uno del puerto B. Mediante SYMBOL podemos hacer: SYMBOL ALARMA1 = PORTB.1, Luego, si queremos encender  la alarma1, en lugar de PORTB.1 = 1, podemos hacer  alarma1 = 1 que es mucho mas claro y fácil de leer. Por supuesto, el código que aparece a la derecha del igual no puede contener instrucciones.</p>
<p>En el programa de  este proyecto utilizamos los siguientes símbolos:</p>
<p><em>Symbol hora_boton=portb.4 </em><em>: lo usaremos para modificar el número de semana y la hora.</em></p>
<p><em>symbol  prog_boton=portb.5</em><em> : lo usaremos para modificar la hora de la programación.</em></p>
<p><em>symbol periodo_boton=portb.6</em><em> : lo usaremos para modificar el periodo de funcionamiento del programador.</em></p>
<p><em>SYMBOL alarma_boton=portb.0</em><em> : lo usaremos para programar la hora de  la alarma.</em></p>
<p><em> symbol luz_boton=portb.7    : lo usaremos para encender la luz de fondo del LCD (la encenderemos durante un cierto periodo de tiempo siempre que pulsemos una tecla) y también para parar la alarma.</em></p>
<p><em>symbol alarma1=portB.1</em><em> :lo usaremos para hacer sonar un buzzer.</em></p>
<p><em> symbol luz=portb.2     : lo usaremos para encender la luz de fondo.</em></p>
<p>Las constantes (valores que usamos en nuestro programa, y que, por ejemplo, asignamos a las variables) pueden ser escritas en decimal (directamente el valor), en hexadecimal (anteponiendo &#8220;0x&#8221; o posponiendo &#8220;H&#8221; al valor) o en binario (anteponiendo &#8220;%&#8221; al valor).</p>
<p>Hay tres instrucciones para el manejo individual de bits, que si bien no hacen nada que no se puede resolver con otras instrucciones o símbolos, ayudan mucho en la lectura del código. Se tratan de HIGH, LOW y TOGGLE, que ponen el bit en alto, bajo o lo invierten, respectivamente. Importante: Si el bit implicado como argumento de una de estas instrucciones es un bit de un PORT, el mismo bit en el TRIS correspondiente es puesto en cero, y dicho pin queda configurado como salida.</p>
<p>Por ejemplo</p>
<p><em>low  alarma1 : </em><em>desactiva el buzzer de alarma</em></p>
<p><em> low luz :</em><em>apaga la luz de fondo </em></p>
<h2>GOSUB</h2>
<p>GOSUB significa literalmente &#8220;IR A Subrutina&#8221;, y sirve justamente para eso: desviar el flujo del programa a otro punto donde estará la subrutina.</p>
<p>Para usar GOSUB, es necesario poner una etiqueta en el lugar al que queremos &#8220;saltar&#8221;. Las etiquetas son simplemente nombres terminados en &#8220;:&#8221;, y también en muy importante terminar el código de la subrutina con la sentencia RETURN (para que una vez ejecutada la subrutina vuelva a la instrucción siguiente de donde se hizo la llamada).</p>
<p>Como ejemplo veamos una sección del programa presentado donde se utiliza una llamada a subrutina:</p>
<p>if hora=horaal and minuto=minutoal and segundo=1  and ( semana=   lunes*1  or   semana=martes*2 or  semana=miercoles*3 or     semana=jueves*4 or      semana=viernes*5 or   <em>semana=sabado*6 or  semana=domingo *7)   then        &#8216;activacion</em></p>
<p>gosub alarma_on               &#8216;ACTIVACION  ALARMA</p>
<p>endif</p>
<p>..</p>
<p>alarma_on:      ‘subrutina de activación de alarma y luz de fondo</p>
<p>high alarma1 ‘ activa bit de alarma</p>
<p>high luz ‘ active bit de luz de fondo</p>
<p>return  ‘ devuelve el control</p>
<p>..</p>
<p>En el ejemplo anterior, si la condición del IF es cierta el programa  ejecutará la llamada a la subrutina alarma_on, la cual desviará la ejecución al bloque alarma_on (que vendrá delimitado  por su etiqueta)  hasta encontrar la sentencia RETURN que hará que el programa devuelva el control a la siguiente instrucción donde se había realizado la llamada.</p>
<p>Como se está viendo la utilización de  subrutinas es un modo muy poderoso de optimizar y ahorrar código ya que un mismo bloque (subrutina) podrá emplearse en múltiples sitios del programa sin por ello tener que repetirlo tantas veces como se necesite.</p>
<h2>OPERACIONES LÓGICAS Y MATEMÁTICAS</h2>
<p>PBP dispone de cinco operaciones matemáticas básicas, disponibles para las variables tipo Byte y Word. Estas son la suma (operador +), la sustracción (operador -), el producto (operador *), el cociente (operador /) y el módulo (operador MOD), siendo  posible calcular raíces cuadradas (aunque el resultado debe ser entero) con la función SQR, e incluso para las variables de tipo Bit existen siete operaciones lógicas disponibles. Solo es posible efectuar una operación lógica por instrucción (aunque es muy posible que próximas versiones permitan más flexibilidad.</p>
<h2>IF &#8211; THEN &#8211; ELSE &#8211; ENDIF</h2>
<p>En cualquier programa medianamente complejo que queramos realizar, seguramente necesitaremos en algún punto tomar alguna decisión basándonos en el estado de una entrada o en el valor de una variable.  PBP incorpora instrucciones que nos permiten este tipo de comportamiento, siendo la más sencilla y frecuentemente utilizada la sentencia IF &#8211; THEN &#8211; ELSE &#8211; ENDIF.</p>
<p><strong><span style="text-decoration:underline;"> Caso 1</span></strong>: IF condición THEN instrucción, donde &#8220;IF&#8221; significa &#8220;SI&#8230;.&#8221;, y &#8220;THEN&#8221; significa &#8220;LUEGO&#8221; o &#8220;ENTONCES&#8221;. El caso anterior puede leerse como &#8220;SI se cumple la condición, entonces ejecuto la instrucción&#8221; .La &#8220;condición&#8221; es una expresión lógica que puede ser verdadera o falsa. En caso de ser verdadera, la instrucción a continuación del THEN será ejecutada. En caso de la condición sea falsa, el programa seguirá su ejecución con la instrucción siguiente al &#8220;IF &#8211; THEN&#8221;.</p>
<p><strong><span style="text-decoration:underline;"> Caso 2</span></strong>: IF&#8230;THEN…ENDIF: Muchas veces, luego de evaluar la condición necesitamos ejecutar más de una instrucción. En los ejemplos vistos en el CASO 1 siempre se ejecutaba una sola instrucción cuando la condición era cierta, ahora no varia prácticamente nada respecto del primer caso, salvo que esta vez se van a ejecutar todas las instrucciones que se encuentren entre el THEN y el ENDIF cada vez que condición sea verdadera.</p>
<p><strong><span style="text-decoration:underline;">Caso 3</span></strong>: IF.THEN….ELSE&#8230;ENDIF: Hay veces que de acuerdo a la condición, queremos ejecutar un grupo u otro de instrucciones. Para eso, utilizamos el ELSE:,es decir, si la condición es verdadera, se ejecutan las sentencias entre THEN y ELSE. Y si la condición es falsa, las que estén entre ELSE y ENDIF. &#8220;ELSE&#8221; puede ser traducido como &#8220;en otro caso&#8221; o &#8220;si no&#8230;&#8221;.</p>
<p><strong><span style="text-decoration:underline;">Caso4:</span></strong>IF..THEN..ELSE…ELSE …ENDIF…ENIF: Por ultimo, tenemos que saber que es posible &#8220;anidar&#8221; instrucciones IF-THEN-ELSE-ENDIF, con lo que se pueden tomar decisiones verdaderamente complejas. Por supuesto, tenemos que ser cautos en el uso de esta característica ya que debido a limitaciones en el tamaño de la pila y cantidad de memoria disponible del PIC podemos ocasionar un desborde y el programa colapsara.</p>
<p>Como ejemplo veamos una sección del programa presentado donde se utilizan   varios bloques IF..THEN..ELSE encadenados</p>
<p>TICKS=0</p>
<p>SEGUNDO=SEGUNDO+1</p>
<p>IF SEGUNDO=60 THEN</p>
<p>SEGUNDO=0</p>
<p>MINUTO=MINUTO+1</p>
<p>IF MINUTO=60 THEN</p>
<p>MINUTO=0</p>
<p>HORA=HORA+1</p>
<p>IF HORA=24 THEN</p>
<p>HORA=0</p>
<p>semana=semana+1</p>
<p>if semana=7 then</p>
<p>semana=0</p>
<p>endif</p>
<p>ENDIF</p>
<p>ENDIF</p>
<p>ENDIF</p>
<p>Es decir: cada vez que la variable segundo toma el valor 60  se resetea su valor, y se incrementan el valor de los minutos. Si a su vez los minutos superan el valor de 60 se resetea su valor  y se incrementa el valor de las horas. A su vez si se superan las 24 horas se resetea su valor y se  incrementa el día de la semana. Este análisis termina cuando se superan los 7 días de la semana que se resetea para empezar nuevamente el ciclo.</p>
<h2>BUCLES</h2>
<p>Así como la toma de decisiones que vimos en el epígrafe anterior esta presente en casi todos nuestros programas, las estructuras que permiten repetir un grupo de instrucciones un número determinado de veces también son indispensables. En  PBP hay dos de ellas. Veamos  ahora la primera, FOR &#8211; TO &#8211; STEP &#8211; NEXT.</p>
<p>Esta estructura necesita una variable (tipo Byte o Word) para funcionar. En cada iteración del bucle, la variable va cambiando su valor. Cuando el valor de la variable alcanza o supera el valor prefijado, el bucle termina.</p>
<h2>WHILE &#8211; WEND</h2>
<p>La segunda estructura de control que proporciona  PBP es WHILE &#8211; WEND. Su propósito es el mismo que la que vimos en el apartado anterior, y su funcionamiento consiste en que mientras que la condición sea verdadera, el grupo de instrucciones dentro del cuerpo del WHILE-WEND se ejecuta (las características de la condición son las mismas que vimos  para IF-THEN-ELSE-ENDIF).</p>
<p>Por supuesto, si no somos cuidadosos al momento de elegir la condición, puede darse el caso de que el número de repeticiones del bucle sea infinito, y nunca salgamos de él. De hecho, esta circunstancia se aprovecha en algunos programas para repetir indefinidamente un grupo de instrucciones. También hay que tener presente que si la condición no es cierta al momento de ejecutar la primera vez el WHILE, el flujo del programa pasara directamente a la instrucción posterior al WEND y las instrucciones dentro del bucle no se ejecutarán ninguna vez.</p>
<h2>SELECT CASE</h2>
<p>La tercera estructura de control que proporciona  PBP es select case –end select. Su propósito es el simplificar las estructuras anidadas if..then else en los casos en que  sea siempre la mima variable y se necesiten  varias decisiones en función de los valores posibles, y su estructura es la siguiente:</p>
<p>SELECT CASE  variable</p>
<p>CASE  valor1: instruccion1</p>
<p>&#8230;</p>
<p>END SELECT</p>
<p>Como ejemplo veamos una sección del programa presentado donde se utilizan   varios bloques case :</p>
<p>select case desc</p>
<p>case 0:       LCDOUT &#8220;&lt;OFF&gt;&#8221;</p>
<p>gosub borra</p>
<p>case 1:     &#8216;todos los dias</p>
<p>gosub llena</p>
<p>LCDOUT &#8220;Todos &#8220;&#8216;&#8221;LMXJVSD&#8221;</p>
<p>case 2: &#8216;laborales</p>
<p>gosub llena</p>
<p>sabado=0</p>
<p>domingo=0</p>
<p>LCDOUT &#8220;Labor&#8221;&#8216; LMXJV  &#8220;</p>
<p>case 3 :   &#8216;libra lunes</p>
<p>gosub llena</p>
<p>lunes=0</p>
<p>LCDOUT &#8220;NoLun&#8221;</p>
<p>case 4:         LCDout &#8220;Mañan&#8221;</p>
<p>GOSUB BORRA</p>
<p>IF  SEMANA=1 then martes=1</p>
<p>if semana=2 then  miercoles=1</p>
<p>if semana=3 then jueves=1</p>
<p>if semana=4 then viernes=1</p>
<p>if semana=5 then sabado=1</p>
<p>if semana=6 then domingo=1</p>
<p>if semana=7 then lunes=1</p>
<p>case 5:</p>
<p>LCDout &#8221; &lt;ON&gt;&#8221;</p>
<p>end select</p>
<p>Es decir en función de los cinco valores que tome la variable desc  se escribirá en el LCD la modalidad de la temporización.</p>
<h2>LOOKUP</h2>
<p>La función LOOKUP puede ser utilizada para seleccionar un Byte desde una lista de constantes del mismo tipo, de acuerdo al valor de un índice (también de tipo Byte). El resultado de la selección se almacena también en una variable tipo byte. La forma de la función LOOKUP es la siguiente:        LOOKUP(byte0, byte1, &#8230;, byteN), indice,variable.</p>
<p>Esta función asignara el valor byteX a variable en función del valor de índice ( es decir si índice=0  se asignara a variable el valor de byte0, si  por el contrario  índice=1, se asignara a variable el valor de byte1, y así sucesivamente).</p>
<p>Veamos como se ha usado esta función en el programa que presentamos:</p>
<h3>LOOKUP semana,["0","L","M","X","J","V","S","D","M"] ,pattern</h3>
<p>LCDout pattern</p>
<p>LOOKUP semana,["F","U","A","I","U","I","A","O","A"] ,pattern</p>
<p>LCDout pattern</p>
<p>En el primer Lookup, la variable pattern  tomara el primer carácter del día de la semana, reservando el 0 para desconexión (por ejemplo tomara O para semana=0,L para  semana =1,M para semana=2,M para semana etc.)</p>
<p>En el segundo Lookup, la variable pattern  tomara el segundo carácter del día de la semana, reservando el 0 para desconexión (por ejemplo tomara F para semana=0, U para  semana =1, A para semana=2, I para semana etc.).</p>
<p>Por tanto con estas dos sentencias lookup y adyacentes, escribiremos en la segunda línea del display los caracteres: OF, LU, MA, MI, JU, VI, SA o DO en función del valor de la variable semana .</p>
<h2>SOPORTE DE DISPLAYS LCD</h2>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="55" valign="top">Pin LCD</td>
<td width="109" valign="top">Pin  Puerto Paralelo</td>
<td width="85" valign="top">Función LCD</td>
</tr>
<tr>
<td width="55" valign="top">1  GND</td>
<td width="109" valign="top"></td>
<td width="85" valign="top">Gnd</td>
</tr>
<tr>
<td width="55" valign="top">2 +5v</td>
<td width="109" valign="top">&gt;</td>
<td width="85" valign="top">VCC</td>
</tr>
<tr>
<td width="55" valign="top">3 GND</td>
<td width="109" valign="top">&gt;</td>
<td width="85" valign="top">Contraste LCD</td>
</tr>
<tr>
<td width="55" valign="top">4</td>
<td width="109" valign="top">16</td>
<td width="85" valign="top">RS</td>
</tr>
<tr>
<td width="55" valign="top">5 GND</td>
<td width="109" valign="top">&gt;</td>
<td width="85" valign="top">Write</td>
</tr>
<tr>
<td width="55" valign="top">6</td>
<td width="109" valign="top">1</td>
<td width="85" valign="top">Enable</td>
</tr>
<tr>
<td width="55" valign="top">7</td>
<td width="109" valign="top">2</td>
<td width="85" valign="top">Data bit 0</td>
</tr>
<tr>
<td width="55" valign="top">8</td>
<td width="109" valign="top">3</td>
<td width="85" valign="top">Data bit 1</td>
</tr>
<tr>
<td width="55" valign="top">9</td>
<td width="109" valign="top">4</td>
<td width="85" valign="top">Data bit 2</td>
</tr>
<tr>
<td width="55" valign="top">10</td>
<td width="109" valign="top">5</td>
<td width="85" valign="top">Data bit 3</td>
</tr>
<tr>
<td width="55" valign="top">11</td>
<td width="109" valign="top">6</td>
<td width="85" valign="top">Data bit 4</td>
</tr>
<tr>
<td width="55" valign="top">12</td>
<td width="109" valign="top">7</td>
<td width="85" valign="top">Data bit 5</td>
</tr>
<tr>
<td width="55" valign="top">13</td>
<td width="109" valign="top">8</td>
<td width="85" valign="top">Data bit 6</td>
</tr>
<tr>
<td width="55" valign="top">14</td>
<td width="109" valign="top">9</td>
<td width="85" valign="top">Data bit 7</td>
</tr>
</tbody>
</table>
<p>Lista de conexiones del LCD 2&#215;16</p>
<p>A grandes rasgos, y a pesar de la simplicidad que brinda el disponer de un mismo integrado especializado (compatible con Hitachi 44480)en casi todos los modelos de displays, la escritura en estos es relativamente compleja, dado que se deben respetar protocolos de inicialización, tiempos entre envío de datos, etc., lo que hace bastante tediosa su programación en Assambler.</p>
<p>Pero  PBP dispone de un juego de instrucciones especiales para manejar displays en modo “8 bits” y en modo “4 bits” que nos evitan toda esa complejidad.</p>
<p>El manejo de los LCD se hace mediante el uso de sentencias “DEFINE”, que le dicen al compilador a que pines del microcontrolador hemos conectado cada uno de los pines del LCD. La forma de la instrucción DEFINE es la siguiente:  DEFINE parámetro = valor.</p>
<p>Donde “parámetro” es el nombre del parámetro al que le queremos asignar el “valor”. Los parámetros disponibles para el manejo de LCD alfanuméricos son los siguientes:</p>
<ul>
<li>LCD_BITS: Define el número de bits de la interfaz de datos. Se pueden asignar valores de 4 u 8, siendo 4 el valor por defecto.</li>
<li>LCD_DREG: Define a que puerto del PIC tenemos conectado el port de datos del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.</li>
<li>LCD_DBIT: Define cual es el primer pin del puerto que usamos para enviar los datos al LCD cuando seleccionamos un bus de 4 bits. Solo puede ser el 0 (para los pines el 0, 1, 2 y 3) o 4 (para usar los pines 4, 5, 6 y 7. Por defecto se asume “4”, y esta instrucción se ignora para LCD_BITS = 8.</li>
<li>LCD_RSREG: Define a que puerto del PIC tenemos conectado el pin RS del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.</li>
<li>LCD_RSBIT: Define a que pin del puerto tenemos conectado el pin RS del LCD. Por defecto se asume “3”.</li>
<li>LCD_EREG: Define a que puerto del PIC tenemos conectado el pin E del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.</li>
<li>LCD_EBIT: Define a que pin del puerto tenemos conectado el pin E del LCD. Por defecto se asume “2”.</li>
<li>LCD_RWREG: Define a que puerto del PIC tenemos conectado el pin RW del LCD. Los valores permitidos son 0, PORTA, PORTB, PORTC, etc. Por defecto se asume “0”, que significa “no usamos el pin RW”.</li>
<li>LCD_RWBIT: Define a que pin del puerto tenemos conectado el pin RW del LCD. Por defecto se asume “0”, que significa “no usamos el pin RW”.</li>
<li>LCD_COMMANDUS: Define cuantos microsegundos demora la escritura de un comando en el display. Por defecto, este valor es de 5000. La mayoría de los LCD funcionan bien con un valor de 2000, lo que hace más rápidos nuestros programas.</li>
<li>LCD_DATAUS: Define cuantos microsegundos demora la escritura de un dato en el LCD. Por defecto, este valor es de 100.</li>
<li>LCD_INITMS: Define cuantos microsegundos demora la inicialización e la electrónica del LCD. Por defecto, este valor es de 100.</li>
</ul>
<p>Toda esta sintaxis es completamente funcional, pero PBP para hacernos las cosas más fáciles, si lo deseamos podemos obviar todas las instrucciones anteriores (siempre que incluyamos al menos un comando LCDout), asumiendo PBP que el display funcionara en modo 4 bits, estando conectado a las siguientes pines:</p>
<ul>
<li>RA0,RA1,RA2,RA3  a los pines de DATOS(PINES 11,12,13,14)</li>
<li>RB3=al pin ENABLE   (PIN 6)</li>
<li>RA4=al pin RS     (PIN 4)</li>
<li>vcc (pin 2)</li>
<li>gnd (pin 1)</li>
<li>vee(pin 3)   a vcc</li>
</ul>
<p>Por ultimo  tenemos una serie de instrucciones que manejan el envío de comandos e instrucciones al display:</p>
<ul>
<li>LCDINIT debe utilizarse antes de enviar cualquier comando o dato al LCD. La forma de esta instrucción es al siguiente: LCDINIT n (donde “n” es el tipo de cursor que queremos que muestre el display. “0” significa que el cursor estará oculto, “1” significa que el cursor parpadeara, “2” nos mostrara un cursor subrayado, y “3” un cursor subrayado y parpadeando).
<ul>
<li>LCDClear: Borra el contenido del LCD.</li>
<li>LCDHome: Lleva el cursor a la primera posición del primer renglón del LCD.</li>
<li>LCDLine2Home: Lleva el cursor a la primera posición del segundo renglón del LCD.</li>
<li>LCDLeft: Mueve el cursor una posición a la izquierda.</li>
<li>LCDRight: Mueve el cursor una posición a la derecha.</li>
<li>LCDShiftLeft: Desplaza el contenido del LCD una posición a la izquierda.</li>
<li>LCDShiftRight: Desplaza el contenido del LCD una posición a la derecha.</li>
<li>LCDLine1Clear: Borra la primera línea del LCD.</li>
<li>LCDLine2Clear: Borra la segunda línea del LCD.</li>
<li>LCDLine1Pos(x): Coloca el cursor en la posición “x” del primer renglón del LCD. “X” puede tener cualquier valor entre 1 y 40</li>
<li>LCDLine2Pos(x): Coloca el cursor en la posición “x” del segundo renglón del LCD. “X” puede tener cualquier valor entre 1 y 40</li>
</ul>
</li>
</ul>
<ul>
<li>LCDOUT envía datos al display. Si son caracteres, simplemente los ponemos entre comillas a continuación del comando. Si se trata de mostrar el contenido de una variable, se escribe la variable (precedida por “#”) a continuación del comando. Si se necesitan imprimir varias variables, se pueden separar por “comas”.</li>
</ul>
<p>A continuación, mostramos  como se ha gestionado un  display LCD de dos líneas en el programa que proponemos</p>
<p>LCDout $fe, 1 &#8216;  se inicializa el LCD</p>
<p>pause 20 ‘retardo</p>
<p>…</p>
<p>LCDout $FE,2 ‘nos situamos en la primera línea</p>
<p>LCDout dEC2 hora,&#8221;:&#8221;,DEC2 minuto ,&#8221;:&#8221;,DEC2 SEGUNDO,&#8221; &#8221; ‘escribe en el LCD la hora</p>
<p>LOOKUP semana,["0","L","M","X","J","V","S","D","M"] ,pattern</p>
<p>LCDout pattern ‘escribe en el LCD el contenido de patern</p>
<p>…</p>
<p>LCDout $FE,2’posiciona el LCD en la segunda linea</p>
<p>LCDOut $FE, $C0 &#8216;Nos situamos en Principio de la segunda línea</p>
<p>LCDout dEC2 horaAL,&#8221;:&#8221;,DEC2 minutoAL ,&#8221; &#8220;’escribe en el LCD ka hora de alarma</p>
<p>…</p>
<p>RETURN</p>
<h2>TEMPORIZADOR</h2>
<p>Por  ultimo, PPB también es capaz de gestionar el TIMER interno a  través del comando OPTION_REG  seguido  del prescaler, ayudándose además de las funciones INTCON (que habilitara las interrupciones por hardware) y de la función  ON INTERRUPT (que hará que con llegada de una interrupción el programa pare, donde se encuentre y se salte a la rutina de servicio de interrupción, para luego volver al punto donde se paro)</p>
<p>Por ejemplo en el programa que presentaremos lo haremos así:</p>
<p>OPTION_REG=$05  &#8216;timer prescaler es cargado a 64 a través de option_reg  00000101</p>
<p>ON INTERRUPT GOTO ISR</p>
<p>INTCON=$A0           &#8216;habilita INTERRUPCIONES POR TMR0</p>
<p>Lo cual significa que se generara una interrupción que provocara que PBP llame a una rutina especial (llamada rutina de interrupción) marcada con la etiqueta ISR</p>
<p>Para esto el prescaler se ha puesta al valor  64 y a TMR se le permite que cuente desde 0 hasta 255, de modo que con la frecuencia de reloj de  4Mhz cada interrupción será generada cada 256 *64=16.384ms</p>
<p>En cuanto al código que debe  contener dicha rutina de interrupción, este debe ser lo más breve posible (para que no ralentice la ejecución del programa), y sobre todo debe venir precedida por DISABLE (para evitar que haya una nueva interrupción sin terminar el código de servicio de la primera) y debe ir  terminada por ENABLE y un END.</p>
<p>Para poder contar segundos la rutina ISR contara TICS hasta que alcance el valor 61 pues en ese momento 61*16,384=999.424ms, es  decir aproximadamente seg. , Con lo cual  podremos ir incrementando la cuenta de segundos, minutos, horas y días de semana sucesivamente.</p>
<p>A continuación se describe la rutina de servicio empleada en el programa :</p>
<p>DISABLE       ‘desactiva interrupciones</p>
<p>ISR:   ‘ comienzo de rutina de interrupciones</p>
<p>TICKS=TICKS +1  ‘incrementa el contador</p>
<p>if ticks&lt;61 THEN SINACTUALIZAR ‘ se escapa hasta que el contador no supere el valor de 61</p>
<p>TICKS=0</p>
<p>SEGUNDO=SEGUNDO+1  ‘se incrementa los segundos</p>
<p>IF SEGUNDO=60 THEN ‘un minuto tiene 60 segundos</p>
<p>SEGUNDO=0</p>
<p>MINUTO=MINUTO+1 ‘se incrementan los minutos</p>
<p>IF MINUTO=60 THEN ‘una hora tiene 60 minutos</p>
<p>MINUTO=0</p>
<p>HORA=HORA+1</p>
<p>IF HORA=24 THEN  ‘un dia son 24 horas</p>
<p>HORA=0</p>
<p>semana=semana+1</p>
<p>if semana=7 then ‘cada semana son 7 días</p>
<p>semana=0</p>
<p>endif</p>
<p>ENDIF</p>
<p>ENDIF</p>
<p>ENDIF</p>
<p>SINACTUALIZAR:</p>
<p>INTCON.2=0   &#8216;   REACTIVA TMR0</p>
<p>RESUME</p>
<p>ENABLE  ‘reactiva interrupciones</p>
<p>END  ‘fin rutina interrupciones</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/271/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=271&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2009/09/08/introduccion-al-pic-basic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>
	</item>
		<item>
		<title>Electrónica de una bicicleta Electrica</title>
		<link>http://soloelectronicos.wordpress.com/2009/09/02/electronica-de-una-bicicleta-electrica/</link>
		<comments>http://soloelectronicos.wordpress.com/2009/09/02/electronica-de-una-bicicleta-electrica/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 12:07:19 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[Bicicleta Electrica]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=267</guid>
		<description><![CDATA[En   http://bicicletaselectricas.wordpress.com/  puedes encontrar informacion sobre:

 Generalidades bicicletas electricas
 Controladores e-bike
Reparacion e-bike
Programas de control
Todo lo referente al funcionamiento de las bicicletas  electricas

       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=267&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En   <a href="http://bicicletaselectricas.wordpress.com/">http://bicicletaselectricas.wordpress.com/</a>  puedes encontrar informacion sobre:</p>
<ul>
<li> Generalidades bicicletas electricas</li>
<li> Controladores e-bike</li>
<li>Reparacion e-bike</li>
<li>Programas de control</li>
<li>Todo lo referente al funcionamiento de las bicicletas  electricas</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=267&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2009/09/02/electronica-de-una-bicicleta-electrica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>
	</item>
		<item>
		<title>Como conectar tu dvd con DTS a un amplificador 5.1</title>
		<link>http://soloelectronicos.wordpress.com/2008/12/16/como-conectar-tu-dvd-con-dts-a-un-amplificador-51/</link>
		<comments>http://soloelectronicos.wordpress.com/2008/12/16/como-conectar-tu-dvd-con-dts-a-un-amplificador-51/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 08:42:58 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=214</guid>
		<description><![CDATA[Recientemente  en los reproductores de DVD domesticos los fabricantes han reemplazado la salida  5.1   ( 6 canales de audio separados  en 6 conectores  normalmente RCA)   por la salida coaxial DTS ( 6 canales multiplexados en un solo RCA) o simplemente un conector de fibra.
Es obvio que todas las personas que tuviesen un amplificador analogico  5.1 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=214&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Recientemente  en los reproductores de DVD domesticos los fabricantes han reemplazado la salida  5.1   ( 6 canales de audio separados  en 6 conectores  normalmente RCA)   por la salida coaxial DTS ( 6 canales multiplexados en un solo RCA) o simplemente un conector de fibra.</p>
<p>Es obvio que todas las personas que tuviesen un amplificador analogico  5.1 standard  sin entrada optica o DTS ( de 6 entradas analogicas ) ya no pueden conectar su  &#8220;viejo&#8221; amplificador  a su nuevo reproductor de DVD son salida DTS u optica &#8230;</p>
<p>Para estos casos he seleccionado un sencillisimo simulador de suuround con un unico Circuito Integrado de bajo coste que nos devolvera ,a  partir de la señal stereo presente en el euroconector,   6 nuevas  señales analogicas  que podremos conectar a nuestro viejo amplificador 5.1</p>
<p> </p>
<div id="attachment_213" class="wp-caption alignnone" style="width: 460px"><img class="size-full wp-image-213" title="decodifocador_20simple_20surronund_209" src="http://soloelectronicos.files.wordpress.com/2008/12/decodifocador_20simple_20surronund_209.gif?w=450&#038;h=292" alt="Simulador Surround" width="450" height="292" /><p class="wp-caption-text">Simulador Surround</p></div>
<p> </p>
<p>El circuito, como puede apreciarse ,obtiene por un lado  una unica salida para los canales traseros  por medio de U1A a atraves de la diferencia de  ambos canales  por medio del Amplicador  Operacional configurado en modo diferencial  y por otro lado, se obtiene una salida suma de ambos canales ( que conectaremos al altavoz Central y  al subwofer)  por medio de  U1B configurado  como seguidor de corriente.  </p>
<p>Para alimentar este circuito  para evitar tener que emplear una alimentacion simetrica utilizaremos simplemente una alimentacion unica de 12 a 15 voltios filtrados y estabilizados  aplicando  para ello el concepto de &#8220;tierra virtual&#8221; ( conectaremos el positivo de alimentacion al pin 8 y el negativo de alimentación al pin 4 y dejaremos las masas como en el esquema sin conectarlas al negativo de la alimentacion)</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=214&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2008/12/16/como-conectar-tu-dvd-con-dts-a-un-amplificador-51/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>

		<media:content url="http://soloelectronicos.files.wordpress.com/2008/12/decodifocador_20simple_20surronund_209.gif" medium="image">
			<media:title type="html">decodifocador_20simple_20surronund_209</media:title>
		</media:content>
	</item>
		<item>
		<title>Control de un  PC a traves de un mando a distancia corriente</title>
		<link>http://soloelectronicos.wordpress.com/2008/08/19/control-de-un-pc-a-traves-de-un-mando-a-distancia-corriente/</link>
		<comments>http://soloelectronicos.wordpress.com/2008/08/19/control-de-un-pc-a-traves-de-un-mando-a-distancia-corriente/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 21:52:43 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=199</guid>
		<description><![CDATA[En efecto , gracias a numero software disponible en la red para los mas variados sistemas operativos, es posible utilizando  un simple receptor de infrarojos   controlar  con un viejo mando a distancia  olvidado  ( de un TV ,video,dvd,etc) la mayoria de las funciones basicas de nuestro PC.
Obviamente la clave esta el sw que usaremos en nuestro Pc , pero no [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=199&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En efecto , gracias a numero software disponible en la red para los mas variados sistemas operativos, es posible utilizando  un simple receptor de infrarojos   controlar  con un viejo mando a distancia  olvidado  ( de un TV ,video,dvd,etc) la mayoria de las funciones basicas de nuestro PC.</p>
<p>Obviamente la clave esta el sw que usaremos en nuestro Pc , pero no debemos despreciar el hardware  necesario(a no ser claro que dispongamos de un ordenador portatil en el que probablemente  no necesitariamos ningun hw adicional ya que este va integrado en el) , el cual  como podemos ver se reduce a un conector DB9,un simple integrado  y unos pocos componentes pasivos.</p>
<p> Por ejemplo  podemos usar  como receptor de infrarojos un tsop17xx, siguiendo el esquema siguiente:</p>
<p> </p>
<p> </p>
<p> </p>
<p><a href="http://soloelectronicos.files.wordpress.com/2008/08/receptor_irda_pc.jpg"><img class="alignnone size-medium wp-image-200" src="http://soloelectronicos.files.wordpress.com/2008/08/receptor_irda_pc.jpg?w=300&#038;h=169" alt="" width="300" height="169" /></a></p>
<p>Lista de componentes:</p>
<p> </p>
<p>IC &#8211; TSOP1738<br />
<a href="http://en.wikipedia.org/wiki/Resistor">Resistencia </a> &#8211; <a href="http://www.sorion-group.com/Resistor/resistor.htm">3k3</a> or <a href="http://www.sorion-group.com/Resistor/resistor.htm">3k3</a> (SMD 1206)<br />
<a href="http://en.wikipedia.org/wiki/Condensator">Condensador</a> &#8211; Ceramic 100nF or 2u2 (SMD 1206) (100nF &#8211; 10uF)<br />
<a href="http://en.wikipedia.org/wiki/Zener_diode">Zener diode</a> &#8211; 5V1 or 5V1 (SOT23)<br />
<a href="http://www.camiresearch.com/Data_Com_Basics/RS232_standard.html">RS232</a> conection &#8211; 9pin Female</p>
<p> </p>
<p>Sw comercial</p>
<p>En cuanto el sw necesario es interesante el sw de Girder , cuya version ultima es la 4.0.Se puede compar en <a href="http://www.promixis.com/">www.promixis.com/</a>.</p>
<p>Sw gratuito:</p>
<p><a href="http://winlirc.sourceforge.net/">http://winlirc.sourceforge.net/</a></p>
<p><a href="http://www.ziplabel.com/cir/software.html">http://www.ziplabel.com/cir/software.html</a></p>
<p> </p>
<p>fuentes:<a href="http://www.instructables.com/id/PC-remote-control/">http://www.instructables.com/id/PC-remote-control/</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/soloelectronicos.wordpress.com/199/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/soloelectronicos.wordpress.com/199/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/199/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=199&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2008/08/19/control-de-un-pc-a-traves-de-un-mando-a-distancia-corriente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>

		<media:content url="http://soloelectronicos.files.wordpress.com/2008/08/receptor_irda_pc.jpg?w=300" medium="image" />
	</item>
		<item>
		<title>Reactancia para fluorescente de 220v a 12v</title>
		<link>http://soloelectronicos.wordpress.com/2008/08/08/reactancia-para-fluorecente-de-220v-a-12v/</link>
		<comments>http://soloelectronicos.wordpress.com/2008/08/08/reactancia-para-fluorecente-de-220v-a-12v/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 21:49:34 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[Domotica]]></category>
		<category><![CDATA[reciclaje]]></category>
		<category><![CDATA[fluorecente a 12V]]></category>
		<category><![CDATA[Reactancia 12V]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=161</guid>
		<description><![CDATA[Realmente en la  epoca que nos ha tocado vivir seria muy  triste  no tener iluminado correctamente un trastero,caseta , garage ,caseta ,etc simplemente por no tener accesible una toma de c.a, a mano cuando por muy poco dinero se puede iluminar este de un modo económico ,eficiente  y con  una gran autonomia gracias a un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=161&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Realmente en la  epoca que nos ha tocado vivir seria muy  triste  no tener iluminado correctamente un trastero,caseta , garage ,caseta ,etc simplemente por no tener accesible una toma de c.a, a mano cuando por muy poco dinero se puede iluminar este de un modo económico ,eficiente  y con  una gran autonomia gracias a un simplisimo  circuito oscilador el cual seria alimentado por una   pequeña bateria de 12v  /7AH ( de las usadas en las alarmas o en los cochecitos de juguete)  y utilizaría  un tubo fluoresecente normal  ( este sera  del tipo común y no  es necesario que sea nuevo, pues incluso puede llegar a funcionar un tubo que con la reactancia y arrancador tradicional no funcione dado que en este tipo de circuito no se emplean los filamentos)</p>
<p> <a href="http://soloelectronicos.files.wordpress.com/2008/08/reactancia-cebador-12v.gif"><img class="alignnone size-medium wp-image-165" src="http://soloelectronicos.files.wordpress.com/2008/08/reactancia-cebador-12v.gif?w=300&#038;h=215" alt="" width="300" height="215" /></a></p>
<p>Como se observa en el esquema el circuito es simplemente un oscilador de ca construido a  partir de dos viejos transitores de potencia  con encpasulado TO3 :los 2N3055 ( muy usados en etapas de potencia de audio)</p>
<p> El circuito genera alta tensión alterna a partir de corriente continua,para lo cual conmuta alternativamnte  los transistores  de potencia T1 y T2  de modo que cuando uno está en saturación el otro se encuentra en corte y viceversa. El tiempo de saturación y corte  de cada transistor lo determina cada red  RC formado por la resistencia de 220 Ω y el condensador de 22nF.</p>
<p>Por ultimo el condensador de 100nF filtra la línea de posibles estáticas de A.F. generadas por el oscilador.</p>
<p> </p>
<p style="margin:0;"><strong>Elementos necesarios:</strong></p>
<p style="margin:0;">- 2 Condensadores de 22/50V nF y 1 de 100 nF/50V</p>
<p style="margin:0;">- 2 Resistencias de 220 Ω y 2W</p>
<p style="margin:0;">- 1 Transformador de 200v /12 +12v  0,5Amp  con toma intermedia</p>
<p style="margin:0;">- 2 Transistores 2N3055</p>
<p style="margin:0;">- 1 tubo Fluorescente 40W/220V</p>
<p style="margin:0;">-1 soporte para fluorecente  ( son cebador ni reactancia pues no la necesitamos)</p>
<p style="margin:0;">-1 Bateria de 12V de 7AH</p>
<p style="margin:0;">-1 Interuptor de corte</p>
<p style="margin:0;">-Varios:caja  para albergar la bateria con el interruptor, placa de montaje, tornilleria,etc</p>
<p style="margin:0;"> </p>
<p style="margin:0;">NOTA IMPORTANTE: para todas aquellas personas que no deseen realizar el circuito presentado , el conjunto tubo más reactancia suelen estar disponible comercialmente con alimentación a 12V ( obviamente  montado )en las tiendas especializadas ( a un precio algo superior al qeu nos costaria hacerlo por nosotros mismos)</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/soloelectronicos.wordpress.com/161/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/soloelectronicos.wordpress.com/161/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/161/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=161&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2008/08/08/reactancia-para-fluorecente-de-220v-a-12v/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>

		<media:content url="http://soloelectronicos.files.wordpress.com/2008/08/reactancia-cebador-12v.gif?w=300" medium="image" />
	</item>
		<item>
		<title>Como grabar un PIC16Fxx desde un portatil con el TE20(JDM)</title>
		<link>http://soloelectronicos.wordpress.com/2008/07/24/como-grabar-un-pic16fxx-desde-un-portatil-con-el-te20jdm/</link>
		<comments>http://soloelectronicos.wordpress.com/2008/07/24/como-grabar-un-pic16fxx-desde-un-portatil-con-el-te20jdm/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 18:41:02 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[PC's]]></category>
		<category><![CDATA[grabador_smt1]]></category>
		<category><![CDATA[JDM]]></category>
		<category><![CDATA[PIC16F]]></category>
		<category><![CDATA[TE20]]></category>
		<category><![CDATA[te20x]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=111</guid>
		<description><![CDATA[ By CRN
El programador JDM es una solución de bajo coste para la introducción de un programa en la memoria flash interna del PIC. Además de los planes originales de Jens Dyekjær Madsen, también hay muchos esquemas modificados en la web, entre elllos el TE20, el  TE20x  o el grabador_smt1.De destacar R1 y el voltaje [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=111&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em><a href="http://soloelectronicos.wordpress.com/about/"> By CRN</a><br />
El programador JDM es una solución de bajo coste para la introducción de un programa en la memoria flash interna del PIC. Además de los planes originales de Jens Dyekjær Madsen, también hay muchos esquemas modificados en la web, entre elllos el TE20, el  TE20x  o el grabador_smt1.De destacar R1 y el voltaje de D5 son modificaciones adicionales que son necesarias para todos los PICs recientes que vienen con una capacidad de programación de bajo voltaje (que, de hecho, el programador JDM no utiliza y debe ser deshabilitada con la resistencia pulldown en el pin RB3) y un valor ligeramente incrementado para el diodo Z para cumplir las especificaciones de programación del PIC16F87x y PIC18F452.</p>
<p><a href="http://soloelectronicos.wordpress.com/como-grabar-un-pic16fxx-con-el-jdm-con-un-portatil/"> Saber mas &gt;&gt;&gt;  </a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/soloelectronicos.wordpress.com/111/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/soloelectronicos.wordpress.com/111/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/111/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=111&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2008/07/24/como-grabar-un-pic16fxx-desde-un-portatil-con-el-te20jdm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>
	</item>
		<item>
		<title>Simplisimo osciloscopio usb sin PIC</title>
		<link>http://soloelectronicos.wordpress.com/2008/07/08/simplisimo-osciloscopio-usb-sin-pic/</link>
		<comments>http://soloelectronicos.wordpress.com/2008/07/08/simplisimo-osciloscopio-usb-sin-pic/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 11:33:44 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[Instrumentacion]]></category>
		<category><![CDATA[PC's]]></category>
		<category><![CDATA[Osicloscopio]]></category>
		<category><![CDATA[Usb]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=51</guid>
		<description><![CDATA[ By CRN

Es sabido que existe una multitud de programas que explotan las capacidades de adquisición de datos de las tarjetas de sonido para convertir nuestro PC en un osciloscopio virtual, pero si bien es cierto que podemos ver el aspecto de la señal, no podemos cuantificar, tanto en corriente alterna, como en corriente continua, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=51&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em><a href="http://soloelectronicos.wordpress.com/about/"> By CRN</a><br />
<a href="http://soloelectronicos.files.wordpress.com/2008/07/osciloscopio1.jpg"><img class="alignnone size-medium wp-image-52" src="http://soloelectronicos.files.wordpress.com/2008/07/osciloscopio1.jpg?w=300&#038;h=187" alt="" width="300" height="187" /></a></p>
<p>Es sabido que existe una multitud de programas que explotan las capacidades de adquisición de datos de las tarjetas de sonido para convertir nuestro PC en un osciloscopio virtual, pero si bien es cierto que podemos ver el aspecto de la señal, no podemos cuantificar, tanto en corriente alterna, como en corriente continua, el nivel de esta, siendo esta circunstancia realmente una seria limitación si lo que realmente se pretende es conocer la magnitud de la señal a medir y por tanto emular un verdadero osciloscopio.</p>
<p>Sirviéndonos de la ingeniería inversa, por muy poco dinero se propone realizar un pequeño cambio, bien en&gt;su tarjeta de sonido o bien en un modulo usb de bajo coste, para solventar esta grave limitación y realmente poder cuantificar el nivel de cualquier señal aplicada a su entrada y por tanto obtener un verdadero sistema de adquisición de datos cuyas principales premisas serán: su bajísimo coste, su alta fiabilidad, su sencillez constructiva y su alta flexibilidad.</p>
<p>Gracias a la técnica descrita en estas líneas pues y un pequeño circuito, el lector podrá cuantificar de una manera muy precisa cualquier variable física susceptible de ser transformada en una variación de voltaje como pueden ser: intensidad, resistencia, capacidad, inductancia, temperatura, humedad, luminosidad, presión y un largo etcétera.</p>
<p>Como complemento al circuito se presenta un pequeño programa gratuito escrito en Delhi 7 por el autor que funcionara sobre Windows Vista,cuya descarga es gratuita en est a misma Web del autor en el apartado de descargas y que el lector podrá utilizar de forma multidisciplinar tanto en modo osciloscopio de doble trazo como sistema de adquisición de datos&#8230;.<br />
<a href="http://personal.telefonica.terra.es/web/soloelectronicos/osciloscopio.htm">Saber mas &gt;&gt;</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/soloelectronicos.wordpress.com/51/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/soloelectronicos.wordpress.com/51/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/51/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=51&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2008/07/08/simplisimo-osciloscopio-usb-sin-pic/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>

		<media:content url="http://soloelectronicos.files.wordpress.com/2008/07/osciloscopio1.jpg?w=300" medium="image" />
	</item>
		<item>
		<title>Red de audio y video con solo dos CI</title>
		<link>http://soloelectronicos.wordpress.com/2008/07/08/red-de-audio-y-video-con-solo-dos-ci/</link>
		<comments>http://soloelectronicos.wordpress.com/2008/07/08/red-de-audio-y-video-con-solo-dos-ci/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 11:30:09 +0000</pubDate>
		<dc:creator>soloelectronicos</dc:creator>
				<category><![CDATA[audio y video]]></category>
		<category><![CDATA[CATV]]></category>
		<category><![CDATA[red]]></category>
		<category><![CDATA[Transmisores]]></category>

		<guid isPermaLink="false">http://soloelectronicos.wordpress.com/?p=47</guid>
		<description><![CDATA[ By CRN

Probablemente el lector aducirá que existen en el mercado transmisores de audio/video inalámbricos en la banda de 2,4G que cumplen este requerimiento. Esta solución si bien corrige ciertas deficiencias ,exigen de un transmisor de video y audio vía radio y de tantos receptores dedicados como se necesiten ( lo cual encarece terriblemente el [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=47&subd=soloelectronicos&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em><a href="http://soloelectronicos.wordpress.com/about/"> By CRN</a><br />
<a href="http://soloelectronicos.files.wordpress.com/2008/07/reddomestica2.jpg"><img class="alignnone size-medium wp-image-48" src="http://soloelectronicos.files.wordpress.com/2008/07/reddomestica2.jpg?w=300&#038;h=251" alt="" width="300" height="251" /></a></p>
<p>Probablemente el lector aducirá que existen en el mercado transmisores de audio/video inalámbricos en la banda de 2,4G que cumplen este requerimiento. Esta solución si bien corrige ciertas deficiencias ,exigen de un transmisor de video y audio vía radio y de tantos receptores dedicados como se necesiten ( lo cual encarece terriblemente el resultado final), pero aun así, al menos en las soluciones comerciales probadas para una recepción perfecta, exigen en la mayoría de las veces un alcance visual entre emisor y receptor que no siempre es posible de disponer (y además la transmisión no esta libre de interferencias al cruzar objetos entre ambos extremos)</p>
<p>Precisamente para solucionar este problema, se pensó en una solución cableada, pero no siempre es posible realizar un tendido de audio y video por toda una vivienda&#8230; ¿existe pues alguna otra solución posible?</p>
<p>Efectivamente la existe, pues en la mayoría de las viviendas (ya sea una vivienda individual o un edificio de varias viviendas) existe una distribución de antena bastante normalizada que por lo general se apoya bien en un amplificador multibanda ( en el caso de una única vivienda) o en varios amplificadores dedicados(en el caso de una instalación colectiva) y desde la salida de estos, apoyándose en tantos distribuidores como sea necesario, se llega hasta cada vivienda y allí nuevamente se montaran tantos distribuidores como se precisen para cubrir las habitaciones necesarias.</p>
<p><a href="http://personal.telefonica.terra.es/web/soloelectronicos/RED%20DOMESTICA%20DE%20AUDIO%20Y%20VIDEO.htm">Saber mas..&gt;&gt;</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/soloelectronicos.wordpress.com/47/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/soloelectronicos.wordpress.com/47/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/soloelectronicos.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/soloelectronicos.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/soloelectronicos.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/soloelectronicos.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/soloelectronicos.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/soloelectronicos.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/soloelectronicos.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/soloelectronicos.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/soloelectronicos.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/soloelectronicos.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=soloelectronicos.wordpress.com&blog=4170355&post=47&subd=soloelectronicos&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://soloelectronicos.wordpress.com/2008/07/08/red-de-audio-y-video-con-solo-dos-ci/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7328bc4c4eed8a037d6e823aed2dc0a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">soloelectronicos</media:title>
		</media:content>

		<media:content url="http://soloelectronicos.files.wordpress.com/2008/07/reddomestica2.jpg?w=300" medium="image" />
	</item>
	</channel>
</rss>