Ucontrol Revista 0001
Ucontrol Revista 0001
Ucontrol Revista 0001
Usando LCDs
PIC BASIC
.inicio
el relojito sistema de proteccin de altavoces fundamentos de la transmisin sincrnica construye tus propios PCB uso prctico del PIC12F675 usando LCDs primera parte los herederos del LM386 PIC BASIC control de volumen digital registros de desplazamiento CD4094 primera parte sensor de humo con LED y LDR temporizadores programables control de velocidad de motores con CC por PWM con NE555 0x04 0x08 0x0B 0x0F 0x13 0x19 0x1E 0x20 0x26 0x28 0x2A 0x2D 0x2F
.editorial
0x32
Direccin y Redaccin:
Ariel Palazzesi Argentina [email protected] www.ucontro.com.ar Reiner Torres Labrada Cuba [email protected]
Redactores:
Mario Sacco Argentina [email protected] Carlos Ortega Sabio Espaa [email protected] Diego Mrquez Garca - Cuervo [email protected] www.picmania.garcia-cuervo.net Marcos Lazcano Argentina [email protected] Pedro Palitroquez Venezuela [email protected] Vernica C. Lavore Argentina [email protected]
Diseo:
Por fin, y luego de varios meses de trabajo, el primer nmero de la Revista uControl est en tus manos. Todo proyecto nuevo necesita de un tiempo de maduracin, y este no ha sido la excepcin. Si bien desde el principio el concepto de la revista estaba claro, faltaba pulir decenas de detalles. Sabamos que bamos a escribir una revista que le fuese de utilidad al estudiante, al hobbista y tambin al que ya sabe bastante de electrnica. Tenamos como premisa utilizar un lenguaje claro, ameno, que permitiese establecer una comunicacin efectiva entre quien escribe y quien lee. bamos a publicar mucha informacin, que si bien a veces est disponible en la web, no se encuentra en espaol o bien no est completa. Sin embargo, una cosa es saber que se quiere hacer, y otra muy diferente es transformar esa idea en algo concreto. Aunque suene extrao, lo ms fcil fue escribir todo el contenido que llena las pginas de este ejemplar. La tarea de diseo grafico (gracias Vernica!) fue todo un desafo. De nada serva tener buenos artculos si resultaban difciles de leer, culpa de una tipografa desafortunada o por una maquetacin equivocada. Todos los que formamos parte del staff de esta revista nos dedicamos a la electrnica. Algunos programan microcontroladores, otros desarrollan proyectos para empresas, y los ms afortunados incluso obtienen sus ingresos de esta fascinante ciencia que es la electrnica. Pero es la primera vez que trabajamos juntos. Y para muchos, tambin es la primera vez que publican un trabajo en una revista. Estamos orgullosos del resultado de nuestro trabajo, y sabemos que a medida que transitemos este camino que hoy inauguramos, el resultado ser an mejor. Este es el primer ejemplar de una publicacin que esperamos este mucho tiempo entre nosotros. Aportando un pequeo granito de arena en tu trabajo, en tu carrera o en tu hobby. Est claro que se trata de un objetivo ambicioso, y que no podremos lograrlo sin tu ayuda. Para nosotros es muy importante conocer tu opinin y saber cules son los temas que te gustara ver desarrollados en los nmeros siguientes. Puedes enviarnos tus sugerencias, crticas o colaboraciones a [email protected]. Prometemos contestar todos los mails. El contenido de las notas publicadas, salvo indicacin contraria, es de libre distribucin. Eso significa que puedes usarlo para lo que quieras, aunque eso s, citando a su autor y a la revista. A lo largo del 2008 cada 64 das exactos habr un nuevo ejemplar de la Revista uControl. Ese es nuestro compromiso. Hasta el prximo nmero!
.staff
.indice
//pgina 0x02
.proyectos
//Ariel Palazzesi
el relojito
primera parte
El relojito es un reloj de pared bastante especial. Adems de dar la hora (como todo reloj que se precie de tal), tambin nos muestra la temperatura ambiente. Pero lo que lo hace diferente a la mayora de los relojes electrnicos, cuyos esquemas puedes encontrar navegando por la web, es la forma en que est construido su particular segundero. En efecto, en lugar de indicar el trans-curso de los segundos mediante un par de display LED de 7 segmentos, como es habitual, lo hace mediante 60 diodos LED dispuestos en forma de circulo a lo largo del borde exterior del circuito impreso que aloja todos los componentes del reloj.
.Descripcin del proyecto
namiento. Adems, hemos dotado al reloj de 4 pequeos pulsadores, que servirn para llevar a cabo las tareas de puesta en hora, seleccin del modo de funcionamiento, etc. Hemos dividido este artculo en dos partes, ya que de no hacerlo resultara muy extenso. En este nmero explicaremos detalladamente el funcionamiento del hardware, y en el nmero siguiente veremos paso a paso como programarlo.
El reloj que vamos a construir puede indicar la hora y los minutos mediante 4 display LED de 7 segmentos, en el formato HH:MM, donde los : centrales estn constituidos por dos pequeos LEDs de 3mm. Estos displays tambin se utilizan para mostrar la temperatura, que se obtiene mediante un sensor de temperatura Dallas DS1820. Para mantener funcionando el reloj con una exactitud razonable se ha utilizado un reloj de tiempo real DS1307. El segundero, como decamos, es una circunferencia formada por 60 LEDs de 5mm, controlados solamente con dos pines del PIC16F628A. Esto es posible gracias a que se utiliza de un registro de desplazamiento construido con 8 circuitos integrados 74HC164N. En este mismo nmero de uControl encontraras la explicacin de su funcio-
.El circuito
Si bien el circuito del Relojito puede resultar intimidante por su tamao (emplea 18 circuitos integrados y ms de 100 resistores) en realidad no es tan complejo como parece. El corazn del esquema es un PIC16F628A, que se encarga de llevar a cabo todas las tareas necesarias. Este microcontrolador emplea como oscilador generador de pulsos de reloj un cristal de 4MHz, con dos condensadores de 22pF, conectados a los pines 15 y 16. Los pulsadores encargados de la gestin de la puesta en hora y seleccin del modo de funcionamiento se encuentran conectados a los pines 10, 11, 12 y 13, que corresponden a los bits 4, 5 ,6 y 7 del PORTB. Cada uno de estos pines se ha puesto a GND mediante un resistor de 10K, al presionar un pulsador, el pin correspondiente se pone a +V. La temperatura se lee desde un sensor Dallas DS1820, conectado al pin 4 del microcontrolador. Este pin corresponder al bit 5 del PORTA.
//pgina 0x04
.proyectos
Este es el esquema elctrico de nuestro reloj (puedes descargarlo desde www.ucontrol.com.ar ) Para mantener la exactitud del reloj empleamos un pequeo circuito integrado, tambin de Dallas, que se encarga de contar el tiempo por nosotros. Se trata del DS1307, de 8 pines, que dispone de su propio cristal (de 32.768 KHz) y de una pila CR-2032 de 3V de respaldo. Esta pila proporciona la energa necesaria para que el DS1307 siga funcionando en caso de falta de energa proveniente de la fuente de alimentacin principal. Esto evitar tener que volver a poner en hora el reloj cada vez que lo desenchufemos de la red elctrica. Para mostrar tanto la informacin correspondiente a las horas y minutos como los datos de la temperatura, se emplearon 4 display LED de 7 segmentos de unos 3.5 centmetros de altura. El modelo elegido fue el C-1021H de Paralight. Se trata de display de ctodo comn, donde cada segmento est constituido por dos LEDs rojos en serie. Los : centrales estn formados por dos LEDs de 3mm conectados en serie, del mismo color que los displays, y son manejados desde el pin 7 del microcontrolador (PORTB.1) Dado que el multiplexar estos displays mediante las tcnicas tradicionales hubiese exigido un elevado nmero de pines de E/S del microcontrolador PIC16F628A, se utiliz un registro de desplazamiento construido a partir de cuatro circuitos integrados 74HC164N conectados en cascada. Cada una de las salidas de estos integrados controla uno de los segmentos de los displays. El pin 17 del microcontrolador (bit 0 del PORTA) se encarga de proporcionar los datos al registro de desplazamiento, mientras que el pin 18 (bit 1 del PORTA) entrega los pulsos de reloj necesarios. El mismo truco del registro de desplazamiento se utiliz para controlar los 60 LEDs que conforman el segundero. Esta vez fueron necesarios 8 circuitos integrados 74HC164N. Este registro dispone de 64 salidas, de las que se aprovechan solo las primeras 60. Cada una de estas salidas controla uno de los LEDs a travs de un resistor que limita la corriente que los atraviesa. Dado que el consumo mximo posible de este proyecto es bastante elevado para lo que estamos acostumbrados, hemos dividido la etapa de alimentacin en tres partes, cada una de ellas encargada de proporcionar energa a una de las secciones del reloj. De esta manera, una de las etapas construidas alrededor de un regulador de voltaje LM7805 proporciona la corriente que necesita el microcontrolador, el sensor de temperatura y el reloj de tiempo real. Otra de las etapas alimenta los displays y el registro de desplazamiento que lo controla, y la tercera hace lo propio con los LEDs del segundero y sus circuitos integrados de control. Si bien no figuran en el esquema elctrico, hemos colocado condensadores cermicos de 0.1uF entre los pines de alimentacin de cada uno de los 74HC164N. Se pueden ver en las fotos, estn soldados directamente sobre las pistas del PCB.
//pgina 0x05
.proyectos
.El circuito impreso
Como es de suponer, para albergar todo esto hace falta un circuito impreso bastante grande. Dado que en uControl intentamos mantener las cosas simples, por lo general no utilizamos circuitos integrados ni componentes de montaje superficial ni PCB de doble faz. Esto tambin ayud a que el PCB sea grande.
El circuito impreso mide 18 centmetros de dimetro. Quizs el rasgo ms representativo de este circuito impreso sea su forma, ya que nos hemos apartado del clsico diseo rectangular o cuadrado y lo hemos dibujado como una circunferencia, de forma que los LEDs del segundero adopten la misma disposicin que tendran las marcas en la esfera de un reloj de aguja. El dimetro de la placa de circuito impreso es de 18 centmetros. Cortarla con forma de circunferencia es bastante trabajoso, pero no imposible. De todos modos, aquellos que no se animen a cortar el PCB con esta forma, pueden simplemente utilizar un PCB cuadrado de 18 centmetros de lado con el dibujo que proponemos en el centro.
Para construir el PCB basta con utilizar el diseo que puede descargarse en formato PDF desde uControl, e imprimirlo siguiendo los pasos de nuestro tutorial Como construir tus propios PCB.
.Componentes
La lista de componentes que vamos a emplear es bastante extensa, pero afortunadamente se trata de componentes de bajo costo, por lo que se trata de un proyecto al alcance de todos los bolsillos.
//pgina 0x06
.proyectos
La lista de materiales necesarios:
12 circuitos integrados 74HC164N. 92 resistores de 220 ohm, 1/8 de Watt. 7 resistores de 10K, 1/8 de Watt. 1 circuito integrado DS1307. 1 microcontrolador PIC16F628A. 1 sensor de temperatura DS1820 1 cristal de 4 MHz. 1 cristal de 32.768 KHz. 14 condensadores cermicos de 100 nF (0.1uF). 2 condensadores cermicos de 22pF. 1 condensador electroltico de 220uF/16V. 1 zcalo para pila CR-2032 4 displays de ctodo comn C-1021H de Paralight. 2 LEDs rojos de 3mm. 60 LEDs rojos de 5mm. 1 diodo 1N4001. 1 bornera para circuito impreso de dos tornillos. 4 pulsadores de 8mm para circuito impreso. 3 reguladores de voltaje LM7805.
.Conclusin
Hemos terminado con el montaje del hardware de nuestro relojito. En el prximo nmero de la revista aprenderemos a programarlo. Mientras tanto, puedes leer los artculos sobre registros de desplazamiento que publicamos en este ejemplar: seguramente te sern de utilidad para comprender el funcionamiento del programa de este proyecto.
Tambin necesitaras un trozo de PCB virgen de una sola cara, con un tamao de 18x18 centmetros, y zcalos para los circuitos integrados
En el prximo nmero veremos cmo programar el microcontrolador.
.Montaje
No hay complejidades importantes asociadas al montaje de los componentes de este proyecto. Una buena idea es comenzar el trabajo de soldadura por los puentes y zcalos, para luego seguir con los resistores y condensadores. Los displays, reguladores de voltaje y LEDs deberan montarse en ltimo lugar, cuidando de que estn en la posicin correcta. Ser un trabajo que tomara al menos una o dos horas, as que hay que encararlo con paciencia. Una vez que todo est en su lugar, y antes de colocar los circuitos integrados en sus zcalos, podemos alimentar el relojito y comprobar que a la salida de cada regulador de voltaje tenemos 5V. Tambin podemos medir la tensin en los pines de los zcalos encargados de alimentar a cada integrado, para no tener alguna sorpresa desagradable. Entre los pines 7 y 14 de cada 74HC164N debe haber 5V, lo mismo que entre los pines 5 y 14 del zcalo correspondiente al microcontrolador. Si todo est bien, podemos poner cada integrado en su sitio, cuidando ponerlos en la direccin correcta.
//pgina 0x07
.circuitos
//Mario Sacco
FIGURA 1: Un puado de transistores bastar para proteger nuestro sistema de altavoces. (Descargalo de www.ucontrol.com.ar)
//pgina 0x08
.circuitos
A travs de los fusibles FU1 y FU2, la tensin de Cuando un amplificador de audio funciona norcorriente alterna (CA) obtenida del transformador, toma malmente, existe en su salida, una tensin variable en el dos caminos muy diferentes. Por un lado, atraviesa los tiempo y en funcin de los sonidos que se estn escucontactos Normalmente Cerrados (NC) de RL1 hacia la chando. Por lo general la misma debe mantenerse dentro fuente de alimentacin del amplificador de potencia; y por de los parmetros normales de funcionamiento para que otro, se conecta a la fuente de alimentacin del sistema de trabajen todos los eslabones de la cadena de audio, de proteccin. forma armoniosa, estable y en los mrgenes de seguridad Una vez atravesados los contactos NC de RL1, deseados. nos encontramos con el puente rectificador BR1, los ca- Si la tensin de salida del amplificador, se hace pacitores electrolticos C5 y C6, y los indicada vez ms alta producto del aumencadores LED, que son opcionales. Comto de volumen de audio, nos estaremos La tensin de salida pletan este subsistema, los capacitores acercando peligrosamente a que la misdebe mantenerse de desacoplo de 100nF C9 y C10, que se ma est muy prxima o iguale a Vcc, tanutilizan para suprimir el ruido de alta fre- dentro de los parametros to en su polaridad positiva como negativa. cuencia. Hasta aqu tenemos una fuente normales para que traba- En estos casos, el sistema de proteccin de alimentacin simtrica, que se utilizar jen todos los eslabones debe entrar en accin y desconectar la para alimentar el amplificador de potenalimentacin del amplificador de potende la cadena de audio. cia. cia. A travs de R3, D3, C7 y C8, Para saber si a la salida del amobtendremos una tensin cuyo valor debe ser 12 V, la cual plificador existe una tensin de CD peligrosa, R6 y R7 topodremos fijar mediante el potencimetro R3. Esta ten- man una muestra de ambos canales de salida de audio. sin alimenta al subsistema de desconexin automtica. Q1 y Q2 trabajan normalmente en sus regiones activa y Como habamos visto antes, la tensin de CA ob- de corte. Si la tensin en R6 o R7 crece demasiado, puetenida de TR1 atraviesa tambin R4 y R5, hacia BR2 quin den llevar a Q1 o Q2 al estado de saturacin, desencadese encargar de rectificarla y entregarnos una tensin de nando el proceso de desconexin del amplificador. aproximadamente 2V. Esta tensin alimenta el subsiste- El capacitor C11 se encarga de retardar el moma de deteccin de corriente directa (CD). mento de conduccin de Q1 o Q2, ya que pueden pre-
//pgina 0x09
.circuitos
sentarse picos de tensin provocados por alto volumen y no por problemas o fallas en la etapa de salida. Pero una vez que acta cualquiera de los dos transistores, segn la polaridad de la tensin incidente sobre ellos, el potencial presente en su colector, se drenar a tierra, y el transistor entrar en su regin de saturacin. Este hecho ser detectado por el circuito formado por R8, Q4 y Q3 quienes entrarn en saturacin obtenindose un estado lgico bajo en el colector de Q4 que est alimentado por R9. Hasta aqu tenemos todo el subsistema de deteccin de tensin de CD a la salida del amplificador. Al saturarse Q3 y Q4, provocan que Q5 entre en corte y se eleve el estado lgico de los pines 2 y 6 del CI 555, segn la constante de tiempo del conjunto R10-C15. Una vez que en los extremos de C15 se hayan superado los 2/3 de la tensin de alimentacin del CI 555, este cambiar de estado en su pin 3 de salida, provocando el corte de Q6 y como consecuencia la saturacin de Q7. De esta forma se activar RL1, quien interrumpir el suministro de energa a la fuente de alimentacin de nuestro amplificador. Este conjunto de componentes conforman el subsistema de desconexin automtica. Una vez que el sistema de proteccin se ha activado, permanecer en este estado, interrumpiendo la reconexin del amplificador. Esto se logra gracias a que la alimentacin del subsistema de desconexin automtica, se toma a travs de R3, antes de los contactos del rel. Bsicamente este es el funcionamiento del sistema de proteccin, el que podremos acondicionar fcilmente a nuestros sistemas de sonido, con un poco de imaginacin e ingenio, dotndolo de las prestaciones de los equipos de primera lnea.
//pgina 0x0A
.teora
//pgina 0x0B
.teora
Una conclusin a la que podemos llegar despus de expuesto todo esto sobre la transmisin Asncrona es que es imprescindible saber a priori a qu velocidad vamos a recibir los distintos bits para ajustar nuestra rutina de recepcin a dicha velocidad y mirar as la lnea de transmisin en su momento justo, ni antes ni despus, para recibir cada uno de los bits en el momento en que realmente les corresponde. Cualquier error en el clculo dichos tiempos puede hacernos leer bits fantasmas, debido a que leemos dos veces un mismo bit o porque nos salteamos alguno de ellos. Y por fin llegamos a nuestra Transmisin Sncrona de datos. Sncrono significa con reloj y exactamente eso es lo que necesitamos, un reloj (o dicho en ingls un Clock). La transmisin sncrona necesita de dos lneas, una de datos sobre la que se van a representar los distintos estados de los bits a transmitir y una de reloj donde vamos indicando cuando est disponible cada bit en la lnea de datos. Esta lnea de reloj es la de sincronizacin entre ambos dispositivos, el emisor y el receptor de la transmisin. De esta forma, una transmisin sncrona consiste exactamente en poner el estado de un bit en la lnea de datos, generar un pulso de subida y uno de bajada en la lnea del reloj, poner otro estado de bit en los datos, volvemos a dar un pulso de subida y bajada en la del reloj... y as hasta completar el nmero de bits que deseemos transmitir. Esta forma de transmisin tiene una clara ventaja, y es que no es necesario poner de acuerdo en velocidad alguna a emisor y receptor de la transmisin. El emisor coloca su bit y genera el pulso en el reloj, el receptor detecta el reloj y mira el estado del bit, y as uno tras otro, a cualquier velocidad, a distinta velocidad cada bit, a toda la velocidad posible. Hay pulso significa hay dato, leo y a esperar otro pulso, ms lento o ms rpido es irrelevante solo es importante aquello de pulso-dato y a empezar de nuevo. La nica limitacin es que al receptor le debe dar tiempo a leer el estado de cada bit tras detectar el pulso de reloj antes de que aparezca un nuevo pulso. Notad que en estos ejemplos estamos utilizando la lgica negativa es decir que detectamos los pulsos estando la lnea en alto cuando cae a bajo, o sea recibiendo primero un flanco de bajada y despus uno de subida para conformar un pulso. Todo lo que estamos tratando sera exactamente igual con los pulsos al revs, en lgica positiva con el flanco de subida primero y el de bajada despus. Esta configuracin con las lneas en alto y dando pulsos negativos es la ms utilizada debido a la estabilidad y resistencia al ruido que tienen. Se consigue conectando una resistencia a VCC para que mantenga la lnea a estado alto y nuestro emisor genera los pulsos poniendo la lnea a GND. El receptor est constantemente recibiendo el estado alto y detecta cada pulso cuando pasa a bajo. Este es el concepto de Pull-Up.
pgina 0x0C
.teora
Las funciones que vamos a implementar son: Transmite_Bit_Clock_and_Data y Transmite_Byte_Clock_and_Data
Ahora vamos a ver cmo podemos implementar una simple comunicacin sncrona en C. Utilizaremos el compilador CCS, sobre el que incluiremos un tutorial completo en prximos nmeros de la revista. Las funciones para transmitir de forma sncrona que vamos a implementar son dos: Transmite_Bit_ Clock_and_Data y Transmite_Byte_Clock_and_Data. La primera de ellas coloca el estado de un bit en la lnea Data y genera un pulso en la de Clock. La segunda se encarga de extraer, bit a bit, el contenido de un byte (8 bits) y llamar a la funcin anterior. Para las funciones de recepcin sncrona vamos a usar el recurso de la Interrupcin Externa de los PICs, eligiendo estratgicamente el PIN del reloj (CLOCK) de forma que tengamos disponible una de estas interrupciones. La interrupcin externa la configuramos para detectar los flancos de bajada (ver recuadro sobre la lgica negativa). De esta forma cada vez que se dispara la interrupcin sabemos que tenemos disponible un bit en la lnea de los datos (DATA). Lo recogemos sobre nuestro recByte y contamos uno ms. Cuando lleguemos a 8 bits recogidos tenemos nuestro Byte completo y podemos indicarlo convenientemente poniendo a uno el flag reccomplete. Cuando en main detectamos este reccomplete lo monitorizamos por el puerto serie y reiniciamos todo para recoger el siguiente byte.
Cdigo:
#define OUT_CLOCK PIN_B0 #define OUT_DATA PIN_B1 void Transmite_Bit_Clock_and_Data(int1 bit){ // Coloca Data if( bit==0){ output_high(OUT_DATA); } else{output_low(OUT_DATA); } // Genero pulso en Clock (500 microsegundos 2 Khz) delay_us(250); output_low(OUT_CLOCK); delay_us(250); output_high(OUT_CLOCK); } void Transmite_Byte_Clock_and_Data(char c){ int8 i; int1 b; for(i=0;i<8;i++){ b = bit_test(c,i); Transmite_Bit_Clock_and_Data(b); } }
Cdigo:
#define IN_CLOCK PIN_B0 #define IN_DATA PIN_B1 char recByte=0; int8 nextBit=0; int1 reccomplete=0; // INTERRUPCIN por EXT0 Clock CK (Data - Clock) -------#int_ext ext_isr() { int1 bit; bit=!input(IN_DATA); bit_clear(recByte,nextBit); if(bit==1) bit_set(recByte,nextBit); if(++nextBit=8){ nextBit=0; reccomplete=1; } } // MAIN ------------------------------------void main(void){ ext_int_edge(0,H_TO_L); enable_interrupts(int_ext); enable_interrupts(global); do { // Lectura Completa if(reccomplete==1){ readcomplete=0; putc(recByte); } } while (TRUE); }
pgina 0x0D
.nota de tapa
//Ariel Palazzesi
.Elementos Necesarios
Para encarar la realizaron de un PCB, deberemos tener a mano una serie de elementos que resultan indispensables para dicha tarea. El diseo o dibujo de nuestro circuito impreso. Que podremos realizar utilizando algn programa especializado, como Eagle, Orcad, o hasta con el mismsimo Microsoft Paint incluido en todas las versiones de Windows. El papel. Los mejores para el procedimiento descrito son aquellos utilizados para imprimir revistas o catlogos, consiga alguno que sea delgado, pero no demasiado, porque el calor de la impresora puede deformarlo y con ello atentar contra el resultado final. No tiene por que ser papel virgen, puede estar impreso. La prctica y el uso de distintos papeles le llevar a encontrar el mejor para usted. Impresora LASER. Luego necesitamos una impresora LASER o una fotocopiadora. Como veremos ms adelante, el tner de la impresin es el que formar las pistas de nuestro PCB. Si no disponemos de una, podemos usar cualquier impresora, y llevar el impreso a una fotocopiadora y hacer una copia. Las fotocopias tambin son hechas mediante tner, por lo que gracias a este procedimiento nos haremos de un original para nuestro PCB. La placa virgen o PCB. Tambin debemos comprar en una tienda especializada en componentes electrnicos (donde compramos los dems componentes para nuestros circuitos) una placa de PCB virgen, del tamao adecuado para nuestro proyecto. Estas placas generalmente se consiguen fabricadas en pertinax o sobre fibra de vidrio. Cualquiera de las dos sirve.
La impresin debe ser lser.. El tner de la impresin es el que formar las pistas de nuestro PCB.
La placa donde haremos el PCB. Se consiguen fabricadas en pertinax o sobre fibra de vidrio.
pgina 0x0F
.nota de tapa
Limpiadores. Algn limpiador de uso domstico y un poco de lana de acero, de los mismos que se utilizan para lavar los cacharros de cocina, sern los elementos que nos permitan dejar bien limpia y desengrasada la superficie de la placa. La plancha. Es la herramienta fundamental en el procedimiento, ya que nos permitir transferir el circuito impreso en papel al cobre de la placa. Dominar la tcnica requiere tiempo y prctica, pero una vez que lo consiga, podr hacer casi cualquier tipo de PCB de poca complejidad. El decapante. Lo utilizaremos para retirar el cobre de la placa que no forma parte de las conexiones del circuito. Un cuarto litro de percloruro frrico (o cloruro frrico, el nombre puede variar de un lugar a otro, pero se trata de la misma sustancia), ser suficiente para comenzar. Herramientas y accesorios. Una agujereadora, con una broca de 1.00 mm y otra de 0.75 mm, un recipiente plstico en el que entre la placa, uno metlico en el que entre el recipiente plstico, y una sierra de cortar metales complementan el conjunto de elementos casi indispensables para llevar a buen trmino la confeccin de nuestras PCB.
Si nuestra impresora no es lser, como dijimos antes, llevaremos nuestra impresin a una fotocopiadora Una vez que tenemos listo el dibujo de nuestro cir- y haremos una copia de ella, cuidando que la escala sea cuito impreso, ya sea porque lo hayamos realizado noso- exactamente 1:1 (no todas las fotocopias son idnticas al tros en el ordenador o que lo hayamos bajado de Internet, original) y que la copia no presente rayas o cortes, ya que de ser as, estas imperfecciones se transferirn al PCB. Si debemos transferirlo al papel. En este punto, debemos tener en cuenta un par no estamos conformes con la calidad de la fotocopia, hagade consejos para que el resultado final sea ptimo. En mos sacar otra hasta que veamos que no tiene defectos. Respecto del papel a utilizar, los mejores resulprimer lugar, la escala del dibujo debe ser la adecuada tados los he obtenido utilizando papel para que cuando vayamos a montar los componentes en nuestro PCB, las medi Tener en cuenta: la es- ilustracin, que es un papel de una calidad das coincidan. Por ejemplo, la separacin cala del dibujo debe ser mayor al de resma comn, con un grano ms fino y ligeramente satinado. Incluso estndar entre dos pines consecutivos de la adecuada para que hay aficionados que emplean el papel saun circuito integrado es de 0.1 pulgada (2,54 mm). Si nos atenemos a esto, no cuando vayamos a mon- tinado que obtienen de pginas de las retendremos problemas. Todos los archivos tar los componentes las vistas viejas, con muy buenos resultados. Como puede verse, lo mejor es PDF correspondientes a los PCB de los medidas coincidan. hacer varias pruebas hasta encontrar el proyectos que puedes descargar desde Al transferir el dibujo tipo de papel adecuado antes de comprar www.ucontrol.com.ar estn en la escala correcta, listos para imprimir. al cobre, ste quedar grandes cantidades de un tipo determinado. En segundo trmino, como vereespejado. .Transferencia al cobre mos ms adelante, al transferir el dibujo del papel al cobre la imagen quedar inEn esta etapa del proyecto, debemos transferir el vertida, como si la viramos en un espejo, as que de- bemos tener esto en cuenta al dibujarlo en el ordenador tner del papel al cobre, para lo cual utilizaremos el calor para no terminar con una imagen invertida en el PCB. No que nos brindar la plancha. Una vez cortada la placa virgen a las medidas de es conveniente imprimir nuestro circuito con la opcin de economa de tinta activada, ya que necesitamos una bue- nuestro PCB con la sierra para metales, comenzaremos na cantidad de tner en la copia, dado que es el que se va la limpieza concienzuda de la placa de circuito impreso virgen, para que quede libre de suciedad, y grasa. Utilizaa transferir al cobre.
//pgina 0x10
.nota de tapa
remos para ello el polvo limpiador y la lana de acero, que debe ser lo ms fina posible para que no queden rayas profundas. Algn agente qumico puede resultar til, como por ejemplo un limpia metales y un trapo en lugar de la lana de acero. Podemos probar distintos mtodos, de acuerdo a los elementos que tengamos a mano. Mientras llevamos a cabo esta tarea, podemos aprovechar y enchufar la plancha para que vaya tomando temperatura. Es importante aclarar que algunas marcas de limpiametales depositan sobre el cobre una pelcula protectora, para evitar que el oxigeno presente en el aire oxide el metal, mantenindolo brillante durante mucho tiempo. Pero esa misma capa protectora puede hacer que el percloruro sea incapaz de atacar el cobre, as que tambin aqu debemos probar entre distintas marcas. De todos modos, el uso de la lana de acero da excelentes resultados con poco trabajo. Una vez que el cobre est limpio, alinearemos sobre el PCB el papel con la impresin que hemos hecho, con el dibujo de las pistas hacia el cobre (debemos ver la parte Lana de acero fina, o Virulana. sin imprimir), de manera que cuando apliquemos calor, el toner se funda y se transfiera al cobre. Una vez colocado el papel sobre la placa, lo podemos fijar con cinta adhesiva por el otro lado de la placa, evitando con ello que el papel se corra durante el proceso de planchado y se estropee el circuito. Con la plancha bien caliente planchamos la hoja durante uno o dos minutos, aunque este tiempo puede variar de acuerdo al tipo de tner y la temperatura exacta de la plancha, con lo que casi todo el toner se habr pegado a la cara de cobre del PCB. Para remover el papel del PCB sumergimos la placa en agua del grifo durante unos 5 o 10 minutos (depende del tipo de papel), y luego con los dedos o un trapo mojado iremos desmenuzando el papel con cuidado hasta eliminarlo por completo del PCB. En este momento deberamos tener la placa con el dibujo listo. Solo resta asegurarnos que todas las pistas y nodos se hayan calcado correctamente, y que no hayan quedado pedacitos de papel que puedan evitar la accin del percloruro, dando lugar a cortocircuitos en nuestro PCB terminado.
El papel comienza a desmenuzarse.
//pgina 0x11
.nota de tapa
Este proceso debe ser realizado en un lugar bien ventilado y lejos de los alimentos o zonas donde se preparen o almacenen, debido a los vapores ligeramente txicos que se desprenden del proceso y a que el percloruro frrico es una sustancia txica, lo recomendable es hacer el proceso en el patio o balcn, al aire libre. De igual modo debe tener cuidado sobre el lugar donde almacena esta sustancia y al finalizar todo lo recomendable es lavar bien todo con agua. No tire el percloruro deteriorado por el uso por el cao del desage porque puede estropear las tuberas. El percloruro que utilizamos podemos guardarlo para otra placa, ya que en general, y dependiendo de la superficie del PCB realizado, se puede emplear varias veces. Cuando notemos que el tiempo necesario para acabar el trabajo es demasiado largo (25 o 30 minutos) ser el momento de comprar otro bidn de percloruro. Con la placa ya libre de percloruro, utilizamos nuevamente la lana de acero con el polvo limpiador para remover todos los restos de tner que hay sobre el PCB, y ya tendremos nuestro PCB casi listo, restando solamente efectuar los agujeros para los componentes. Para agujerear la placa, usaremos el taladro y las brocas, cuidando que los agujeros queden centrados sobre los pads del PCB, y que el dimetro de los mismos sea el adecuado para los terminales de los componentes que usaremos. Agujeros demasiado grandes o pequeos impedirn que el resultado final tenga excelente calidad.
Lavamos el PCB con abundante agua.
.Consejos Finales
Para terminar, vamos a mencionar algunos consejos para que nuestro trabajo resulte ms prolijo y satisfactorio. Para dibujar el PCB en el ordenador, se puede utilizar programas comerciales de uso general, como Corel Draw, Autocad, o incluso el sencillo Paint, siempre cuidando de que las dimensiones de los objetos que dibujemos sean las correctas. No es mala idea imprimir en un papel comn una copia y sobre ella medir los componentes para ver si las distancias entre pines son las adecuadas. Existen programas especficos para la realizacin de PCB, como PCBWizard, Pad2Pad, FreePCB o Spicycle, algunos de ellos disponibles en forma gratuita. De todos modos, si nuestro proyecto no es muy complejo, se puede realizar el diseo del PCB tranquilamente sin necesidad de software especializado.
PCB agujereado. Solo resta montar los componentes.
Cuando hagamos nuestros dibujos, podemos pintar los espacios que quedan entre componentes o entre pistas, para que sea menor la superficie que debe atacar el percloruro. Esto har que el tiempo necesario para llevar a cabo la tarea sea menor, y que el percloruro nos sirva para un mayor nmero de placas. El liquido sobrante debemos guardarlo bien tapado, en un lugar fresco y si es posible que no est expuesto a la luz del sol directa, para evitar que se degrade prematuramente. Por favor, sea responsable al eliminar los restos de los productos qumicos empleados.
//pgina 0x12
.tutorial
//pgina 0x13
.tutorial
El Timer1 lo utilizaremos para generar unas bases de tiempos que nos servirn para controlar el parpadeo de los led, refrescar las salidas y controlar cada cuanto tiempo se ejecutan las rutinas del programa en general. ese tiempo el circuito depender del interruptor de encendido de la lmpara del WC. Pasados estos primeros 30 segundos queda en modo de lectura de la alimentacin por la entrada GP2. Cuando el programa detecta que la alimentacin cae, activa el rele aprovechando la carga de C6. De este modo todo el circuito pasa a estar alimentado directamente de la lnea de 220VAC a travs de los contactos del rele, comenzando un periodo de temporizacin de 2 minutos de duracin. Cuando este tiempo a transcurrido, el PIC corta la alimentacin del rele, y este pasa al estado de reposo. Si el interruptor de la pared que controla la lmpara est abierto, el circuito pierde la alimentacin y todo queda sin energa. En caso de que el interruptor siga cerrado, el circuito espera 1 segundo y luego pasa de nuevo al modo de seteado de la alimentacin, quedando en este estado de monitorizacin de la red elctrica esperando a que esta desaparezca para comenzar una nueva temporizacion.
.Objetivos:
El propsito general de este automatismo es el de controlar un ventilador, usado como extractor para el cuarto de bao. El circuito tiene que cumplir tres requisitos bsicos: 1 Cuando est en reposo, el automatismo no puede tener consumo alguno. 2 El circuito ser controlado por un PIC enano, el PIC12F675 3 Deber ser capaz de controlar un ventilador de 220AC o 12V/<180mA. La funcin que realizar el circuito se llevara a cabo de la siguiente forma: En el estado inicial, con el interruptor que controla la lmpara principal del bao en la posicin de abierto, el rele se encuentra en estado de reposo, tal como se ve en el esquema. Al energizar la lmpara mediante el interruptor de la pared, queda tambin alimentado el circuito. El rele no se activa hasta pasados 30 segundos, por lo que durante
//pgina 0x14
.tutorial
C2 es el condensador de desacople del PIC. Este El conector CN3 es una toma de corriente de 220 AC condensador es tan valioso como el mismo PIC as que no directa de red. Cuando se activa el rele, sus contactos suminis- se puede suprimir y ha de estar lo mas cerca posible de tran la energa tanto al circuito como al ventilador 220VAC los pines de alimentacin del integrado. Los LEDs solo se utilizan para saber en que esconectado al CN5, quedando todo alimentado desde la red de forma directa. R9 es un varistor de 275V, y es un tado se encuentra el circuito (a la hora de programar esto nos ayuda mucho para encontrar errores en el cdigo del estupendo filtro de red. Despus del puente rectificador pueden verse los programa), se pueden suprimir ya que el circuito estar condensadores C4 y C1, que son el filtro de la fuente. Si- oculto. El calculo de las resistencias (R8, R7) limitadoras guiendo con el circuito del ventilador de CC, es muy im- de los diodos LED se har de la siguiente forma: portante colocar el condensador C3/10nF para disminuir R = (5V-1.2V) /0.015A, el ruido que genera el motor elctrico y que es inyectado Este es un clculo genrico, siendo 5V la tensin en la fuente. Este condensador tiene que estar lo mas cerde alimentacin, 1.2V el voltaje de la unin ca posible de los contactos del CN4. Para que el PIC pueda del diodo LED (que vara segn su color), Para que el PIC pueda comprobar la perdida de alimentacin se usa un divicomprobar la perdida y por ultimo 0.015A es el la corriente que deseamos atraviese el LED. sor de tensin compuesto por R4 y R5, de alimentacin se usa Para calcular la resistencia (R1) mas la capacidad C7 para dar algo de un divisor de tensin de polarizacin del transistor se utiliza estabilidad a la seal. Tambin nos aprovechamos del diodo interno limitador que compuesto por R4 y una formula tambin genrica: R1 = (5V-0.6V) / 0.001A, tiene este pin y que nos limita la tensin R5, mas la capacidad C7 Debemos recordar que el valor (5.5v) que le llega desde el exterior. D1 y para dar algo de esta de 0.001A solo es aproximado. Para esC6 nos permiten prolongar la alimentacin tar seguros que el transistor estar trabilidad a la seal. del PIC frente a cadas de la alimentacin. bajando en saturacin, el proceso es tan C4 tiene que ser de menor capacidad que simple como multiplicar el valor de la coC6, y se aade R2 que ayuda a la descarga de C4, para rriente de polarizacin (en este caso 1mA) por la ganancia hacer que en el caso de ausencia de tensin el PIC pueda detectar esta cada antes de quedarse sin alimenta- en corriente del transistor (presente en su hoja de datos). cin, sobre todo en el caso de no utilizar un ventilador de 5V es la alimentacin, y los 0.6V corresponden a la cada de tensin entre los extremos de la unin base/emisor de 12VDC. IC2 es un conocido estabilizador de tensin de un transistor de silicio. La resistencia limitadora R3 de 1/2W en serie con 5V/1A (7805CV), que es complementado por C5. el motor limita los picos de tensin durante el arranque. Q1 se encargan de suministrar la corriente necesaria para alimentar el rele, ya que el microcontrolador no Es recomendable colocarla cuando se trabaja con motores y las fuentes de alimentacin estn demasiado justas tiene suficiente potencia para hacerlo directamente. D2 absorbe los picos inversos de corriente que de corriente. Se encarga de limitar la corriente del motor se producen al alimentar la bobina del rele, no se puede durante el arranque ya que esta es muy elevada con ressuprimir del esquema, ya que el transistor seria destruido pecto a la corriente de trabajo indicada en el ventilador por el fabricante. con el tiempo.
//pgina 0x15
.tutorial
El programa con deteccin por entrada digital, totalmente comentado: ********************************************************************************************* NOMBRE: Temporizador_WC_13 MICRO: PIC12F675 DESCRIPCION: Automatismo para el control de un ventilador de WC, deteccin por entrada digital FECHA/AUTOR: By COS, 09/06, 10/06 Version 1.0 oscilador interno versin 1.1 soft, versin 1.1 hard, compatible versin 1.0 de soft con versin 1.1 de hard Cambio del soft para emplear una entrada que detecta perdida de alimentacin en la lmpara simplificacin del disparo del rele modificacin del sistema de control de las salidas Versin 1.3 se activa el WDT se cambia la rutina del control de flash de los led para hacerlos independientes uno del otro ********************************************************************************************** ************************ Declaracin de variables ****************** Dim timer_base As Word base patrn para los timer Dim timer_base_aux As Word establece el tiempo en mSeg, en el que se basaran los timer Dim contador As Byte variable que controla la fase en la que se encuentran las temporizaciones Dim timer1_sg As Word primera base de tiempos, para el control de rutinas Dim timer1 As Word indica el tiempo para la base timer_sg Dim led_flash_verde As Byte permite que se ejecute la rutina que se encarga del parpadeo del led verde Dim led_flash_rojo As Byte permite que se ejecute la rutina que se encarga del parpadeo del led rojo Dim flash_verde As Byte indica dentro de la rutina si el prximo estado del led apagado o encendido, verde Dim flash_rojo As Byte indica dentro de la rutina si el prximo estado del led apagado o encendido, rojo Dim rele As Bit controla el estado del rele Dim ledverde As Bit controla el estado del led verde Dim ledrojo As Bit controla el estado del led rojo ************************* Asignacin de valores de las variables ******* timer_base = 0 inicializa el timer_base timer_base_aux = 1000 establece el desbordamiento de timer_base, 1Seg contador = 0 establece la fase cero del programa main timer1_sg = 0 inicializa el timer1_sg timer1 = 30 establece el desbordamiento de timer1_sg, 30Seg led_flash_verde = 1 flash del led verde habilitado led_flash_rojo = 0 flash del led rojo deshabilitado flash_verde = 0 estado inicial del flash del led verde flash_rojo = 0 estado inicial del flash del led rojo rele = 0 estado inicial del rele, off ledverde = 1 estado inicial del led verde, on ledrojo = 0 estado inicial del led rojo, off ************************ Inicializacin de registros generales y de E/S ********* VRCON = 0x00 vref off (power off the comparator voltage) ANSEL = 0x00 off ADC TRISIO = 0x00 tri-state pins, are outputs GPIO = 0x00 clear port GPIO.5 = 1 pin a 1, maniobra invertida, activa a cero GPIO.4 = 1 pin a 1, maniobra invertida, activa a cero GPIO.1 = 1 para mantener la compatibilidad con la ver. 1.0 de hard TRISIO.2 = 1 GP2 pin, is input CMCON = 0x07 comparator off WaitMs 10 pausa de 10mSeg. *********** habilitacin de interrupciones y programacin del timer1 **** INTCON.PEIE = 1 bit de habilitacin de interrupciones de perifricos T1CON.TMR1ON = 1 bit de habilitacin del temporizador timer1 T1CON.TMR1CS = 0 bit de seleccin de reloj para el timer1, interno Fosc/4 INTCON.T1IE = 1 bit de habilitacin de interrupcin de TMR1 por rebose T1CON.T1CKPS0 = 0 bit de seleccin del prescaler para el reloj del timer1 T1CON.T1CKPS1 = 0 bit de seleccin del prescaler para el reloj del timer1
//pgina 0x16
.tutorial
TMR1H = 0xfc TMR1L = 0x18 PIE1.TMR1IE = 1 OPTION_REG.T0CS = 0 OPTION_REG.PSA = 1 OPTION_REG.PS0 = 1 OPTION_REG.PS1 = 1 OPTION_REG.PS2 = 1 INTCON.T0IE = 0 Enable carga el byte alto del registro del tiemr1 (1mSeg) carga el byte bajo del registro del timer1 (1mSeg) activa la interrupcin del timer1 selecciona reloj interno para el WDT asigna el prescales al WDT bit de la seleccin del factor de divisin para el WDT bit de la seleccin del factor de divisin para el WDT bit de la seleccin del factor de divisin para el WDT deshabilito interrupcin por el trm0 INTCON.GIE=1, habilita las interrupciones generales
************* Rutina del programa *************************************** main: ASM: clrwdt reinicializa el WDT antes que se desborde If contador = 0 Then primera fase del control de tiempos y maniobras If timer1_sg >= timer1 Then si pasan los primeros 30Seg. contador = 1 permite la siguiente fase timer1 = 0 configura la base de tiempos con un nuevo valor 0Seg timer1_sg = 0 activa la base de tiempos led_flash_verde = 0 desconecta el parpadeo del led verde led_flash_rojo = 1 conecta el parpadeo del led rojo ledverde = 0 apaga el led verde ledrojo = 1 prende el led rojo rele = 0 desconecta el rele Endif Endif If contador = 1 Then segunda fase del control de tiempos y maniobras If timer1_sg >= timer1 Then cuando termina la base de tiempos segn el ultimo valor del timer1 If GPIO.2 = 0 Then comprueba que hay alimentacin en la fuente contador = 2 permite la siguiente fase timer1 = 120 carga la base de tiempos para que cuente 2minutos timer1_sg = 0 activa la base de tiempos flash_verde = 1 sincroniza el destello con el led rojo flash_rojo = 1 sincroniza el destello con el led verde led_flash_verde = 1 permite el parpadeo del led verde led_flash_rojo = 1 permite el parpadeo del led rojo ledverde = 1 prende el led verde ledrojo = 1 prende el led rojo rele = 1 energiza la bobina del rele Endif Endif Endif If contador = 2 Then tercera fase del control de tiempos y maniobras If timer1_sg >= timer1 Then cuando pasan los 120seg. contador = 1 se cambia de fase timer1 = 1 se prepara la base de tiempos timer1_sg, para que cuente 1Seg. timer1_sg = 0 activa el contaje de la base de tiempos ti mer1_sg rele = 0 desconecta el rele flash_verde = 1 encendido alternativo del led verde con res pecto al rojo flash_rojo = 0 encendido alternativo del led rojo con res pecto al verde led_flash_verde = 1 permite el parpadeo del led verde led_flash_rojo = 1 permite el parpadeo del led rojo ledverde = 1 activa el led verde ledrojo = 1 activa el led rojo Endif Endif Goto main End
//pgina 0x17
.tutorial
On Interrupt Comienzan las rutinas de las interrupciones, desactiva las interrupciones Save System Guarda los valores del sistema -------------------------------------- control salidas ------------------------------------ If ledverde = 1 Then GPIO.5 = 0 Else GPIO.5 = 1 Endif If ledrojo = 1 Then GPIO.4 = 0 Else GPIO.4 = 1 Endif If rele = 1 Then GPIO.0 = 1 GPIO.1 = 0 Else GPIO.0 = 0 GPIO.1 = 1 Endif controla el estado de la salida del led verde prende led verde apaga led verde controla la salida del led rojo prende led rojo apaga led rojo controla la salida del rele energiza rele energiza rele, compatibilidad con la ver. 1.0 de hard desconecta el rele desconecta el rele, compatibilidad con la ver. 1.0 de hard
------------------------------ bases de tiempos y flash diodos ---------------------------- If PIR1.TMR1IF = 1 Then comprueba que es esta la interrupcin activa (por costumbre, en este caso solo hay una) timer_base = timer_base + 1 se incrementa con cada desbordamiento del timer1 If timer_base >= timer_base_aux Then control del numero de desbordamientos segn el valor de timer_base_aux If timer1_sg < timer1 Then timer1_sg = timer1_sg + 1 base de tiempos timer1 If led_flash_verde > 0 Then se encarga de hacer el led verde in termitente If flash_verde = 0 Then controla el parpadeo del led verde ledverde = 0 conecta el verde flash_verde = 1 variable de control, permite que se conecte el verde Else ledverde = 1 desconecta el verde flash_verde = 0 variable de control, controla el parpadeo Endif Endif If led_flash_rojo > 0 Then se encarga de hacer el led rojo inter mitente If flash_rojo = 0 Then controla el parpadeo del rojo ledrojo = 0 conecta el led rojo flash_rojo = 1 variable de control, permite que se conecten los led Else ledrojo = 1 desconecta el led rojo flash_rojo = 0 variable de control, controla el parpadeo Endif Endif timer_base = 0 se reinicialaza el valor de la base de tiempos patrn Endif Endif TMR1H = 0xfc carga el registro del timer1, para que desborde cada 1mSeg. TMR1L = 0x18 PIR1.TMR1IF = 0 borra el flag de salto del tmr1 Resume activa las interrupciones y retorna al programa
Nota: El programa ha sido escrito para el Basic del Pic Simulator IDE, se puede obtener una versin gratuita funcional por tiempo limitado desde http://www.oshonsoft.com/
//pgina 0x18
.informacin tcnica
//Marcos Lazcano
usando LCDs
primera parte
Los displays LCD permiten que nuestros proyectos tengan una presentacin ptima, a la vez que le proporcionan mayores funcionalidades al operador. En esta nota veremos cuales son sus caractersticas principales y aprenderemos como utilizarlos.
En la mayora de los dispositivos electrnicos mo dernos se necesita visualizar valores, modificar parme tros, representar estados o barras de avance, etctera. Si bien existen desde hace mucho tiempo los dis play de siete segmentos, en sus diferentes versiones, en aplicaciones donde sea necesario mostrar valores que ex ceden los 4 dgitos, ya conviene utilizar un display LCD. La razn primaria al realizar esta eleccin es sim ple, utilizar displays de segmentos exige en la mayora de los casos utilizar tcnicas de multiplexacin en el micro controlador, de forma de reducir lneas de entrada / salida aplicadas al manejo de los displays porque de otra forma estos se necesitarian de 8 pines de salida por cada digito. Las tcnicas de multiplexacin nos permiten ma nejarlos con menos pines, pero como nada es gratis, se pierden numerosos recursos de memoria para manejar la multiplexacin dentro del micro, adems de robar tiempo al programa principal. A veces, con programas complejos, se torna difcil mantener bien compensados los tiempos, y ni hablar de los problemas que pueden aparecer cuando hay que manejar interrupciones de otros perifricos. Todas estas razones hacen que el display LCD, que adems consume menos energa que un sistema de displays de segmentos, se torne una excelente opcin al momento de elegir el modo de mostrar informacin en un proyecto. rizados, colocados perpendicularmente, de manera que al aplicar una corriente elctrica al segundo de ellos dejaremos pasar o no la luz que ha atravesado el primero. Normalmente la visin del carcter representado en el display se produce por refraccin de la luz en el mismo, y tiene que ver con el ngulo desde donde se lo mire, ya que varindolo se ver con mayor o menor claridad o definicin.
//pgina 0x19
.informacin tcnica
ramente nos encontraremos en problemas al querer representar un carcter que no existe en su tabla. De todos modos para estos casos se puede utili zar la memoria de generacin de caracteres, llama da CGRAM en la jerga de los displays LCD. Esta memoria nos permite generar solo 8 caracteres definidos por el usuario, as que no se puede abusar de la misma. Adems la generacin de estos caracte res se debe realizar cada vez que se inicia el display LCD, cargndolos uno por uno en las posiciones de memoria CGRAM, para luego al utilizarlos el display los tomara de all y los colocara en la memoria de display, llamada DDRAM, que es la misma que se escribe cuando enviamos un carcter para su visualizacin. La nica diferenciacin que existe entre el uso de la tabla de caracteres de ROM y los caracteres ge nerados en CGRAM es que estos ltimos no quedan grabados en el display, ya que es memoria voltil, por lo tanto debern ser cargados cada vez que se inicializa el display. En cuanto a su uso, para el display es lo mismo tomar el carcter desde ROM que desde CGRAM.
Tabla de caracteres del HD44780
Otra de las diferencias que pueden tener entre ellos es la forma de la matriz de puntos con la cual confor man los caracteres. Existen de 5 columnas por 7 filas (el modelo al cual nos referiremos durante la nota usa este tipo) y de 5 columnas por 8 filas. Este ltimo puede utilizar el cursor en la ltima fila de cada caracter. Otra caracteristica que diferencian a estos dispo sitivos es el controlador que utilizan. Citaremos solamente el HD44780 de la firma Hitachi, ya que se trata de uno de los ms difundidos.
Es muy importante al momento de seleccionar un display LCD, tener en cuenta qu tabla de caracteres utiliza. Esto se determina normalmente en su hoja de datos.
Este controlador dispone de una tabla de carac teres ya grabados en su memoria ROM, que el fabricante pone en su hoja de datos. Cabe aclarar a esta altura, que es muy importante al momento de seleccionar un display LCD, tener en cuen ta que tabla de caracteres utiliza. Esto se determina nor malmente en su hoja de datos, donde el fabricante debe colocar dicha informacin. En caso de no tener en cuenta este detalle, segu
//pgina 0x1A
.informacin tcnica
.Funcin de los pines de conexin
Los pines de conexin de los displays LCD inclu yen un bus de datos completo de 8 bits, un pin de habi litacin E (de Enable), un pin de seleccin llamado RS (Register Select) que segn su estado indicara si es una instruccin o si se trata de un carcter a escribir y por ulti mo un pin que indica si se va a leer o escribir en el display, este ultimo pin se llama R/W (Read/Write). Por supuesto adems estn los pines de alimen tacin Vss y Vdd, un pin de regulacin del contraste llama do Vo y algunos modelos de display, con retroiluminador incorporado, pueden incluir dos pines adicionales para la alimentacin del mismo, llamados A y K (por Anodo y Ka todo). En la hoja de datos del modulo LCD que utilice mos el fabricante nos informara el diagrama de tiempos y estados de las seales, para establecer la comunicacin con el modulo LCD, tanto para enviar ordenes de confi guracin o datos a escribir en el display, estos tiempos deben ser respetados si se quiere llegar a buen puerto con el manejo eficaz del mismo.
.Pines de conexin
En el conector del display LCD nos encontrare mos con 14 pines, dispuestos en dos lneas a la izquierda del display, o una lnea en la parte superior o inferior del display.
//pgina 0x1B
.informacin tcnica
.Interfaces con microcontroladores
El display LCD puede ser conectado a un micro controlador utilizando 4 pines de datos u 8 pines de datos, como vemos en las imgenes.
Interfase a 8 bits.png
Interfase a 4 bits.png
.Conjunto de instrucciones
El controlador HD44780 responde a un conjunto especial de instrucciones que le permite configurarlo y uti lizarlo. Entre las funciones permitidas estn las siguientes: -Utilizarlo en modo a 4 u 8 bits -Borrar la pantalla -Mover el cursor o mover el texto dejando el cursor fijo -Hacer parpadear el carcter donde esta posicionado el cursor -Mostrar o esconder el cursor -Desplazar el texto por la pantalla -Encender y apagar el display En la siguiente tabla veremos como sern los valores a enviar y los estados de los pines de control para hacerlo.
//pgina 0x1C
.informacin tcnica
.Secuencia de inicializacin
El display debe ser inicializado para poder ser uti lizado, adems debe ser enviado un comando de borrar pantalla una vez inicializado (aunque esto no esta docu mentado en la mayora de las hojas de datos de los dis plays) para poder utilizarlo sin inconvenientes. Segn la interfase que vaya a utilizarse, si es una interfase a 4 u 8 bits esta secuencia es diferente. Vemos en las figuras siguientes los pasos a seguir para inicializar el display para cada una de las interfases. Vemos que lo nico que cambia en la interfase a 4 bits es que una vez que esta enviado el comando de inicializacin, a partir de all todo envo debe ser realizado enviando primero el nibble alto y luego el nibble bajo de cada byte que estemos enviando. Esto tambin incluye a los comandos de inicializacin res tantes luego de definir la interfase. Como corolario a esta nota (la primera de una se rie sobre displays LCD), cabe acotar que en la mayor par te de los proyectos que se realizan no es necesario utilizar la lnea R/W, por lo cual se pone esta lnea a nivel bajo (conectada a GND) y se respetan los tiempos necesarios y casi la totalidad de los displays LCD funcionan correcta mente de este modo. Sin embargo, los fabricantes de displays LCD aconsejan la utilizacin de la lnea R/W conectada al con trolador, cada vez que se escribe sobre el display, antes de enviar un nuevo comando, se pasan las lneas de datos a entradas y se lee el estado del BIT 7 del byte entregado por el display, de este modo sabremos cuando el display esta listo para recibir un nuevo comando. Si bien parece una tontera, en aplicaciones com plejas, donde los tiempos valen oro, es muy importante no desperdiciarlo, por lo tanto utilizando la lnea R/W se pue de optimizar mucho el aprovechamiento de los mismos. Imaginen adems la ventaja de adaptarse sin pro blemas a distintas marcas y modelos de displays, fun cio nando a distintas condiciones de temperaturas y hume dades, sin cambiar una sola lnea de cdigo. En la prxima nota, hablaremos del manejo de estos dispositivos en tres de los lenguajes mas utilizados en programacin de PICs. Lo haremos en Assembler, PicBasic y C de CCS.
Referencias: Wikipedia, la enciclopedia libre. Winstar, fabricante de displays LCD. Hoja de datos del controlador HD44780, de la firma Hitachi.
//pgina 0x1D
.circuitos
//pgina 0x1E
.circuitos
Seguramente el LM386 seguir siendo el amplificador preferido por muchos para sus aplicaciones tradicionales
Ofrece adems, un modo de operacin en baja potencia o Stand-By, que es activado a travs de un es tado lgico alto, aplicado en el pin 1 (para encapsulados MSOP y SO). Consumiendo en ste modo de operacin, la irrisoria cantidad de 0.1 A. Este CI permite configurar su ganancia a travs de un par de resistores externos, posee proteccin trmi ca interna, supresor de los clsicos ruidos de encendido y apagado. El camino del cambio ha comenzado con esta l nea de amplificadores de National Semiconductor. Segu ramente el LM386 seguir siendo el amplificador preferi do por muchos para sus aplicaciones tradicionales, cmo en otros rubros lo son el Timer 555, el OA 741 y el PCI 16F84A, pero nada se crea ni se pierde, sino que se trans forma.
Para ms informacin acerca de ste modelo de amplificadores de audio, pueden visitar el sitio oficial de National Semiconductor: http://www.national.com/mpf/LM/LM4890.html.
//pgina 0x1F
.tutorial
//Ariel Palazzesi
PIC BASIC
La revista uControl contar con varios tutoriales que se irn entregando en captulos, uno por nmero. En este caso, te ensearemos a programar microcontroladores en BASIC, usando para ello el compilador PIC BASIC incluido en el PIC SIMULATOR IDE (PSI). En esta primera entrega, veremos los aspectos ms importantes del lenguaje.
PSI es una excelente herramienta, de muy bajo enteros entre 0 y 255) Word (dos bytes de longitud, almacena nmeros costo, que permite programar en BASIC y adems simular el comportamiento de nuestro programa. Dispone para enteros entre 0 y 65,535) Long (cuatro bytes de longitud, almacena nmeello de gran variedad de mdulos (LCD, teclados, LEDs, etc) que pueden conectarse de manera virtual a nuestro ros enteros entre 0 y 4,294,967,295) microcontrolador. Seguramente incluiremos una serie de El tipo Long solo est disponible mediante un artculos sobre l en los prximos nmeros. Comencemos a ver los elementos indispensa- modulo opcional al PIC SIMULATOR IDE. A diferencia de otros BASIC, la declaracin de varia bles para crear un programa en lenguaje BASIC. La programacin sera bles puede ser hecha en cualquier parte del programa, y todas son consideradas prcticamente imposible globales, es decir, su valor es accesible .Variables: sin el uso de variables. desde todas las subrutinas y zonas del programa. El numero de variables esta l La programacin sera prctica gicamente limitado al monto de memoria mente imposible sin el uso de variables. Podemos hacernos una imagen mental de las variables RAM disponible en cada microcontrolador. imaginndolas como una caja en la que podemos guardar algo. Esa caja es una de las muchas de que disponemos, .DIM tiene en el frente pegada una etiqueta con su nombre y Las variables deben ser declaradas antes de utili ciertas particularidades, que hace que solo se puedan zarlas, mediante la instruccin DIM, como se muestra en guardar en ella determinados tipos de objetos. En esta analoga, cada caja es una variable, su los siguientes ejemplos: contenido es el valor que adopta, y la etiqueta es el nom DIM A AS BIT bre de la variable. Como su nombre lo indica, y como ve DIM B AS BYTE remos ms adelante, el contenido de una variable puede DIM X AS WORD ser modificado a lo largo del programa.
.Tipos
En BASIC tenemos distintos tipos de variables, segn el dato que puedan almacenar:
Bit (un bit de longitud, almacena 0 o 1 nicamente) Byte (un byte de longitud, almacena nmeros
DIM Y AS LONG
Tambin es posible utilizar vectores, que son una matriz de dimensiones 1xN. Por ejemplo, la sentencia si guiente:
DIM A(10) AS BYTE
//pgina 0x20
.tutorial
nos referiremos algunas veces como array) de diez ele mentos del tipo BYTE, que sern accedidos mediante el uso de subndice (entre parntesis) del 0 al 9. Las variables tipo Word, como vimos, estn com puestas por dos bytes. El primero de ellos es llamado byte alto y el otro bajo, dado que el primero contiene los 8 bits ms significativos. En BASIC podemos acceder indi vidualmente a cada uno de los bytes que componen un Word mediante las extensiones .HB (High byte, o byte alto) y .LB (Low Byte o byte bajo). Veamos un ejemplo:
DIM A AS BYTE DIM B AS WORD A = B.HB A = B.LB Esto es lo mismo que A = B B.HB = A B.LB = A B = A Esto tambin borra el byte alto de la variable B STATUS.RP0 = 1 INTCON.INTF = 0
Existe una forma corta de acceder a los bits in dividuales de cada puerto, simplemente usando las varia bles BASIC tipo byte RA, RB, RC, RD, RE o bien las tipo bit RA0, RA1, RA2, ..., RE6, RE7
RA = 0xFF RB0 = 1
.Punteros
En BASIC tambin podemos usar punteros. En realidad, cualquier variable definida como tipo BYTE o WORD pude ser usada como un puntero de memoria, usndola como argumento de la funcin POINTER. El va lor contenido por la variable debe tener un valor compren dido entre 0 y 511. Ejemplos:
DIM X AS WORD DIM Y AS BYTE X = 0x3F Y = POINTER(X) Y = Y + 0x55 X = X - 1 POINTER(X) = Y Y = 0xAA X = X - 1 POINTER(X) = Y
Los bits individuales de cada variable pueden ser ac cedidos individualmente tambin, simplemente poniendo como extensin .n donde n es el numero de bit (1,2, 3, etc. )
DIM A AS BYTE DIM B AS BIT B = A.1 B = A.7 A.0 = A.5
.RESERVE
La sentencia RESERVE le permite al programa dor reservar un numero de posiciones de la RAM para su uso en rutinas en lenguaje ensamblador o para el InCircuit Debugger de MPLAB. Simplemente, si queremos reservar 20 bytes de RAM, escribimos:
RESERVE 20
.SYMBOL
Una forma de escribir programas que nos resul ten mucho ms fciles de entender es el uso de nombres simblicos, o SYMBOL. Un symbol es una cadena que contiene cdigo, asignado a un nombre. Al momento de compilar, PIC BASIC hace la bsqueda y reemplazo de nuestros smbolos y luego genera el cdigo ASM y el HEX. Supongamos que tenemos un LED conectado al bit cero del puerto B. Mediante SYMBOL podemos hacer:
SYMBOL LED1 = PORTB.0
.Puertos
Todos los registros del microcontrolador estn disponibles para usar en los programas BASIC, como si se tratase de variables del tipo BYTE con el nombre del registro utilizado en las datasheet (PORTA, PORTB, TRI SA, etc.). Por supuesto, se puede acceder a bits indivi duales de los registros con la tcnica vista prrafos atrs. Algunos ejemplos:
TRISA.1 = 0 TRISB = 0 PORTA.1 = 1 PORTB = 255
//pgina 0x21
.tutorial
que es mucho ms claro y fcil de leer. El cdigo que apa rece a la derecha del igual no puede contener instruccio nes o comandos. 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 0x o posponiendo H al va lor) o en binario (anteponiendo % al valor). Por ejemplo:
DIM A AS BIT DIM B AS BYTE A = TRUE B = 0x55 B = %01010101 ... GOTO calculos ... ...
En el ejemplo anterior, el programa se ejecutar hasta encontrar la instruccin GOTO calculos, que har que se ejecuten nuevamente las instrucciones siguientes a la etiqueta calculos:. Cabe aclarar que las etiquetas no son un cdigo ejecutable, es decir, no realizan ninguna accin, solo son un marcador del lugar al que se puede saltar con GOTO.
Por supuesto, se pueden asignar nombres a las constantes, usando la instruccin CONST:
DIM A AS WORD CONST PI = 314 A = PI
Hay tres instrucciones para el manejo individual de bits, que si bien no hacen nada que no se puede resol ver con otras instrucciones o smbolos, ayudan mucho en la lectura del cdigo. Se tratan de HIGH, LOW y TOGGLE, que ponen el bit en alto, bajo o lo invierten, respectivamen te. Importante: Si el bit implicado como argumento de una de estas instrucciones es un bit de un puerto, el mismo bit en el TRIS correspondiente es puesto en cero, y dicho pin queda configurado como salida. Algunos ejemplos:
HIGH PORTB.0 LOW ADCON0.ADON TOGGLE OPTION_REG.INTEDG
Es posible calcular races cuadradas (aunque el resultado debe ser entero) con la funcin SQR:
DIM A AS WORD A = 3600 A = SQR(A)
.GOTO
Esta es una de las instrucciones ms polmicas que se encuentra en todos los dialectos BASIC. GOTO significa literalmente IR A, y sirve justamente para eso: desviar el flujo del programa a otro punto. Para usar GOTO, es necesario poner una etique ta en el lugar al que queremos saltar. Las etiquetas son simplemente nombres terminados en :, tal como se ve a continuacin:
... ... calculos: ... ... ... ...
Para las variables de tipo Bit existen siete opera ciones lgicas disponibles. Solo es posible efectuar una operacin lgica por instruccin; aunque es muy posible que prximas versiones permitan ms flexibilidad. Est al tanto de las novedades! Estas operaciones tambin estn disponibles para variables tipo Word o Byte. Veamos algu nos ejemplos:
DIM A AS BIT DIM B AS BIT DIM X AS BIT X = NOT A X = A AND B X = A OR B X = A XOR B X = A NAND B
//pgina 0x22
.tutorial
X = A NOR B X = A NXOR B DIM A AS WORD DIM B AS WORD A = A OR B
controladores (si no, puede leer el resto de uControl), igualmente vamos a hacer una muy breve descripcin del circuito. En primer lugar, vamos a aprovechar el oscilador .Mi primer programa: Un LED parpadeando interno del PIC16F628A y nos evitaremos Luego de toda esta introduccin A diferencia de un pro- el cristal y sus condensadores asocia dos. El puerto B del micro (pines 6 al 13) puramente terica, estamos en condicio grama de ordenador, est conectado a 8 LEDs mediante 8 re nes de encarar nuestro primer programa. donde uno escribe el sistencias de 220ohms, que tienen como A diferencia de un programa de ordenador, donde uno escribe el programa, lo compila, programa, lo compila, funcin limitar la corriente que circula por los LEDS. Estas sern nuestras salidas. lo ejecuta y ya, en el mundo de los micro lo ejecuta y ya, en el Los pines 17 y 18, correspondientes al controladores hay que, previamente, definir mundo de los micro- PORTA.0 y PORTA.1 estn conectados a el tipo de microcontrolador que se va a uti lizar, cual va a ser su frecuencia de reloj, controladores hay que, pulsadores, que al ser presionados con cmo va a ser el circuito en que se va a previamente, definir el ducen 5V (un 1) al pin respectivo. Cuan do estn en reposo, las resistencias R1 y utilizar el mismo, etc. tipo de microcontrola- R2 se encargan de mantener el pin en 0. Para estas prcticas, utilizaremos un PIC16F628A, uno de los ms difundidos dor que se va a utilizar Por ltimo, el pin 1 (PORTA.2) comanda un parlante mediante un transistor, para y que ms o menos viene a reemplazar al hacer alguna prueba con sonidos. viejo y popular PIC16F84A, ya obsoleto. El circuito debe alimentarse con 5V bien filtrados El diagrama circuital que emplearemos para las y regulados. primeras prcticas es el siguiente: Volviendo a nuestro programa, vamos a escribir el Si bien se supone que quien est leyendo este tutorial tiene una buena idea sobre electrnica y micro hola mundo de los microcontroladores: encender un LED.
PORTB = PORTC AND %11110000
//pgina 0x23
.tutorial
El primer paso es, desde el men Opciones -> Select Microcontroller, elegir el PIC16F628A. controlador. No es la nica manera de hacer esto, pero si la ms sencilla desde el punto de vista del programador BASIC. Las lneas 003 y 004 convierten todos los pines del puerto A en entradas ( TRISA = %11111111 ) y los del puerto B en salidas ( TRISB = %00000000 ). El % indica que el numero que viene a continuacin esta en binario. Se podra haber escrito, por ejemplo TRISB = 0 y hubiera sido lo mismo. Personalmente prefiero el primer modo, ya que veo el estado de cada pin. Por supuesto, es valido activar como entrada algunos pines, y como salidas otros, haciendo algo parecido a TRISB = %11000111. En la lnea 006 encontramos una etiqueta (loop: ). Esta no hace nada, solo sirve como referencia para enviar el flujo del programa a esa lnea desde otro lugar, mediante la sentencia Goto. La lnea 007 pone en 1 el pin correspondiente a PORTB.0, de manera que en el pin 6 del microcontrolador habr 5V. Esta tensin har que circule una corriente a travs de la resistencia limitadora y el LED1, haciendo que este se encienda, ya que el ctodo se encuentra conectado a 0V. En 008 tenemos la sentencia WaitMs 500. WaitMs se encarga de hacer una pausa en milisegundos. La duracin de la pausa est dada por el nmero que sigue a la instruccin, en este caso 500 milisegundos, o medio segundo. Luego, en 009, otra vez se vuelve a poner en 0 el pin 6, mediante PORTB.0 = 0 , lo que provoca que ese pin se ponga a 0V, y no haya ms circulacin de corriente a travs de la resistencia y del LED, con lo que este se apaga. En 010 se hace nuevamente una pausa de medio segundo, y por ltimo, la lnea Goto Loop hace que el programa contine en la lnea 006 (que es donde est la etiqueta Loop). El programa se repite indefinidamente, encen diendo el LED medio segundo, apagndolo otro medio segundo. Si presionamos F9 o vamos al men Compile & Assemble & Load.
Lo destacable por ahora de esta configuracin es que estamos dejando la memoria (FLASH y EEPROM) sin proteccin, que el pin RESET se va a comportar como I/O y que usaremos como oscilador el oscilador interno INTRC. Una vez hecho esto, arrancamos el editor de BA SIC (presionando CTRL-C, por ejemplo), y escribimos el siguiente cdigo:
AllDigital TRISA = %11111111 TRISB = %00000000 loop: PORTB.0 = 1 WaitMs 500 PORTB.0 = 0 WaitMs 500 Goto loop
Vamos a analizarlo lnea por lnea para entender su funcionamiento: La lnea 001 utiliza la sentencia AllDigital para convertir todos los pines del micro en pines de E/S. Esto equivale a deshabilitar los comparadores, conversores A/D y todos los mdulos que pudiese tener nuestro micro-
//pgina 0x24
.tutorial
PIC SIMULATOR IDE compilara el programa, y cargara el archivo .HEX resultante en el simulador. Apa recer el cuadro de dialogo donde se nos informa, entre otras cosas, si han ocurrido errores o no, el tamao del programa (69 words), y la ruta a donde se ubicaron los archivos generados. Si volvemos a la ventana principal del PIC SIMU LATOR IDE, y desde Tools -> Microcontroller View, abrimos la vista del microcontrolador. Al darle Start a la simulacin tendremos algo parecido a lo que sigue:
nuestro ojo lo percibira como encendido a medias, inca paz de discriminar su verdadero estado. Se podra haber utilizado la instruccin SYMBOL para hacer ms claro el programa. En el siguiente ejem plo, hemos hecho algunos cambios y obtenido un progra ma que hace exactamente lo mismo que el anterior, pero que resulta ms claro de entender, ya que se aproxima algo ms al lenguaje natural:
El mismo programa, pero utilizando SYMBOL.
En la captura se puede apreciar que el pin 6, correspon diente a RB0 est en ON. Si esperamos lo suficiente, veremos cmo pasa a OFF, y ms tarde vuelve a ON, etc. Si queremos esperar menos tiempo, y esto lo debemos tomar como una regla general al correr simulaciones, podemos disminuir el tiempo indi cado en las instrucciones WaitMS a valores iguales a 1, de esta manera la simulacin ser mucho ms gil. Por supuesto, al momento de llevar el archivo .HEX a nues tro microcontrolador en el circuito real, debemos cambiar a los tiempos originales y volver a compilar. Caso contra rio, el LED permanecera encendido solo una milsima de segundo, luego apagado el mismo tiempo, etc., por lo que
//pgina 0x25
.circuitos
Esta frmula nos dar un resultado expresado en Hz, considerando que Rs debe ser mayor o igual a 3 vec es RX ( 3 * RX). Los valores de las resistencias se toman en Ohm y los valores de los capacitares en expresados en Faradios, para obtener el valor correcto. La conexin bsica del oscilador, en conjunto con los pulsadores, se realiza tal como lo muestra el circuito.
A mayor frecuencia de oscilacin obtendremos una subida o bajada ms rpida del volumen.
Si colocamos la punta del osciloscopio en el pin 9, correspondiente al oscilador, notaremos que no ten emos oscilacin alguna hasta que no pulsemos una de las teclas. Esto hace que el circuito en modo de espera, consuma una corriente despreciable. En el caso de pulsar para subir el volumen (UP), el circuito del oscilador se cerrar a travs de RX y el pro
//pgina 0x26
.circuitos
pio pulsador. De esta forma queda activado el oscilador, sin influir en absoluto en el pin U/D. Gracias a los dio dos D1 y D2 y a la polarizacin interna de la resistencia de pull-up integrada en el chip, se mantendr U/D en un estado lgico alto. Esto provocar que el IC interprete la instruccin de decrementar la atenuacin, permitindonos subir el volumen. Si por el contrario, pulsamos para bajar el volumen (DOWN), el circuito del pin oscilador se cierra a travs de RX, D2 y el propio pulsador. Mientras que simultnea mente, el pin U/D pasa a un estado lgico bajo, a travs de D1 y el propio pulsador DOWN. Esto ser interpretado como que se debe aumentar la atenuacin, provocando una disminucin del volumen. Vemos adems en el grfico, los valores elegidos para RS, RX y CX. Cada vez que se inicialice la al imentacin en el CI, ste adoptar una atenuacin de -40dB, por defecto. Cabe agregar, que por cada canal, el CI posee dos atenuadores, los cuales uniremos entre s para lograr nuestro control y lo haremos a travs de cualquier operacional doble, com patible con la serie de bajo ruido de los TL082, que en el circuito de la figura 1 aparece como U1. Esta unin de am bos atenuadores nos permite lograr los valores de -68dB a 0dB. Ahora slo nos resta elegir el tipo de alimentacin que implementar emos. Una alimentacin simple de 9V 12V la encontraremos prcticamente en cual quier equipo al que queramos dotar con nuestro proyecto. Con esta eleccin, VSS estar a GND y los pines denominados Analog-GND, se alimentarn a travs de un divisor resistivo como se ve en el circuito de la figura 2, formado por dos resistencias de 22K y un capacitor electroltico de 100uF. Como comentario final podemos agregar que no debemos olvidarnos de apantallar muy bien las conex iones de entrada y salida, as como tambin las partes in ternas de la placa donde realicemos nuestro circuito, para evitar ruidos captados por malas conexiones. Una fuente bien filtrada y listo! , nuestro po tencimetro digital, sustituyendo el ruidoso y viejo poten cimetro mecnico.
Diagrama completo del Potencimetro Digital
//pgina 0x27
.teora
//Ariel Palazzesi
registros de desplazamiento
A menudo debemos resolver situaciones en las que el nmero de salidas disponibles en el microcontrolador que estamos usando es insuficiente. Una manera sencilla de controlar varias salidas a partir de unos pocos pines consiste en la utilizacin de los llamados registros de desplazamiento. Pero sabes qu son y cmo emplearlos?
Un registro de desplazamiento es una configuracin circuital muy utilizada, generalmente para convertir un flujo de datos en forma serial a uno del tipo paralelo, motivo por el cual a menudo los chips encargados de esta tarea son llamados conversores serie-paralelo. Por supuesto, es posible construir un registro de este tipo a partir de componentes discretos, aunque en la prctica resulta no solo inapropiado por cuestiones de tamao y ve locidad, si no tambin econmicas, ya que un chip como los que mencionaremos en este texto rara vez supera el valor de $1.00 dlar. La mejor manera de entender conceptos nuevos es apoyndose en analogas con temas que nos son famil iares. En este caso no vamos a hacer una excepcin, por lo que utilizaremos como ejemplo el funcionamiento de una cola, como la de un banco o la de una tienda cualquiera. Supongamos que dos tipos de personas pueden formar parte de una cola. Estos dos tipos de personas son las que se ven en la figura siguiente, y es imposible con fundir una con otra. Es decir, siempre estaremos seguros que en una posicin determinada de la fila se ubica una u otra persona. Las llamaremos 0 (el gordito) y 1 (al ms flaco). Aclaro que la eleccin de los personajes solo tiene que ver con el parecido con el 0 y el 1. La cola que usaremos como ejemplo tiene 8 lu gares, que hemos numerado del 0 al 7, pero nada impide trabaja con colas ms largas, por lo que todo lo que se vea aqu, puede ser general izado para colas de la lon gitud que se desee. Otra particularidad de nuestra hipot tica cola es que nunca puede estar vaca. Todas sus posi ciones tienen que estar Figura 1: 0 y 1, nuestros personajes. ocupadas, ya sea por
gorditos o flacos. En el estado inicial, la cola se en cuentra completamente llena de gorditos, como se ob serva en la Figura 3.
Nuestra cola funciona como cualquier cola de la vida real: cuando alguien nuevo llega a la fila, se coloca en el lugar de ms atrs, que en este caso corresponde a la posicin 0. Como nuestra cola tiene una longitud mxima de 8 posiciones, para hacer lugar al recin ll egado, es necesario que todos los que estaban en la fila avancen una posicin. El que estaba en la posicin 0 pasa la 1, el que estaba en la 1 pasa a la 2, y as hasta llegar al que estaba en la posicin 7, que sale por el extremo opuesto.
Figura 5: y ocupa el ltimo lugar, desplazando a todos los dems una posicin. El primero sale de la fila.
//pgina 0x28
.teora
.El 74HC164N
Existen varios circuitos integrados que implementan un registro de desplazamiento en su interior, por ejemplo, el muy conocido 74HC164N. Este interesante circuito integrado de la familia TTL viene en diferentes sabores, de acuerdo a parmetros como: velocidad, temperatura de operacin, vol tajes y corrientes soportadas, entre otros. Dichas caracters ticas dependen de las letras entre el 74 y el 164. Desde el punto de vista tcnico, dentro de este integrado se encuentra un registro de desplazamiento completo, de 8 bits de largo. Esto significa que se com porta como un conversor serie-paralelo, en el que se intro ducen pulsos de reloj por el pin CP y los datos en serie por los pines DSA y DSB, que son las entradas a una puerta AND. Las 8 salidas van tomando los estados indicados por el tren de datos de la entrada. Dispone de un pin (el 9) que realiza la funcin de poner en cero todas las salidas (RESET, MR en el esquema de la Figura 9).
Figura 6: Este es el estado final de nuestra fila, con el nuevo integrante en el ltimo lugar.
Si continuaran ingresando personas en la fila, el proceso se repetira con cada nuevo integrante que lle gue. Como el que entra primero es el primero en salir, a este tipo de colas se las llama FIFO, por First Input, First Output (Primero que entra, primero que sale). Con todas estas cuestiones en mente podemos seguir avanzando en la comprensin del funcionamiento de los registros de desplazamiento. Supongamos que quere mos que en la cola haya dos personajes flacos en los prim eros lugares, luego un gordo, otra vez dos flacos, luego otro gordo por ultimo dos flacos ms (como siempre, 8 personas en total). Sabiendo que cada personaje que ingresa en la cola desplaza a todos una posicin a la derecha, si quer emos que el que termine ocupando el extremo derecho de la cola sea un flaco, ese ser el que primero debe entrar. Si guiendo el razonamiento anterior, los personajes deberan entrar en la fila en el orden siguiente:
Figura 9: Esquema interno del integrado 74LS2164N Figura 7: Los nuevos integrantes de la fila, esperando para ocupar su lugar.
Figura 8: Este es el estado final de nuestra fila, con los integrantes originales desplazados hacia la derecha.
Poniendo fin a nuestra analoga, tendramos que los integrantes de esta hipottica cola son los 0s y 1s (o estados altos y bajos) de nuestros circuitos, es decir, nue stros datos. La cola en si es el registro de desplazamiento. Cuando decamos que el estado inicial de la cola eran 8 gordos, estbamos queriendo decir que al alimentar nues tro circuito, todas las salidas estarn en 0 o estado bajo. Hay una salvedad, y es la existencia del reloj (clock en ingls). Efectivamente, en un circuito real, los datos pasan al registro de desplazamiento con cada pulso de reloj. Podemos pensar en este reloj como si se tratase de un maestro de ceremonias, que da una palmada cada vez que alguien debe ingresar en la cola. Muchos circuitos de registros de desplazamiento reales tambin incluyen un sistema de RESET, que per mite poner simultneamente todas las salidas en 0 sin necesidad de ingresar 8 ceros seguidos. Esto permite lim piar rpidamente el registro de desplazamiento.
Como puede verse en la imagen correspondiente a su pinout, el integrado dispone de solo 14 patillas. Los pines 1 y 2 son la entrada de datos. Como dijimos antes, internamente existe una puerta AND que realiza el produc to lgico de los valores de ambas entradas. En general, se unen entre s para que el resultado de la funcin AND sea igual al valor del dato, o bien se pone una de las entradas en alto (conectndola a +5V) para que la otra entrada sea la que determine el valor de la salida. Cualquiera de las dos formas es vlida. Por supuesto, existen aplicaciones donde se obtienen datos de dos fuentes distintas, en cuyo caso se conectar una entrada de la puerta a cada una de las entradas de datos. Los pulsos de clock entran por el pin 8. Los datos de la entrada se reflejan en la salida con cada transicin bajo-alto del reloj. Los pines 3,4,5,6 ,10,11,12 y 13 son, en ese orden, las salidas.
//pgina 0x29
.informacin tcnica
//Pedro Palitroquez
CD4094
primera parte
Siguiendo con el anlisis comenzado en el artculo Registros de desplazamiento publicado en este mismo nmero, se estudiar el circuito integrado CD4094, de Fairchild semiconductor, que posee prestaciones similares al 74HC164N.
El CD4094 es un registro de desplazamiento de 8 bits, con salida tri-estado. Esto significa que disponemos de un mecanismo para aislar sus 8 pines de salida del resto del circuito. Los datos son des plazados serialmente con cada flanco de subida del reloj (CLOCK) y cada bit es transmitido al latch correspondien te con cada flanco de bajada del pin STROBE Las caractersticas ms destacables de este circuito integrado son: CD4094, es necesario estudiar su diagrama de tiempos: La primera seal de control es DATA, que es el dato que enviaremos serialmente. Enviamos un flanco ascenden te y luego un flanco descendente. En el instante que el CLOCK est subiendo, el estado del DATA ser reconocido como un dato vlido por el CD4094 La seal de control STROBE se usa en caso de que queramos tener en los latch de salida los bits enviados por el PIC a medida que se van recibiendo. Como se usar un display 7 seg - Rango de voltaje: 3.0 V a 18.0 V mentos, lo mejor es ver el dato comple Diagrama de Conexin del CD4094. - Compatibilidad con la familia TTL to una vez finalizada la transferencia. - Salida tri-estado Entonces STROBE en un nivel alto mientras enviamos los datos. Con ello garantizamos Por qu usar un registro de desplazamiento para un dis- que el display no muestre valores extraos hasta que play 7-segmentos? Es muy no pongamos STROBE en sencillo: nos ahorramos bajo, instante que se trans varias lneas de entrada/ ferirn los 8 bits completos a salida. En el caso de usar los latches de salida. un solo display se ahorran 5 Por ltimo tenemos el pin pines, ya que se necesitan OUTPUT ENABLE. Este pin solo 3 lneas para controlar cumple la funcin del tercer los 7 segmentos y el punto estado del latch, el estado decimal. Y si necesitamos de alta impedancia. En este controlar un nmero mayor caso no lo usaremos. Gene de display, el ahorro es ma ralmente se emplea en sis yor: las mismas tres lneas temas de buses, donde se usadas para el control de conectan varios integrados un display permiten contro a las mismas seales, per lar todos los que necesite mitiendo aislar un circuito de Diagrama de tiempos del CD4094 mos. Interesante, verdad? otro. As que mantendremos Para que el CD4094 pueda manejar un display este pin en un nivel alto. 7 segmentos, tienen que haber unas seales de control Una vez comprendido el funcionamiento del es establecidas, que podemos gestionarla con un microcon quema de tiempos del CD4094, se proceder a escribir un trolador. En este artculo usaremos el PIC 16F84A. programa para el microcontrolador PIC16F84A usando el Para establecer las seales de control en el compilador de lenguaje C de la empresa CCS:
//pgina 0x2A
.informacin tcnica
// Usando el CD4094 para manejar 1 display 7 segmentos #include <16F84A.h> #fuses XT,NOPROTECT,NOWDT,PUT #use delay(clock=4000000) // Definicin de pines de control #define DATA PIN_A0 #define CLOCK PIN_A1 #define STROBE PIN_A2 // tabla de numeros constantes que contienen el correspondiente valor // en 7 segmentos int const segmentos[16]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; // declaracin de la funcin escribir_4094 void escribir_4094(int caracter); // programa principal void main(){ output_a(0x0); output_b(0x0); set_tris_a(0x0); set_tris_b(0x0); while(true){ for(t=0;t<16;t++){ escribir_4094(t); delay_ms(1000); } } } //************************************************************** // Funcin escribir_4094 // // Descripcin: enva serialmente el datode 8 bits de acuerdo al // argumento caracter y activa las seales de control establecidas // en el mapa de tiempos del CD4094 // // datos de entrada: caracter un nmero entero // datos de salida: ninguno //************************************************************** void escribir_4094(int caracter){ int contador_8; output_low(PIN_A0); output_low(STROBE); output_low(CLOCK); for(contador_8=0;contador_8<8;contador_8++){ output_bit(DATA,bit_test(segmentos[caracter],contador_8)); output_high(CLOCK); delay_cycles(1); output_low(CLOCK); } output_low(CLOCK); output_high(STROBE); delay_cycles(1); output_low(STROBE); }
//pgina 0x2B
.informacin tcnica
.El esquema elctrico:
Nota: hay que tomar en cuenta la velocidad de operacin del CD4094 y que las seales de control no deben ser menores al especificado por la hoja tcnica (datasheet). En nuestro ejemplo estamos trabajando con una fre cuencia de oscilacin de 4Mhz, esto es, 1uS por cada paso del contador de programa del micro controlador, suficientes para los 0,666 uS mnimos que exige el CD4094 a 5V de alimentacin. Esto hay que considerar lo si se va a trabajar a niveles de tensin frecuencias muy altas.
Cantidad 1 1 1 1 2 2 1
Fairchild Semiconductor (1987). CD4094BC 8-Bit Shift Register/Latch with 3-STATE Outputs. Datasheet. Disponible en: www.fairchildsemi.com
.Glosario: Latch: especie de buffer o memoria intermedia que almacena un estado binario y no cambia a menos que se le indique. Tri-Estado : tres estados lgicos permitidos por una compuerta digital estado alto, estado bajo y alta impedancia dash point: punto decimal que traen los displays 7 segmentos.
//pgina 0x2C
.circuitos
//Ariel Palazzesi
.El circuito
El circuito es sumamente simple: un LED, cuya corriente hemos limitado con una resistencia de 1K en se rie, ilumina permanentemente a una LDR que se ubica enfrente. Esta LDR junto con el resistor ajustable de 50K configura un divisor de tensin que dispara el circuito in tegrado NE555 cuando la LDR est a oscuras. El nivel
//pgina 0x2D
.circuitos
El rel es del tipo inversor, as que podemos ele gir conectar el tipo de alerta deseado en el borne normal abierto (una sirena, por ejemplo) o normal cerrado (una luz que se apagara en caso de incendio). Hemos agregado un segundo LED, (PILOTO en el esquema) para que sierva como indicador de que el circuito est alimentado, por si la disposicin del otro LED y la LDR son tales que no pueden verse con facilidad. En el esquema se ve una batera de 12V alimen tando el circuito, lo que lo hace apto para su uso aun en cortes de energa. Los que no quieran gastar en bateras, pueden conectar este circuito a una fuente de alimenta cin que entregue entre 9V y 12V de corriente continua bien estabilizados.
Montaje y PCB
Para que el armado del circuito sea lo ms fcil posible, hemos dibujado un circuito impreso y tambin un esquema con la posicin de los componentes sobre la pla ca. Puedes ver el PCB en la figura 2 y el la posicin de los componentes en la figura 3.
//pgina 0x2E
.teora
temporizadores programables
El tiempo, la cuarta dimensin, est presente en todo momento, y medir su paso es un aspecto importante en casi cualquier aplicacin electrnica. Una de las primeras aplicaciones desarrolladas en el mundo de la electrnica digital fueron los circuitos para medir el tiempo, y estos adquirieron tal importancia, que estn presentes en casi cualquier dispositivo electrnico moderno. En nuestro caso, hablaremos de un grupo especial de estos dispositivos, los circuitos temporizadores de los microcontroladores.
El primer microcontrolador de la historia, el INTEL 8051, que sali al mercado en 1976, tena dos temporizadores programables. Hasta el da de hoy, estos han tenido una evolucin constante en el mundo de la electrnica digital, de modo que algunos microcontroladores modernos poseen varios temporizadores. Conteo de eventos Base de tiempo para otros perifricos USART PWM Watch Dog
.Estructura bsica
La estructura bsica de un temporizador/contador la podemos ver en la Figura 1. En este esquema simplifi cado podemos observar que el contador est compuesto por tres bloques fundamentales: 1.Contador binario: es el elemento bsico del tempo rizador/contador y su misin es contar los pulsos del re loj. Hay dos propiedades esenciales a tener en cuenta, respecto a este componente: la cantidad de pulsos que puede contar y la posibilidad de controlar el sentido del conteo, sea ascendente o descendente. 2.Circuitos de configuracin y control: constituyen la interfaz entre el contador binario y los circuitos externos. Es uno de los elementos que da valor aadido al simple contador binario. 3.Circuitos especializados de salida: Se utilizan para notificar, a otro elemento del sistema, sobre el estado del temporizador o acerca de la ocurrencia de un determinado evento. Ms adelante veremos, con ejemplos de contado res reales, cada uno de los bloques del temporizador/con tador, y cmo configurar estos mdulos, para utilizarlos en distintas aplicaciones.
.Se utilizan en
Hacer una lista completa es prcticamente impo sible, pero algunos ejemplos de su aplicacin, nos ayuda rn a adentrarnos en los entresijos de su diseo y sacarle provecho a sus potencialidades. Medicin de tiempo Divisin de frecuencia Medicin de perodo y frecuencia
//pgina 0x2F
.teora
Configuracin del reloj: En la mayora de los casos la fuente de reloj es configurable. Incluso existen microcon troladores con abundante variedad de formas de configu rar el reloj, de modo que se puedan obtener distintos tipos de bases de tiempo. Interrupciones: En la mayora de casos, los tempo rizadores tienen interrupciones asociadas, con el objeti vo de notificar al procesador que ha ocurrido el cruce por cero o algn valor especfico en el registro de conteo. Caractersticas especiales: Muchos microcontrola dores tienen temporizadores especializados para trabajar de conjunto con algunos de sus perifricos, o para ser uti lizados en aplicaciones especficas.
.Caractersticas
En el mundo del diseo digital, los temporizadores constituyen perifricos muy tiles. Se disean con ciertas caractersticas que determinan el uso que podemos darle a un temporizador, veamos algunas: Longitud del contador: Los ms comunes son aque llos que tienen 8 16 bits, determina la cantidad mxima de pulsos que se pueden contar. Lectura/escritura: En general, los temporizadores pueden ser escritos o ledos por el procesador del micro controlador. En algunos casos, donde el temporizador est vinculado a algn perifrico muy especfico, esta op cin puede no existir o estar limitada.
Modos de trabajo: Existen, en principio dos: conta dor y temporizador. Como contador, se cuentan los pul sos desde una fuente externa al microcontrolador. Los pulsos contados pueden tener perodo variable. Como temporizador, se cuentan los pulsos suministrados por una fuente estable y conocida, que puede ser externa, o alguna fuente generada internamente por el Figura micro 1: Esquema funcional del TIMER0 controlador. La forma tpica es el conteo ascendente, sin embargo, existen contadores con la opcin de confi gurar el modo de conteo, sea ste ascendente, descendente o de otro tipo especfico. Configuracin de activacin por frente: Permite establecer cuando se produce el conteo, si en el frente de subida del reloj o en el frente de cada del mismo.
//pgina 0x30
.teora
Analizando el esquema de este temporizador po demos observar que el mismo puede utilizar como fuentes bsicas de reloj una fuente externa conectada al pin T0CKI (el pin especfico en el encapsulado del microcontrolador depende del dispositivo) o puede utilizarse la seal de re loj interna, generada por el microcontrolador, equivalente a un ciclo de mquina (FOSC/4). La seleccin de una u otra fuente bsica depende del estado de un multiplexor digital cuya seal de con trol es T0CS, a la salida de este multiplexor encontramos un pre-escalador, que sirve tambin como post-escalador para el Watch Dog (WD). Un pre-escalador o post-escalador, es un conta dor cuya base de conteo es configurable, que se coloca antes o despus del contador principal del temporizador y su funcin es dividir la seal del reloj a la entrada o salida del contador principal. Generalmente no se permite leer o escribir su registro de conteo. Existe otro multiplexor digital que nos permite se leccionar o no el uso del pre-escalador y cuya seal de control es PSA. A su salida existe un componente que tiene como misin sincronizar el reloj externo con el del dispositivo, en caso que se utilice esta fuente, y al final tenemos la fuente de reloj que ser la que har funcionar al contador principal del temporizador. El registro del contador principal del temporizador puede leerse y escribirse por software en cualquier mo mento, sin embargo, existen ciertos detalles a tener en cuenta en caso de las escrituras. A la salida del contador principal tenemos la activacin de la seal T0IF, que es utilizada para notificar al procesador que se ha desborda do el temporizador, y en caso de estar habilitadas las in terrupciones del dispositivo, esta seal activar el proceso de interrupcin del procesador. Para poder configurar este perifrico y obtener informacin til sobre l, existen tres registros que el pro gramador y el perifrico utilizan para lograr un trabajo ade cuado: TMR0: es el registro donde se lleva la cuenta de pulsos de reloj que llegan al contador principal del temporizador, es de lectura/escritura. INTCON: Es el registro de control de interrupciones, se utiliza para habilitar el servicio de interrupciones del microcontrolador y del temporizador, contiene adems la bandera T0IF, que determina si el temporizador se ha desbordado. OPTION_REG: Se utiliza para establecer la fuente de reloj a utilizar, el frente que activa el conteo y para confi gurar el pre-escalador.
.Concluyendo
Hasta ahora hemos visto una breve introduccin a la teora de los temporizadores y analizado el esquema funcional y los registros de trabajo del TIMER0 de los mi crocontroladores PIC, es importante que el lector dedique tiempo a revisar las hojas de datos y tome nota de las caractersticas de este y otros temporizadores, especfi camente para el modelo de dispositivo que pueda tener. As podr conocer con mayor nivel de detalle a este perifrico.
Nota del editor: En la prxima entrega tendremos un ejemplo concreto en el que pondremos a trabajar el TIMER0 para implementar un reloj, y utilizarlo en una de las aplicaciones tpicas: un reloj digital. Le sugerimos al amigo lector que tenga a mano las herramientas de su eleccin para poner a punto su reloj con temporizador versin 0.1.
//pgina 0x31
.circuitos
//Ariel Palazzesi
.El circuito
Actuando sobre el potencimetro R2 (Figura 1) se modifica la tensin presente en el pin 2 del CI NE555, lo cual produce un cambio en el tiempo de disparo. Para este circuito, T es de tamao fijo, lo nico que se hace al rotar R2, es cambiar Tm y Ts. El diodo D1 evita que la corriente generada por el motor cuando est girando sin alimentacin, destruya el transistor Q1. Este circuito se aplica perfectamente a pe queos motores de corriente continua, de entre 6V y 12V, con un consumo de corriente no mayor de 300 mA.
//pgina 0x32
.circuitos
Para motores ms grandes, se debe sustituir el transistor Q1 por uno de tecnologa MOSFET, capaz de manejar picos de hasta 50A. Lo hemos probado con mo tores de 12V/3A y funciona sin calentarse, an sin el uso de disipador de calor. El circuito para este tipo de motores puede observarse en la Figura 2.
cia variable R2 tiene el valor ms alto. En este caso Tm es tan pequeo que el motor permanece detenido. En el otro extremo, al llevar al potencimetro a su valor mnimo, Tm adquiere su valor mximo. La forma de onda para este caso, se muestra en la Figura 4. Con un ancho de pulso del 100%, Tm T, el motor recibir alimentacin de CC casi todo el tiempo, y girar a su mxima velocidad. Cualquier punto intermedio en tre estos dos estados es vlido. Logrando, de este modo, controlar la velocidad de giro del motor.
Figura 3: Forma de onda de la seal de salida del CI NE555, cuando R2 tiene el valor mximo.
Figura 4: Forma de onda de la seal de salida del CI NE555, cuando R2 tiene el valor mnimo.
//pgina 0x33
.circuitos
.Montaje
Hemos dibujado un circuito impreso y tambin un esquema con la posicin de los componentes sobre la placa. Puedes ver el PCB en la Figura 5 y la posicin de los componentes en la Figura 6.
Figura 5: Este es el PCB a utilizar.
Cantidad 2 1 3 1 1 1 1 1 1
Modelo 0.1uF 10uF 1N4148 1N4004 Bateria 6-12Vdc MOTOR DC 2N2222 1K 100K 22K LM555
1 1
Para motores de mayor consumo de corriente, utilice el PCB mostrado en la Figura 7 y el esquema de montaje de la Figura 8.
Figura 7: Este es el PCB a utilizar.
Cantidad 2 1 2 3 1 1 2 1 1
Modelo 0.1uF 10uF 1N4004 1N4148 Batera 6-12Vdc MOTOR DC 2N3906 IRFZ44 2N222 1K 100K 100 4.7K 22K LM555
3 1 1 1 1 1
w w w. u c o n t r o l . c o m . a r
//pgina 0x34