Está en la página 1de 70

APNDICE

Proyectos con el PIC16F84A

INTRODUCCIN
Ante las numerosas peticiones, consultas y recomendaciones que nos han enviado muchos lectores particulares, profesores y profesionales durante las primeras ediciones de esta obra, los autores nos hemos visto obligados a aadir este apndice, el cual describe de la manera ms sencilla que hemos sido capaces una coleccin de proyectos que pueden realizarse con un material fcil de encontrar, sencillo de manejar y muy econmico. Pretendemos que esta aportacin anime a todos los indecisos y les permita coger el vuelo. Una vez estn en el aire, ya se arreglarn ellos solos por la cuenta que les tiene. Para desarrollar las implementaciones fsicas de los proyectos hemos usado como soporte principal el PIC16F84A y la placa de prototipos PIC18-ME, de la empresa Ingeniera de Microsistemas Programados, S. L., a la que agradecemos su inestimable colaboracin. Dicha empresa comercializa un kit de proyectos bsicos y otro de proyectos tpicos que contienen todos los elementos empleados en los diseos, lo que permitir su fcil disponibilidad a los lectores que residan en zonas que carezcan de establecimientos electrnicos especializados o no estn muy versados en el tema. Con la finalidad de conseguir que los materiales de estos kits puedan utilizarse en todas las aplicaciones propuestas y en otras que acometa el usuario, se recomienda una placa protoboard para el montaje sin soldadura. Se recomienda, adems, el uso del sistema de desarrollo PIC School, ya descrito en un apndice anterior, para la puesta a punto del software. La primera parte de este apndice est destinada a describir, con todo lujo de detalles, cinco proyectos sencillos que emplean los componentes del kit de proyectos bsicos, resueltos ntegramente y acompaado cada uno de ellos de una pequea variacin sin resolver. En la segunda parte se exponen otros tres proyectos, tambin resueltos y con una variacin, que utilizan unos perifricos ms verstiles y tpicos en aplicaciones con microcontroladores, como son el teclado y la pantalla LCD, y que forman parte del kit de proyectos tpicos. Ya en la tercera parte, se propone una coleccin de proyectos para que los resuelva el lector empleando los mismos materiales y con distintos grados de complejidad. A continuacin, se expone el ndice de este anexo:

61

62

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

PRIMERA PARTE: PROYECTOS BSICOS RESUELTOS Y COMENTADOS 1.o 2.o 3.o 4.o 5.o 6.o Lista de materiales necesarios. Control de un dispositivo desde dos puntos. Semforo programable. Dado electrnico. Temporizador programable. Alarma.

SEGUNDA PARTE: PROYECTOS TPICOS RESUELTOS Y COMENTADOS 1.o 2.o 3.o 4.o Lista de materiales necesarios. Teclado musical. Mensaje de bienvenida sobre LCD. Escritura de mensajes de teclado sobre LCD.

TERCERA PARTE: COLECCIN DE PROYECTOS PROPUESTOS 1.o 2.o 3.o 4.o 5.o 6.o 7.o 8.o 9.o 10.o 11.o 12.o 13.o Ejercicio combinacional de manejo de E/S digitales. Otro ejercicio combinacional. Control de un torno. Automatismo de control de un taladro. Sistema antirrebotes. Manejo del TMR0. Contador ascendente/descendente. Control de la puerta de un garaje. Generacin de un nmero aleatorio. Presentacin de estados lgicos. Control de acceso a un local. Contador de miles de piezas. Sistema de control de acceso mediante clave.

PRIMERA PARTE: PROYECTOS BSICOS RESUELTOS Y COMENTADOS LISTA DE MATERIALES NECESARIOS Materiales comunes a todos los Proyectos Bsicos
1.o Tarjeta de prototipos PIC18-ME montada, de Ingeniera de Microsistemas Programados, S. L., y un transformador de alimentacin 220/15VAC-0,8 A. o 2. Protoboard para el montaje sin soldadura.

PROYECTOS CON EL PIC16F84A

63

3.o Microcontrolador PIC16F84A. 4.o Sistema de desarrollo PIC School para grabar y borrar el PIC, y depurar los programas. o 5. Cables de un solo hilo de cobre preestaado, de 0,8 mm de dimetro. En la fotografa de la Figura F.1 se muestran los componentes utilizados en los proyectos bsicos.

1. 2. 3. 4. 5. 6. 7. 8. 9.

Tiras de postes hembra (2). Barra de leds. Display 7 segmentos. PIC16F84A. RPACK DIL de 330 RPACK SIL de 330. RPACK SIL de 10K Optoacoplador H21A1. Dip-Switch.

10. 11. 12. 13. 14. 15. 16. 17.

Zumbador. Pulsador. Diodo led. R100. Marrn-negro-marrn. R220. Rojo-rojo-marrn. R180. Marrn-gris-marrn. R1K. Marrn-negro-rojo. R10K. Marrn-negro-naranja.

Figura F.1. Fotografa de los componentes empleados en la implementacin de los proyectos bsicos.

PROYECTO BSICO 1: CONTROL DE UN DISPOSITIVO DESDE DOS PUNTOS Enunciado y objetivos


Es muy usual tener que gobernar una carga (motor, lmpara, etc.) desde dos puntos situados a cierta distancia entre ellos. Por todos es conocido el control de una lmpara (L) en una sala que, al disponer de dos puertas muy distantes, se desea encenderla o apagarla desde dos interruptores (I1 e I2) situados al lado de las puertas.

64

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Figura F.2. Tabla de verdad y ecuacin lgica. Las seales negadas se representan con #.

Inicialmente, cuando I1 e I2 estn abiertos (0), la lmpara L est apagada (0). A partir de esta situacin, cada vez que cambia de estado uno de los interruptores, la lmpara cambia tambin su estado. Se muestra la tabla de verdad y la ecuacin lgica de la salida en la Figura F.2.

Materiales especficos para el proyecto bsico 1


1.o 2.o 3.o 4.o Diodo led rojo 5 mm. Conjunto de cuatro microrruptores Dip-Switch (slo se usan dos microrruptores). Resistencia de 330 W y 1/4 W. Dos resistencias de 10 K W y 1/4 W.

Esquema elctrico

Figura F.3. Esquema elctrico de la prctica. Los componentes dibujados con lnea fina se hallan premontados en la tarjeta de prototipos PIC18-ME.

PROYECTOS CON EL PIC16F84A

65

Foto del montaje

Figura F.4. Fotografa del montaje sobre la placa PIC18-ME.

Organigrama

Figura F.5. Organigrama del proyecto.

66

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

El programa comentado
PROYECTO BSICO 1: CONTROL DE UN DISPOSITIVO DESDE DOS PUNTOS

Se desea controlar una lmpara; en este caso, un diodo led, desde dos interruptores, de forma que cuando los dos interruptores estn abiertos, el led est apagado. A partir de esta situacin, cada vez que cambie el estado de un interruptor, el estado del led bascula (si est apagado, se enciende, y viceversa). Directivas del programa
LIST RADIX P=16F84A ;Se emplea el PIC16F84A HEX ;Sistema de numeracin hexadecimal

Etiquetas del programa


W F ESTADO EQU 0x00 ;Registro de destino W : d=0 EQU 0x01 ;Registro de destino F : d=1 EQU 0x03 ;El registro ESTADO ocupa la direccin 3 de los ;dos bancos PUERTAA EQU 0x05 ;La puerta A ocupa la direccin 5 del banco 0 ;y su registro de configuracin la direccin 5 del ;banco1 PUERTAB EQU 0x06 ;La puerta B ocupa la direccin 6 del banco 0 ;y su registro de configuracin la direccin 6 del ;banco1 AUX EQU 0x0C ;Registro auxiliar en el que se carga el estado de ;los interruptores

Programa principal
ORG 0 goto INICIO ORG 5 ;El programa comienza en la direccin 0 y ;salta a la direccin 5 para sobrepasar el ;vector de interrupcin

INICIO bsf ESTADO,5 ;Seleccin del banco 1 movlw b00000011 ;Se configura parte de la Puerta A como movwf PUERTAA ;entrada movlw b00000000 ;Se configura la Puerta B como movwf PUERTAB ;salida bcf ESTADO,5 ;Seleccin del banco 0 clrf PUERTAA ;Se inicializan las dos puertas a clrf PUERTAB ;cero clrf AUX ;Se inicializa el registro auxiliar a ceros BUCLE movf PUERTAA,W xorwf AUX,W ;Se exploran los interruptores de la Puerta A ;Se comprueba si el estado de los

PROYECTOS CON EL PIC16F84A

67

btfsc ESTADO,2 goto BUCLE LUZ btfss PUERTAB,0 goto PUERTA1 goto PUERTA0 PUERTA1 bsf PUERTAB,0 goto ACTUAL PUERTA0 bcf PUERTAB,0 ACTUAL movf PUERTAA,W movwf AUX goto BUCLE END

;interruptores ha cambiado, para lo cual se ;detecta si se ha activado el bit 2 del ;registro estado (Z) ;Si no ha cambiado, se sigue explorando hasta ;que uno cambie ;Se comprueba ;saber si hay ;Se llama a la ;led ;Se llama a la si el led est encendido para que apagarlo o encenderlo rutina Puesta1 que enciende el rutina Puesta0, que apaga el led

;Se pone a 1 el bit 0 de la Puerta B (led) ;Se pone a 0 el bit 0 de la Puerta B ;Se actualiza el estado de AUX para comprobar ;luego si los interruptores han cambiado de valor ;Salto a bucle para empezar de nuevo

Propuesta de un nuevo proyecto


Para comenzar a disear con microcontroladores, y una vez que ha sido capaz de poner en marcha el proyecto que hemos descrito, le proponemos un ejercicio para que lo implemente usted. Se dispone de tres interruptores, I1, I2 e I3, con los que se desea controlar un diodo led L, de tal forma que debe encenderse cuando dos, y slo dos, de los interruptores estn cerrados. En todas las dems situaciones, el diodo led debe estar apagado.

PROYECTO BSICO 2: SEMFORO PROGRAMABLE Enunciado y objetivos


Se trata de simular el funcionamiento de las tres luces de un semforo (verde, mbar y roja) mediante tres diodos led (L1, L2 y L3) de entre los diez de que dispone una barra DIL. El control del encendido y apagado de los led se realiza mediante los microrruptores I1 e I2 de los cuatro de que dispone un conjunto Dip-Switch. Segn el estado de los microrruptores, se desarrolla una secuencia concreta de tiempo de encendido de los tres led que simulan las luces del semforo de acuerdo con la tabla de la Figura F.6. La finalidad primordial de este ejercicio es la de manejar el temporizador TMR0 para que produzca retardos de diversa duracin.

68

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

i2 0 0 1 1

i1 0 1 0 1

L1(V) Rb1 5 5 8 10

L2(A) Rb3 2 2 2 2

L3(R) Rb5 5 10 8 5

Figura F.6. Tabla de verdad en la que se indican los segundos de encendido de los led.

Materiales especficos para el proyecto bsico 2


1.o 2.o 3.o 4.o Barra DIL de 10 diodos led (slo se usan tres leds). Conjunto de ocho resistencias RPACK SIL de 330 y 1/4 W (slo se usan tres). Dos resistencias de 10 K y 1/4 W. Conjunto de cuatro microrruptores Dip-Switch (slo se usan dos microrruptores).

Esquema elctrico

Figura F.7. Esquema elctrico.

PROYECTOS CON EL PIC16F84A

69

Como se puede apreciar en la Figura F.7, los microrruptores I1 e I2 se conectan a las lneas de entrada RA0 y RA1 de la puerta A a travs de sendas resistencias de 10 K. En este caso son activos por nivel bajo. Los diodos led L1, L2 y L3 se conectan a las lneas de salida RB1, RB3 y RB5 de la puerta B a travs de resistencias de 330 . Los dems elementos del esquema estn presolados en la tarjeta de prototipos PIC18-ME.

Organigrama

Figura F.8. Organigrama del funcionamiento del semforo.

70

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Foto del montaje

Figura F.9. Fotografa del montaje sobre la placa PIC18-ME.

El programa comentado
PROYECTO BSICO 2: SEMFORO PROGRAMABLE

Se simula un semforo con tres diodos led. Se dispone de dos interruptores que, segn la combinacin que adopten, originan una secuencia de encendido de las luces del semforo. Directivas del programa
LIST RADIX P=16F84A HEX ;Se emplea el PIC16F84A ;Sistema de numeracin hexadecimal

PROYECTOS CON EL PIC16F84A

71

Etiquetas del programa


W F Z TMR0_OPT ESTADO INTCON PUERTAA PUERTAB AUX TEMPO1 EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0x00 0x01 0x02 0x01 0x03 0x0B 0x05 0x06 0x0C 0x0E ;Registro de destino W : d=0 ;Registro de destino F : d=1 ;Bit 2 del registro ESTADO ;El registro TMR0 ocupa la direccin 1 ;del banco 0 y el OPTION la direccin 1 ;del banco 1 ;El registro ESTADO ocupa la direccin ;3 de los dos bancos ;El registro INTCON ocupa la direccin ;B de los dos bancos ;La puerta A ocupa la direccin 5 del ;banco 0 y su registro de configuracin ;la direccin 5 del banco 1 ;La puerta B ocupa la direccin 6 del ;banco 0 y su registro de configuracin ;la direccin 6 del banco 1 ;Registro auxiliar en el que se carga el ;estado de los interruptores ;Registro auxiliar para las rutinas de ;DELAY

Programa principal
ORG goto ORG INICIO bsf movlw movwf clrf movlw movwf bcf clrf clrf BUCLE call movf movwf 0 INICIO 5 ;El programa comienza en la direccin 0 y ;salta a la direccin 5 para sobrepasar el ;vector de interrupcin

xorlw btfsc goto movf xorlw btfsc

ESTADO,5 ;Seleccin del banco 1 b00000011 ;Se configuran RA0 y RA1 como PUERTAA ;entradas PUERTAB ;Se configura la puerta B como salida b00000111 TMR0_OPT ;Se asigna el preescaler al TMR0 ESTADO,5 ;Seleccin del banco 0 PUERTAA ;Se inicializan las dos puertas a PUERTAB ;cero DELAY2S ;Se deja tiempo para que el usuario ;programe el semforo PUERTAA,W ;Se pasa el contenido de la puerta A a un ;registro AUX ;auxiliar. Dicho registro habr que pasarlo ;a W antes ;de cada operacin XORLW, ya que la anterior ;habr cambiado su valor b00000011 ;Se hacen sucesivas mscaras para saber ;qu combinacin se ha introducido ESTADO,Z TRAT_1_1 AUX,W b00000010 ESTADO,Z

72

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

goto movf xorlw btfsc goto goto

TRAT_1_0 AUX,W b00000001 ESTADO,Z TRAT_0_1 TRAT_0_0 ;Si no es ninguna combinacin anterior, tiene que ;ser la correspondiente a I2=0 e I1=0

Rutina para la combinacin I2 = 1 e I1 = 1


TRAT_1_1 bsf call bcf bsf call bcf bsf call bcf goto PUERTAB,1;Se DELAY10S ;Se PUERTAB,1;Se PUERTAB,3;Se DELAY2S ;Se PUERTAB,3;Se PUERTAB,5;Se DELAY5S ;Se PUERTAB,5;Se FIN enciende el led de RB1 (verde) espera los segundos adecuados segn I1 e I2 apaga el led verde enciende el led de RB3 (mbar) espera los segundos adecuados apaga el led mbar enciende el led de RB5 (rojo) espera los segundos adecuados apaga el led rojo

Rutina para la combinacin I2 = 1 e I1 = 1


TRAT_1_0 bsf call bcf bsf call bcf bsf call bcf goto PUERTAB,1 DELAY8S PUERTAB,1 PUERTAB,3 DELAY2S PUERTAB,3 PUERTAB,5 DELAY8S PUERTAB,5 FIN

Rutina para la combinacin I2 = 0 e I1 = 1


TRAT_0_1 bsf call bcf bsf call bcf bsf call bcf goto PUERTAB,1 DELAY5S PUERTAB,1 PUERTAB,3 DELAY2S PUERTAB,3 PUERTAB,5 DELAY10S PUERTAB,5 FIN

PROYECTOS CON EL PIC16F84A

73

Rutina para la combinacin I2 = 0 e I1 = 1


TRAT_0_0 bsf call bcf bsf call bcf bsf call bcf goto FIN goto PUERTAB,1 DELAY5S PUERTAB,1 PUERTAB,3 DELAY2S PUERTAB,3 PUERTAB,5 DELAY5S PUERTAB,5 FIN BUCLE ;Bucle para repetir el tratamiento completo

Rutina auxiliar de DELAY


DELAY10 bcf movlw movwf INTCON,2 0xD9 TMR0_OPT INTCON,2 DELAY10_1 TEMPO1,F DELAY10 ;Borra el flag de estado del TMR0 ;Carga del TMR0 para que cuente 39 ;Espera el desbordamiento del TMR0

DELAY10_1 btfss goto decfsz goto return

Rutina de DELAY de un segundo


DELAY1S movlw movwf 0x64 TEMPO1 ;Carga la variable TEMPO1, que ser ;decrementada ;en la rutina a la que se llama

call DELAY10 return

Rutina de DELAY de dos segundos


DELAY2S call call return DELAY1S DELAY1S

Rutina de DELAY de cinco segundos


DELAY5S call call call return DELAY2S DELAY2S DELAY1S

74

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Rutina de DELAY de ocho segundos


DELAY8S call call call return DELAY5S DELAY2S DELAY1S

Rutina de DELAY de diez segundos


DELAY10S call call return END DELAY5S DELAY5S

Propuesta de un nuevo proyecto


Para continuar con el manejo del TMR0 y el control de tiempos se propone un programa que maneje ocho diodos led de la barra DIL usada en el proyecto bsico 2. Los ocho diodosled (L0-L7) de menos peso de la barra DIL se conectan a las ocho lneas (RB0-RB7) de la puerta B. Los led se irn encendiendo secuencialmente durante un tiempo de 0,1 segundos de izquierda a derecha, o viceversa, segn que el estado lgico que introduzca el microrruptor I0 conectado a la lnea RA0 de la puerta A sea un 0 o un 1 respectivamente. Para realizar este experimento se precisan los mismos componentes que en el proyecto bsico 2.

PROYECTO BSICO 3: DADO ELECTRNICO Enunciado y objetivos


Este proyecto, ya descrito de forma general anteriormente, trata de simular un juego de azar. Un dado tpico tiene seis caras, en cada una de las cuales viene marcado un nmero de puntos de 1 a 6. El dado es sustituido por un display de siete segmentos, que ser el encargado de visualizar un nmero aleatorio comprendido entre el 0 y el 6 cada vez que se presione un pulsador.

Materiales especficos para el proyecto bsico 3


1.o 2.o 3.o 4.o 5.o Display de siete segmentos 043 C.C. de ctodo comn. Conjunto de ocho resistencias RPACK SIL de 330 W y 1/4 W (no se utiliza una). Pulsador tipo tecla C.I. blanca 12x12. Resistencia de 10 KW y 1/4 W. Resistencia de 1 KW y 1/4 W.

PROYECTOS CON EL PIC16F84A

75

Foto del montaje


En la Figura F.10 se muestra una foto del montaje de los perifricos del dado sobre una protoboard y su conexionado con las lneas de E/S del PIC instalado en la tarjeta de prototipos PIC18-ME.

Figura F.10. Fotografa del montaje sobre la placa PIC18-ME.

Esquema elctrico
En el esquema de la Figura F.11 se muestra la conexin de las siete lneas de menos peso de la puerta B (RB0-RB6) a los segmentos del display a travs de siete de las ocho resistencias de 330 contenidas en el pack. La lnea de entrada RA0 soporta el nivel lgico que introduce el pulsador. Los dems componentes del circuito se hallan premontados en la tarjeta de prototipos. El pulsador introducir un 1 lgico al activarse, aunque podra conectarse para introducir un 0 al ser pulsado. Por su parte, el display de siete segmentos tambin se activa por nivel alto, ya que es de ctodo comn. Para que se activara por ceros tendramos que cambiar el display por uno de nodo comn.

76

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Figura F.11. Esquema elctrico.

El programa comentado
PROYECTO BSICO 3: DADO ELECTRNICO

Este programa simula el juego del dado. Un dado tpico tiene seis caras, en cada una de las cuales viene dibujado un nmero del 1 al 6. Cada vez que se presiona un pulsador, se produce un nmero aleatorio entre 1 y 6, el cual se visualiza en un display de siete segmentos. Directivas del programa
LIST RADIX P=16F84A HEX ;Se emplea el PIC16F84A ;Sistema de numeracin hexadecimal

Etiquetas del programa


W F Z EQU EQU EQU 0x00 0x01 0x02 ;Registro de destino W : d=0 ;Registro de destino F : d=1 ;Bit 2 del registro ESTADO

PROYECTOS CON EL PIC16F84A

77

Organigrama

Figura F.12. Organigrama del funcionamiento del dado.

PC ESTADO PUERTAA PUERTAB RESUL

EQU EQU EQU EQU EQU

0x02 0x03 0x05 0x06 0x0E

;El registro PC ocupa la direccin 2 de ;los dos bancos ;El registro ESTADO ocupa la direccin ;3 de los dos bancos ;La puerta A ocupa la direccin 5 del ;banco 0 y su registro de configuracin ;la direccin 5 del banco 1 ;La puerta B ocupa la direccin 6 del ;banco 0 y su registro de configuracin ;la direccin 6 del banco 1 ;Registro auxiliar para los nmeros ;aleatorios

78

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Programa principal
ORG goto ORG INICIO bsf movlw movwf clrf bcf movlw 0 INICIO 5 ESTADO,5 b00000001 PUERTAA PUERTAB ESTADO,5 0x01 ;El programa comienza en la direccin 0 y ;salta a la direccin 5 para sobrepasar el ;vector de interrupcin ;Seleccin del banco 1 ;Se configura RA0 como entrada ;Se configura la puerta B como salida ;Seleccin del banco 0 ;Se inicializa la primera vez el valor de la ;variable ;auxiliar sobre la que se hallar el nmero ;aleatorio ;Se llama a ;aleatorio ;Se llama a ;nmero a 7 ;Se muestra la rutina que crea un nmero la rutina que transforma el segmentos. Deja el resultado en W el resultado en el display

movwf RESUL
BUCLE call call RANDOM DEC7SEG

movwf PUERTAB goto BUCLE

Rutina de visualizacin
DEC7SEG addwf PC,F ;Mediante esta instruccin, el PC apunta a la ;direccin de la tabla que se corresponde con el N.o a ;visualizar en el display 7 segmentos. Toma el valor ;hexadecimal de W y deja el valor 7 segmentos en W retlw 79 ;Este primer desplazamiento nunca se va a dar, ya ;que se correspondera con el 0, y el dado slo ;dispone de nmeros entre el 1 y el 6. El valor que ;mostrara sera una E (Error) retlw 06 retlw 5B retlw 4F retlw 66 retlw 6D retlw 7D

Rutina para generacin de nmero aleatorio


RANDOM btfsc PUERTAA,0 ;Se utiliza la presin del pulsador para parar el ;contaje y obtener as el nmero aleatorio goto VOLVER ;Si se ha pulsado, se vuelve al punto de llamada movlw b00000110 ;Se hace una comparacin de RESUL con 6 por si subwf RESUL,W ;se tiene que volver a empezar de 1 btfsc ESTADO,Z ;Si RESUL=6, se inicializa; si no, se incrementa clrf RESUL incf RESUL,F goto RANDOM ;Se repite el bucle hasta que se pulse (orden de ;parada) VOLVER movf RESUL,W ;Sobre W queda el ltimo nmero antes de la ;pulsacin return END

PROYECTOS CON EL PIC16F84A

79

Propuesta de un nuevo proyecto


Se dispone de un display de siete segmentos y de un conjunto de cuatro microrruptores usados en proyectos anteriores. Se trata de visualizar en el display un dgito hexadecimal del 0 al F, segn el valor binario en que se hallen los cuatro microrruptores. De esta forma, si los cuatro microrruptores introducen nivel alto, el display visualizar la F; si introducen nivel bajo, visualizar el 0, etc.

PROYECTO BSICO 4: TEMPORIZADOR PROGRAMABLE Enunciado y objetivos


Se propone disear un temporizador que controle un tiempo medido en segundos hasta un mximo de siete. Para programar el temporizador se dispone de tres de los cuatro microrruptores del pack usado en proyectos anteriores. Segn su posicin, determinan un valor binario, que puede alcanzar el valor siete cuando los tres introducen un nivel alto. El tiempo seleccionado lo visualiza un display de siete segmentos, que se va decrementando hasta llegar a cero. Tambin existe un pulsador para poner en marcha la cuenta del tiempo. Como perifricos de salida, existe, adems del display, un diodo led rojo y un zumbador acstico, el primero de los cuales se ilumina y el otro genera un pitido mientras dura el perodo de tiempo a regular.

Materiales especficos para el proyecto bsico 4


1.o 2.o 3.o 4.o 5.o 6.o 7.o 8.o 9.o Display de siete segmentos 043 C.C. de ctodo comn. Conjunto de ocho resistencias RPACK SIL de 330 W y 1/4 W (no se utiliza una). Pulsador tipo tecla C.I. blanca 12x12. Zumbador miniatura C.I. P=7,5. Diodo led rojo 5 mm. Cinco resistencias de 10K W y 1/4 W. Resistencia de 1K W y 1/4 W. Resistencia de 330 W y 1/4 W. Conjunto de cuatro microrruptores Dip-Switch (no se utiliza uno).

Esquema elctrico
La puerta B est configurada como salida y sus siete lneas de menos peso se asignan al control del display de siete segmentos a travs de siete resistencias de 330 . La puerta A acta como entrada y recibe el estado lgico de los microrruptores que programan el tiempo. Obsrvese que en el esquema de la Figura F.13 se han instalado cuatro microrruptores en lugar de los tres que son necesarios en este ejercicio. La razn ha sido dejar preparado el montaje para el proyecto que se propone al final del tema. En nuestro caso, los tres microrruptores vlidos sern los conectados a las tres lneas de menos peso de la puerta A (RA0, RA1 y RA2). El microrruptor de RA3 no tiene significado y su valor se pone a 0 por software cuando se lee la puerta A.

80

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Figura F.13. Esquema elctrico del temporizador programable. Se ha colocado un microrruptor extra para resolver fcilmente otro proyecto propuesto posteriormente.

Finalmente, la lnea de salida RB7 soporta simultneamente al diodo led rojo y al zumbador.

Foto del montaje

Figura F.14. Fotografa del montaje sobre la placa PIC18-ME.

PROYECTOS CON EL PIC16F84A

81

El programa comentado
PROYECTO BSICO 4: TEMPORIZADOR PROGRAMABLE

Con tres microrruptores se selecciona un valor entre el 0 y el 7 (binario), que representa un tiempo en segundos y que ser visualizado por el display de siete segmentos. Durante el tiempo que dura la temporizacin, un led rojo permanece activado, as como un zumbador. Al finalizar, se desactivan ambos elementos y el display se pone a 0. Directivas del programa
LIST RADIX P=16F84A HEX ;Se emplea el PIC16F84A ;Sistema de numeracin hexadecimal

Etiquetas del programa


W F Z EQU EQU EQU 0x00 0x01 0x02 0x01 0x02 0x03 0x0B 0x05 0x06 0x0C 0x0E ;Registro de destino W : d=0 ;Registro de destino F : d=1 ;Bit 2 del registro ESTADO ;El registro TMR0 ocupa la direccin 1 ;del banco 0 y el OPTION la direccin 1 ;del banco 1 ;El registro PC ocupa la direccin 2 de ;los dos bancos ;El registro ESTADO ocupa la direccin ;3 de los dos bancos ;El registro INTCON ocupa la direccin ;B de los dos bancos ;La puerta A ocupa la direccin 5 del ;banco 0 y su registro de configuracin ;la direccin 5 del banco 1 ;La puerta B ocupa la direccin 6 del ;banco 0 y su registro de configuracin ;la direccin 6 del banco 1 ;Registro auxiliar en el que se carga el ;estado de los interruptores ;Registro auxiliar para las rutinas de ;DELAY

TMR0_OPT EQU PC ESTADO INTCON PUERTAA PUERTAB AUX TEMPO1 EQU EQU EQU EQU EQU EQU EQU

Programa principal
ORG goto ORG INICIO bsf movlw movwf clrf 0 INICIO 5 ESTADO,5 0xFF puerta A puerta B ;El programa comienza en la direccin 0 y ;salta a la direccin 5 para sobrepasar el ;vector de interrupcin ;Seleccin del banco 1 ;Se configura la puerta A como ;entrada ;Se configura la puerta B como salida

82

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Organigrama

Figura F.15. Organigrama.

PROYECTOS CON EL PIC16F84A

83

movlw movwf bcf clrf clrf BUCLE

b00000111 TMR0_OPT ;Se asigna el preescaler al TMR0 ESTADO,5 ;Seleccin del banco 0 puerta A ;Se inicializan las dos puertas a PUERTAB ;ceros

btfss PUERTAA,4

;Se explora el valor del pulsador, que ser ;el que indique el comienzo del contaje de ;tiempo. Los microrruptores se encontrarn ;ya en una determinada posicin goto BUCLE ;Se contina en el bucle hasta que se pulse movf PUERTAA,W ;Se lee el valor de los microrruptores andlw b00000111 ;Se pone a 0 con una mscara los bits que no ;interesan movwf AUX ;Sobre la variable AUX se llevar el contaje movf AUX,F ;Hay que controlar que el valor puede ser 0, btfsc ESTADO,Z ;con lo cual no hay que meterse en un bucle goto CERO ;que lo decremente, sino sacarlo directamente ;La rutina DEC7SEG necesita en W el valor hex. ;Se carga en W el valor a visualizar por el ;display iorlw b10000000 ;Se modifica slo el bit 7 de W, que es el que ;se corresponder con RB7 (led y zumbador), ;y que la rutina de decodificacin binario;7 segm. ha dejado a 0 movwf PUERTAB ;Se visualiza el nmero por el display y se ;activan el led y el zumbador call DELAY1S ;Se espera un segundo decfsz AUX,F ;Se decrementa el valor que se va mostrando goto CONTAJE ;Contar y visualizar en descendente hasta 1 movf call movwf call goto AUX,W DEC7SEG PUERTAB DELAY1S BUCLE ;Se traduce el valor 0 ;No hace falta activar el led y el zumbador AUX,W DEC7SEG

CONTAJE movf call

CERO

Rutina de visualizacin
DEC7SEG addwf PC,F ;Con esta instruccin, el PC apunta a la direccin ;de la tabla correspondiente al N.o a visualizar ;en el display retlw 3F ;Retorno con carga de W con un inmediato retlw 06 retlw 5B retlw 4F retlw 66 retlw 6D retlw 7D retlw 07

84

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Rutina auxiliar de DELAY


DELAY10 bcf movlw movwf INTCON,2 0xD9 TMR0_OPT INTCON,2 DELAY10_1 TEMPO1,F DELAY10 ;Borra el flag de estado del TMR0 ;Carga del TMR0 para que cuente 39 ;Espera el desbordamiento del TMR0

DELAY10_1 btfss goto decfsz goto return

Rutina de DELAY de un segundo


DELAY1S movlw 0x64 movwf TEMPO1 ;Carga la variable TEMPO1, que ser decrementada call DELAY10 ;en la rutina a la que se llama return END

Propuesta de un nuevo proyecto


En el esquema elctrico de la Figura F.13 se introdujo un cuarto microrruptor, el cual no tena ningn significado en dicho ejercicio. Se propone ampliar el tiempo de contaje del temporizador para que sea capaz de alcanzar hasta quince segundos. Para ello, se usarn los cuatro microrruptores, que introducirn un valor hexadecimal entre 0 y F. Las funciones del display, el led rojo y el zumbador seguirn siendo las mismas que en el caso anterior, es decir, el display se ir decrementando (en hexadecimal) a medida que transcurre el tiempo programado y el comienzo y el fin se sealizarn con el diodo y el zumbador.

PROYECTO BSICO 5: ALARMA Enunciado y objetivos


Se trata de simular una alarma domstica, para lo cual se colocan tres detectores en posibles puntos de entrada a una vivienda y avisadores acsticos y visuales. Cada sensor provoca el encendido de un diodo led diferente cuando se activa y un pitido por un zumbador, significando que la alarma ha saltado. Los detectores estn implementados por dos microrruptores y un optoacoplador. Un optoacoplador es un sensor que manda una determinada seal (0 o 1 lgico) cuando existe haz luminoso entre el emisor y el detector y la seal contraria cuando dicho haz se corta. Los tres diodos led se encontrarn en la barra de led usada en experiencias anteriores. Un tercer microrruptor servir para conectar y desconectar la alarma.

PROYECTOS CON EL PIC16F84A

85

Materiales especficos para el proyecto bsico 5


1.o 2.o 3.o 4.o 5.o 6.o Un optoacoplador MCA81, H21A1 o equivalente. Barra DIL de diez diodos led (slo se usan tres led). Conjunto de ocho resistencias RPACK SIL de 330 y 1/4 W (slo se usan tres). Zumbador miniatura C.I. P = 7,5. Conjunto de cuatro microrruptores Dip-Switch (no se utiliza una). Tres resistencias de 10 K y 1/4 W.

Esquema elctrico

Figura F.16. Esquema interno y de conexionado del optoacoplador MCA81.

Figura F.17. Esquema elctrico de la alarma.

86

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

La Figura F.16 muestra el aspecto externo y la configuracin interna de un optoacoplador estndar. Las resistencias no pertenecen al optoacoplador, sino que deben utilizarse en su conexionado.

Foto de montaje

Figura F.18. Fotografa del montaje sobre la placa PIC18-ME.

En las lneas RB1, RB3 y RB5 de la puerta B, configurada como salida, estn colocados los led y en RB0 el zumbador. Hay dos microrruptores I2 e I3 conectados a las lneas RA1 y RA2 que simulan dos detectores digitales. El tercer detector, que es el optoacoplador, est conectado a RA3. Por ltimo, el microrruptor I1, conectado en RA0, es el que conecta y desconecta la alarma.

El programa comentado
PROYECTO BSICO 5: ALARMA

Se tienen tres detectores digitales, cada uno de los cuales provocar la activacin de un led, diferente en cada caso. Uno de los detectores ser un optoacoplador y los otros dos se simularn mediante dos microrruptores.

PROYECTOS CON EL PIC16F84A

87

Organigrama

Figura F.19. Organigrama.

El programa consiste en poner en marcha un zumbador cuando la alarma salte por causa de la activacin de cualquiera de los detectores. Tambin se enciende el led correspondiente al detector. La alarma slo funcionar cuando el microrruptor I1 de conexin est a nivel alto. Directivas del programa
LIST RADIX P=16F84A HEX ;Se emplea el PIC16F84A ;Sistema de numeracin hexadecimal

Etiquetas del programa


W F Z EQU EQU EQU 0x00 0x01 0x02 ;Registro de destino W : d=0 ;Registro de destino F : d=1 ;Bit 2 del registro ESTADO

88

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

ESTADO PUERTAA PUERTAB

EQU EQU EQU

0x03 0x05 0x06

;El registro ESTADO ocupa la direccin ;3 de los dos bancos ;La puerta A ocupa la direccin 5 del ;banco 0 y su registro de configuracin ;la direccin 5 del banco 1 ;La puerta B ocupa la direccin 6 del ;banco 0 y su registro de configuracin ;la direccin 6 del banco 1

Programa principal
ORG goto ORG INICIO bsf movlw movwf clrf bcf clrf clrf BUCLE 0 INICIO 5 ESTADO,5 0xFF PUERTAA PUERTAB ESTADO,5 PUERTAA PUERTAB ;El programa comienza en la direccin 0 y ;salta a la direccin 5 para sobrepasar el ;vector de interrupcin ;Seleccin del banco 1 ;Se configura la puerta A como ;entrada ;Se configura la puerta B como salida ;Seleccin del banco 0 ;Se inicializan las dos puertas a ;ceros

btfss PUERTAA,0 ;Se explora el valor del microrruptor que indica ;si la alarma est o no conectada goto DESCON ;Si est desconectada, habr que desactivar ;los led y el zumbador por si estaban activados ;de una anterior pasada por el bucle call SENS1 ;Se comprueba el estado de los tres sensores y ;se hace el tratamiento que corresponda con los led call SENS2 call SENS3 call ZUMB ;Si alguno de los sensores est activado, el ;zumbador deber pitar;si no, no goto BUCLE PUERTAB BUCLE

DESCON clrf goto

Rutina de tratamiento del sensor 1


SENS1 btfss goto goto DESACT1 bcf goto ACT1 bsf goto PUERTAA,1 DESACT1 ACT1 PUERTAB,1 VOLVER1 PUERTAB,1 VOLVER1 ;Si est a 1, hay que activar el led ;correspondiente ;Si no, hay que desactivarlo

VOLVER1 return

PROYECTOS CON EL PIC16F84A

89

Rutina de tratamiento del sensor 3


SENS3 btfss goto goto DESACT3 bcf goto ACT3 bsf goto PUERTAA,3 DESACT3 ACT3 PUERTAB,5 VOLVER3 PUERTAB,5 VOLVER3 ;Si est a 1, hay que activar el led ;correspondiente ;Si no, hay que desactivarlo

VOLVER3 return

Rutina de tratamiento del zumbador


ZUMB movf PUERTAA,W andlw b00001110 ;Con esta mscara se consigue que sobre W ;quede slo el valor de los sensores. ;Si ninguno est activo, W contendr 0 y ;el flag Z se pondr a 1. btfss ESTADO,Z ;Si est a 1, hay que desactivar el zumbador. goto ACTZ ;Si no, hay que activarlo goto DESACTZ PUERTAB,0 VOLVERZ PUERTAB,0 VOLVERZ

DESACTZ bcf goto ACTZ bsf goto

VOLVERZ return END

Propuesta de un nuevo proyecto


Sin modificar el hardware de la alarma, confeccionar un nuevo programa que opere de forma similar, pero con los siguientes cambios: 1.o La activacin de los led no es permanente, sino que parpadean cada segundo. 2.o El zumbador slo genera un pitido cuando es el optoacoplador el que se ha activado. 3.o Cuando uno de los detectores se activa, el primer led (RB1) parpadea. Si se activan dos de los detectores, parpadean los dos primeros led (RB1 y RB3), y si estn activados los tres detectores, parpadean los tres led.

90

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

SEGUNDA PARTE: PROYECTOS TPICOS RESUELTOS Y COMENTADOS LISTA DE MATERIALES NECESARIOS


En la fotografa de la Figura F.20 se muestran los componentes utilizados en los proyectos tpicos. Se supone que adicionalmente se tienen los componentes que se usaban en los proyectos bsicos.

Figura F.20. Materiales utilizados en los proyectos tpicos.

Materiales comunes a todos los proyectos tpicos


1.o Protoboard para el montaje sin soldadura. 2.o Un microcontrolador PIC16F84. 3.o Sistema de desarrollo MicroPIC Trainer para grabar y borrar el PIC y depurar los programas. o 4. Cables de un solo hilo de cobre preestaado de 0,8 mm de dimetro.

PROYECTO TPICO 1: TECLADO MUSICAL Introduccin. Instalacin y manejo del teclado


Un perifrico muy habitual para introducir informacin al sistema por parte del usuario es el teclado. Nos referimos al teclado matricial de diecisis teclas que se incluye en el kit y que estn distribuidas en cuatro filas y cuatro columnas (Fig. F.21). Los ocho terminales del teclado, cuatro para las filas y cuatro para las columnas, se conectarn a las

PROYECTOS CON EL PIC16F84A

91

Figura F.21. Estructura y conexionado interno del teclado matricial de diecisis teclas distribuidas en cuatro filas y cuatro columnas.

ocho lneas de E/S de la puerta B del PIC. Cuando se pulsa una tecla, queda en contacto una fila con una columna. Si ninguna tecla est presionada, las filas estn desconectadas de las columnas. Para explorar el teclado y averiguar en cada momento cul es la tecla que se halla pulsada, se sigue el siguiente mtodo. Se va a trabajar con el nivel lgico alto actuando como nivel desactivo, siendo el nivel bajo al que consideraremos activo. Por los terminales de las filas del teclado se introducen cuatro niveles lgicos, uno activo (bajo) y los otros tres desactivos (altos). Si existe alguna tecla pulsada en la fila por la que se ha introducido el nivel bajo, dicho nivel saldr por la columna correspondiente con la que haga contacto. En consecuencia, leyendo los estados lgicos de los terminales de las columnas (RB0-RB3) averiguaremos si hay alguna tecla pulsada en la fila por la que se ha introducido el nivel bajo, puesto que si no hay ninguna en todas las columnas se leer nivel alto inactivo. Procediendo secuencialmente a introducir el nivel bajo por cada una

Figura F.22. Al introducir a las filas el cdigo 1110 por las lneas de salida de la puerta B (RB7:RB4), se obtiene en las filas conectadas a las lneas de entrada de la puerta B (RB3-RB0) el cdigo 0111 si la tecla F est presionada.

92

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

de las cuatro filas y a leer los niveles de salida en las columnas, se podr determinar la tecla pulsada en cada momento. Por ejemplo, si por las lneas RB7:RB4 se aplica a las filas los niveles lgicos 1110, el nivel bajo quedar soportado por la primera fila, la unida a la lnea RB4. Si en esta situacin se halla pulsada la tecla F, al leer los estados de las columnas presentes sobre las lneas RB3:RB0, por la lnea RB3 saldr el nivel bajo, mientras que por las restantes habr nivel alto. Se habr obtenido en las columnas el cdigo 0111 (RB3:RB0). En resumen, se ha introducido el cdigo 1110 a las filas por las lneas RB7:RB4 y en las lneas RB3:RB0 se lee el cdigo 0111 que se corresponde con la tecla F. El programa de exploracin del teclado ir introduciendo por las cuatro lneas de ms peso de la puerta B los cuatro cdigos correspondientes a la introduccin del nivel bajo en cada caso por una de ellas, o sea, los cdigos 0111, 1011, 1101 y 1110. Al introducir cada uno de estos cdigos, se explora el nivel en las columnas conectadas a las lneas de menos peso de la puerta B. Cuando sale un nivel bajo por una columna, conociendo en ese momento por qu fila se ha introducido el nivel bajo, se averigua la tecla presionada por la interseccin de dicha fila con dicha columna. Cuando en la exploracin no hay ninguna tecla pulsada, se suele generar un cdigo concreto que representa esa posibilidad. En la Figura F.23 se muestra la tabla correspondiente a la pulsacin de cada una de las diecisis teclas y el cdigo hexadecimal que existe con los niveles lgicos que se introducen por las filas y los que se obtienen en las columnas.
FILAS (ENTRADAS) RB7 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 RB6 1 1 1 1 1 1 1 0 0 0 1 1 1 0 1 1 RB5 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 1 RB4 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 COLUMNAS (SALIDAS) RB3 RB2 1 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 RB1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 RB0 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 1

TECLA 0 1 2 3 4 5 6 7 8 9 A B C D E F

CDIGO HEX. 7D EE ED EB DE DD DB BE BD BB 7E 7B 77 B7 D7 E7

Figura F.23. Tabla que muestra los cdigos binarios y hexadecimales que se obtienen con la pulsacin de cada una de las diecisis teclas del teclado matricial.

PROYECTOS CON EL PIC16F84A

93

Cuando no hay ninguna tecla pulsada en una fila aparecen cuatro niveles altos en las cuatro columnas por estar desconectadas al aire y corresponderlas estado de alta impedancia, que en lgica TTL es equivalente al nivel alto. Para asegurar dicho nivel alto, las lneas de la puerta B pueden conectarse al positivo de la alimentacin mediante unas resistencias de pull-up internas. Esta conexin puede realizarse por software, poniendo a 0 el bit 7 (RBPU#) del registro OPTION del PIC16F84A (en el PIC16C84 este bit tiene programacin inversa). Se recomienda colocar cuatro resistencias de 2K2, como se muestra en la Figura F.24.

Figura F.24. Las lneas de la puerta B del PIC16F84A pueden conectarse al positivo a travs de unas resistencias internas de pull-up por software. As, cuando no hay ninguna tecla pulsada, existe un nivel lgico alto.

Otra precaucin que hay que tener con los teclados es la introduccin de pequeos retardos en la exploracin de las teclas pulsadas para evitar los rebotes. Un retardo adecuado para eliminar los rebotes es de 20 ms, que se puede conseguir utilizando el timer TMR0 al cargarle con el valor 7810 = 4E16, y asignar al divisor de frecuencias el rango de 256. En la Figura F.25 se ofrece el esquema de conexionado del teclado con el PIC16F84A con la circuitera auxiliar necesaria y que soporta la tarjeta de prototipos PIC18-ME. Para el manejo del teclado se utilizan las libreras P16CXX.INC y TECLADO.ASM. Se recomienda usar la primera en la cabecera de cualquier programa con un PIC de la gama media. En ella se definen todos los registros internos fundamentales que se manejan en el cdigo que resuelve las aplicaciones. En el ced que acompaa al libro se incluye dicha rutina. TECLADO.ASM recoge rutinas para la gestin especfica del teclado.

94

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Figura F.25. Conexionado del teclado con las lneas de la puerta B del PIC16F84A.

TECLADO.ASM

Conjunto de rutinas para el manejo del teclado. No es un programa en s mismo. Para utilizarlo hay que colocar en el programa principal KEY_VAR EQU dir_inicio_del_bloque. Bloque de etiquetas
CBLOCK KEY_VAR TECLA KEY_1 KEY_2 KEY_DELAY_1 KEY_DELAY_2 ;Inicio de las variables ;Retorno del cdigo de tecla ;N.o de filas a explorar ;Temporal de cdigo ;Variable de temporizacin ;Variable de temporizacin

ENDC

PROYECTOS CON EL PIC16F84A

95

Figura F.26. Fotografa del montaje del teclado y su conexionado sobre la tarjeta de prototipos PIC18-ME.

Rutina KEY_SCAN: Rutina de exploracin del teclado. La variable Tecla retorna con el cdigo de la tecla pulsada o el cdigo 0x80 si no se pulsa ninguna.
KEY_SCAN bsf movlw movwf bsf bcf movlw movwf movlw movwf KEY_SCAN_1 movf movwf nop movf movwf subwf btfss STATUS,RP0 ;Selecciona pgina 1 b00001111 PORTB ;RB7-RB4 salidas, RB3-RB0 entradas OPTION_REG,NOT_RBPU ;Activa cargas pull-up STATUS,RP0 ;Selecciona pgina 0 4 KEY_1 ;N.o de columnas a explorar b01111111 TECLA ;Columna a activar TECLA,W PORTB ;Activa fila PORTB,W KEY_2 TECLA,W STATUS,Z

;Lee las columnas ;Hay alguna pulsada?

96

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

goto bsf rrf decfsz goto movlw goto

KEY_SCAN_2 STATUS,C TECLA,F KEY_1,F KEY_SCAN_1 0x80 VOLVER

;Si hay alguna pulsada ;No hay ninguna en esa fila ;Selecciona siguiente fila ;Salta si se han terminado las filas ;Retorna cdigo 0x80 (no hay ;pulsacin) ;Bucle de temporizacin de unos 20 ms ;para evitar el rebote de los ;pulsadores

KEY_SCAN_2 movlw .100 movwf KEY_DELAY_1 KEY_SCAN_3 clrf KEY_DELAY_2 clrwdt KEY_SCAN_4 decfsz goto decfsz goto movf movwf nop movf subwf btfss goto movf VOLVER KEY_DELAY_2,F KEY_SCAN_4 KEY_DELAY_1,F KEY_SCAN_3 TECLA,W PORTB PORTB,W KEY_2,W STATUS,Z KEY_SCAN_1 KEY_2,W

;Tras la temporizacin se lee ;nuevamente ;si la tecla es la misma. As se ;evitan los rebotes ;Es la misma? ;No, seguir con la exploracin ;S, guardar en variable de salida ;TECLA el valor recogido ;Fin de exploracin

movwf TECLA return

Rutina KEY_HEX: Convierte el cdigo de tecla que haya en la variable Tecla a hex. (0-F). El resultado se devuelve en la variable Tecla. Usa como rutina auxiliar Key_Tabla.
KEY_TABLA movf addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw KEY_1,W PCL,F 0x7D 0xEE 0xED 0xEB 0xDE 0xDD 0xDB 0xBE 0xBD 0xBB 0x7E 0x7B 0x77 0xB7 0xD7 0xE7 ;Calcula desplazamiento ;0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9 ;A ;B ;C ;D ;E ;F

PROYECTOS CON EL PIC16F84A

97

KEY_HEX

movf TECLA,W movwf KEY_2 clrf KEY_1 KEY_TABLA KEY_2,W STATUS,Z KEY_HEX_1 KEY_1,F KEY_HEX_2

;Almacena el cdigo temporalmente ;Contador HEX a 0 ;Busca cdigo en la tabla ;Compara con el de la tecla ;Coincide ? ;S ;No, incrementa contador HEX

KEY_HEX_2 call subwf btfsc goto incf goto

KEY_HEX_1 movf KEY_1,W movwf TECLA return

;Carga contador HEX en la variable de salida

Rutina HEX_7SEG: Rutina de conversin de HEX (0-F) a siete segmentos. El acuculador W contiene, durante la llamada, el cdigo HEX y, al retornar, el correspondiente a siete segmentos.
HEX_7SEG andlw addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw b00001111 PCL,F b00111111 b00000110 b01011011 b01001111 b01100110 b01101101 b01111101 b00000111 b01111111 b01100111 b01110111 b01111100 b00111001 b01011110 b01111001 b01110001 ;Desplazamiento sobre la tabla ;0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9 ;A ;B ;C ;D ;E ;F

Una vez vistas las rutinas que se usan con el teclado y su funcionamiento bsico se pasa a realizar el primero de los proyectos con teclado.

Enunciado y objetivos
Utilizando las libreras TECLADO.ASM y P16CXX.INC, se trata de realizar un programa que genere un pitido por el zumbador piezoelctrico conectado a RA3 cuya duracin depender del valor de la tecla pulsada. La tecla 0 producir un pitido de una duracin determinada, dicha duracin se ir incrementando con el valor de cada tecla hasta llegar a la F, cuyo pitido ser el de duracin mayor.

98

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Materiales especficos para el proyecto tpico 1


1.o Teclado matricial de diecisis teclas hexadecimales (0-F). 2.o Cuatro resistencias de 2 K2W y 1/4 W. 3.o Zumbador miniatura C.I. P=7,5.

Esquema elctrico

Figura F.27. Esquema de conexionado.

El programa comentado
PROYECTO TPICO 1: TECLADO MUSICAL

Se desea realizar un programa que genere un pitido por el zumbador piezoelctrico conectado a RA3 cuya duracin dependa del valor de la tecla pulsada, siendo la 0 la tecla de pitido ms corto y la F la de pitido ms largo. Directivas del programa
LIST RADIX P=16F84A HEX ;Se emplea el PIC16F84A ;Sistema de numeracin hexadecimal

PROYECTOS CON EL PIC16F84A

99

Foto del montaje

Figura F.28. Fotografa del montaje sobre la placa PIC18-ME.

Etiquetas del programa


INCLUDE TEMP_1 TEMP_2 DELAY_1 DELAY_2 DELAY_3 KEY_VAR 16CXX.INC EQU0x0C EQU0x0D EQU0x0E EQU0x0F EQU0x10 EQU0x11 ;Etiquetas genricas para los PIC16CXX

Programa principal
ORG goto ORG 0 INICIO 5 ;El programa comienza en la direccin 0 y ;salta a la direccin 5 para sobrepasar el ;vector de interrupcin ;Coloca las rutinas tras el vector de ;interrupcin ;Seleccin del banco 1 ;Se configura la puerta A como salida ;Se desactiva el zumbador

INCLUDE TECLADO.ASM INICIO bsf clrf bcf bsf STATUS,RP0 PORTA STATUS,RP0 PORTA,3

100

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Organigrama

Figura F.29. Organigrama del proyecto.

PROYECTOS CON EL PIC16F84A

101

NO_HAY call movlw subwf btfsc goto call call movf addlw bcf call bsf goto

KEY_SCAN 0x80 TECLA,W STATUS,Z NO_HAY KEY_OFF KEY_HEX TECLA,W 0x01 PORTA,3 DELAY_V PORTA,3 NO_HAY

;Se hace un chequeo del teclado ;Sobre TECLA quedar la tecla pulsada o 0x80 ;No se ha pulsado ninguna tecla ;S se ha pulsado. Se espera a que se suelte ;Se pasa el valor a hexadecimal ;Ese valor servir para determinar la ;duracin del beep ;Se suma 1 para que el 0 no sea el de mayor ;temporizacin ;Se activa el zumbador (por nivel bajo) ;Se desactiva el zumbador ;Se vuelve a empezar

Rutina KEY_OFF: Esta rutina espera que la tecla recin pulsada sea soltada. Debe usarse justo despus de llamar a la rutina KEY_SCAN.
KEY_OFF movf movwf TECLA,W TEMP_1 KEY_SCAN 0x80 TECLA,W STATUS,Z KEY_OFF_NO TEMP_1,W TECLA ;Guarda temporalmente la tecla ;Mira si se ha soltado

KEY_OFF_NO call movlw subwf btfss goto movf movwf return

;Bucle mientras no se suelte ;Ya se ha soltado ;Se repone la tecla

Rutina de DELAY variable: Esta rutina realiza una temporizacin que depende del valor del acumulador en el momento en que se le llama.
DELAY_V movwf clrf clrf decfsz goto decfsz goto decfsz goto return END DELAY_1 DELAY_3 DELAY_2 DELAY_3,F DELAY_LOOP DELAY_2,F DELAY_LOOP DELAY_1,F DELAY_LOOP

DELAY_LOOP

102

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Propuesta de un nuevo proyecto


Se propone una modificacin sobre el programa anterior. Esta vez la pulsacin de la tecla 0 debe generar el pitido ms largo y la de la tecla F el ms corto. Se recomienda introducir una rutina de conversin y su llamada correspondiente como nico cambio en el programa.

PROYECTO TPICO 2: MENSAJE DE BIENVENIDA SOBRE LCD Introduccin: instalacin y manejo del LCD
La pantalla de cristal lquido, LCD, es un perifrico de salida visualizador muy potente, flexible, eficaz y econmico, siendo los microcontroladores los dispositivos ms adecuados para optimizar sus prestaciones y control. En realidad, el mdulo LCD tiene incrustado un microcontrolador especfico para regular su funcionamiento. Las pantallas LCD ms comunes presentan un nmero variable de caracteres formados por una matriz de 5 7 pxeles en una o varias lneas. Nos referiremos al mdulo LCD con microcontrolador incrustado, modelo 44780 de Hitachi, que tiene la posibilidad de visualizar dos lneas de diecisis caracteres cada una. Dispone de catorce terminales de conexionado, cuya misin es la siguiente: 1.o Ocho terminales (D0-D7) reciben los caracteres ASCII a representar, as como ciertos cdigos de control que regulan los efectos de visualizacin. Tambin por ellos el mdulo LCD enva informacin sobre su estado interno. 2.o Por los terminales VDD y Vss se aplica la alimentacin de +5 V y tierra, respectivamente. 3.o El terminal Vo regula el contraste de la pantalla de cristal lquido al aplicarle, mediante un potencimetro, una tensin variable comprendida entre 0 y +5 V. 4.o Los tres terminales restantes controlan las funciones principales del mdulo: Seal de activacin. Si E = 0, el mdulo est desactivado y no funcionan las restantes seales. R/W#: Lectura/Escritura. Si R/W# = 0, se escribe el mdulo, y si R/W# = 1, es ledo. RS: Seleccin de registro de control (0) o de datos (1). Por D0-D7 se transfiere informacin de control-comandos o datos de caracteres a escribir. E: Para controlar un mdulo LCD con un PIC16F84A se recomienda conectar las lneas de la puerta B (RB7-RB0) a las lneas D7:D0. Las lneas de la puerta B deben ser bidireccionales y debern configurarse como entrada o salida segn el sentido de la informacin. Las tres lneas de menos peso de la puerta A (RA0, RA1 y RA2) se configuran como salidas y se conectan a las lneas RS, R/W# y E, respectivamente (Figura F.30). El mdulo LCD responde a una serie de comandos con los que se pueden gobernar sus distintas opciones de trabajo y que puede enviarle el PIC por las lneas D7-D0 cuando RS = 0 y R/W# = 0 para trabajar en modo escritura. En la Figura F.31 se muestra una tabla con los comandos y los cdigos correspondientes.

PROYECTOS CON EL PIC16F84A

103

Figura F.30. Conexionado del mdulo LCD a las lneas de E/S del PIC16F84A. Debido al escaso efecto del potencimetro de contraste, en la prctica no se tiene en cuenta. COMANDO RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Tiempo ejecucin

CLEAR DISPLAY HOME ENTRY MODE SET DISPLAY ON/OFF CURSOR DISPLAY SHIFT FUNCTION SET SET CGRAM ADDRESS SET DDRAM ADDRESS READ BUSY FLAG $ ADDRESS WRITE DATA TO CG O DD READ DATA TO CG O DD

0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0

1 1 1 1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 1 BF

0 0 0 0 0 0 1

0 0 0 0 0 1

0 0 0 0 1 DL

0 0 0 1 S/C N

0 0 1 D R/L F

0 1 I/D C X X

1 X S B X X

1,64 ms 1,64 ms 40 ms 40 ms 40 ms 40 ms 40 ms 40 ms 40 ms 40 ms 40 ms

DIRECCIN DE LA CGRAM DIRECCIN DE LA DDRAM

DIRECCIN DE LA CGRAM O DDRAM CDIGO ASCII PARA LA RAM CDIGO ALMACENADO EN RAM

Figura F.31. Cdigos de los comandos a los que responde el mdulo LCD.

104

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

En la tabla de la Figura F.31 existen diversos bits representados por una abreviatura que, segn su valor, seleccionan una opcin de trabajo: S: Si vale 1, desplaza la visualizacin cada vez que se escribe un dato; si vale 0, funciona en modo normal. I/D: Si vale 1, se incrementa la direccin del cursor; si vale 0, se decrementa. S/C: Si vale 1, desplaza la visualizacin; si vale 0, se desplaza el cursor. R/L: Si vale 1, el desplazamiento es a la derecha; si vale 0, a la izquierda. BF: Si vale 1, el mdulo LCD est ocupado; si vale 0, est disponible. DL: Si vale 1, se trabaja con bus de datos de 8 bits; si vale 0, con bus de 4 bits. N: Si vale 1, la presentacin se hace en dos lneas; si vale 0, en una. F: Si vale 1, el carcter es de 5 10 pxeles; si vale 0, de 5 7. B: Si vale 1, hay parpadeo del cursor (si est en ON). C: Si vale 1, el cursor est activo (ON). D: Si vale 1, la pantalla est activada. X: Indeterminado.

Se describe brevemente la actuacin de los comandos que controlan al mdulo LCD: CLEAR DISPLAY: Borra la pantalla del mdulo LCD y coloca al cursor en la primera posicin, que es la direccin 0. Por defecto, pone el bit I/D = 1 para autoincremento de la posicin del cursor. HOME: Pone el cursor en la direccin 0. No vara el contenido de la memoria DDRAM que guarda los datos y que queda direccionada desde la posicin 0. ENTRY MODE SET: Establece la direccin del movimiento del cursor (I/D); Si pone a 1 el bit S, desplaza la visualizacin cada vez que se escribe un dato; si S = 0, la presentacin es la normal. DISPLAY ON/OFF CONTROL: Activa o desactiva al display (D) y al cursor (C) y determina si ste parpadea o no. CURSOR DISPLAY SHIFT: Mueve el cursor y desplaza la visualizacin sin cambiar el contenido de la memoria DDRAM. FUNCTION SET: Establece el nmero de lneas de la interfaz con el bus de datos, siendo habitual que sea de 8 bits, con lo que DL = 1. Especifica el nmero de lneas de caracteres, que para que sean dos se debe poner N = 1, y el formato del carcter, que es de 5 7 pxeles, si F = 0. SET CGRAM ADDRESS: El mdulo LCD tiene definidos los caracteres ASCII, pero, adems, permite que el usuario pueda definir un mximo de nueve caracteres nuevos. stos se guardan en la memoria CGRAM de 64 bytes. Cada carcter est especificado con un nmero de bytes comprendido entre 6 y 16, segn su complejidad. Dichos bytes se almacenan en las sucesivas posiciones de la CGRAM. Con este comando se indica la direccin de la CGRAM a partir de la cual se irn almacenando los bytes que definen al nuevo carcter. Tras ejecutar este comando, todos los datos que se lean o escriban posteriormente lo hacen desde esa posicin de la CGRAM. SET DDRAM ADDRESS: Establece la direccin de la DDRAM a partir de la cual todos los datos que se lean o escriban posteriormente lo harn desde esa posicin. Los diecisis caracteres del primer rengln ocupan las direcciones 90h-8Fh y los del segundo desde la C0h a la CFh.

PROYECTOS CON EL PIC16F84A

105

READ BUSY FLAG ADDRESS: Se trata de un comando para la lectura del flag BUSY que indica si todava se est ejecutando un comando previo en el mdulo LCD. Adems, proporciona la direccin de la CGRAM o DDRAM que se haya utilizado la ltima vez. WRITE DATA TO CGRAM o DDRAM: Se escriben en la DDRAM los datos (caracteres ASCII) que se quieren visualizar. Tambin se escriben en la CGRAM los bytes de los nuevos caracteres creados por el usuario. Se usa una memoria u otra segn haya sido la instruccin de direccionamiento previa que har que se refiera a la CGRAM o a la DDRAM. READ DATA TO CGRAM o DDRAM: Igual que el comando anterior, pero en esta ocasin en una operacin de lectura. En la Figura F.32 se ofrece el juego de caracteres que admite el mdulo LCD. Las posiciones marcadas con CGRAM(n) estn destinadas a contener los nuevos caracteres grficos definibles por el usuario.

Figura F.32. Juego de caracteres ASCII que admite el mdulo LCD y ocho posiciones marcadas con CGRAM(n) para que el usuario defina nuevos caracteres.

106

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Cuando se aplica adecuadamente la tensin de alimentacin al mdulo LCD, se ejecuta automticamente la siguiente secuencia de inicializacin: 1.a Se ejecuta el comando CLEAR DISPLAY borrando la pantalla. El flag BUSY se mantiene activado 15 ms hasta que se completa esta secuencia. 2.a Se ejecuta el comando FUNCTION SET, que establece la interfaz con el bus de datos a 8 bits normalmente (DL = 1), y el nmero de lneas (bit N). 3. a Se ejecuta el comando DISPLAY ON/OFF CONTROL, que hace que el display quede en OFF (D = 0), tambin el cursor (C = 0) y sin parpadeo (B = 0). 4.a Se ejecuta el comando ENTRY MODE SET, que establece la direccin de movimiento del cursor con autoincremento (I/D = 1) y el modo de visualizacin normal sin desplazamiento (S = 0). Si la conexin de la alimentacin no rene todas las condiciones que exige el mdulo LCD, habra que realizar la secuencia de inicializacin por software. En cualquier caso, es importante enviar al LCD la primera instruccin de trabajo despus de que hayan transcurrido 15 ms para completar dicha secuencia de inicializacin.

LCDCXX.ASM

El conjunto de rutinas que se presentan a continuacin permiten realizar las tareas bsicas de control del mdulo de visualizacin LCD. Se emplean con los PIC 16cxx. En el programa principal se deber reservar memoria para el bloque de variables que utiliza el LCD del modo: LCD_VAR EQU dir_inicio_del_bloque Bloque de etiquetas
#define #define #define #define #define #define ENABLE DISABLE LEER ESCRIBIR OFF_COMANDO ON_COMANDO bsf bcf bsf bcf bcf bsf PORTA,2 PORTA,2 PORTA,1 PORTA,1 PORTA,0 PORTA,0 ;Activa E ;Desactiva ;Pone LCD en Modo RD ;Pone LCD en Modo WR ;Desactiva RS (modo comando) ;Activa RS (modo datos) ;Inicio de las variables. Ser la ;primera direccin libre ;disponible

CBLOCK LCD_VAR LCD_TEMP_2 LCD_TEMP_1 ENDC

Rutina UP_LCD: Con esta rutina se configura el PIC para que trabaje con el LCD.
UP_LCD bsf clrf clrf STATUS,RP0 PORTB PORTA ;Banco 1 ;RB <0-7> salidas digitales ;RA <0-4> salidas digitales

PROYECTOS CON EL PIC16F84A

107

bcf STATUS,RP0 OFF_COMANDO DISABLE return

;Banco 0 ;RS=0 ;E=0

Rutina LCD_BUSY: Con esta rutina se chequea el estado del flag BUSY del mdulo LCD, que indica, cuando est activado, que el mdulo an no ha terminado el comando anterior. La rutina espera a que se complete cualquier comando anterior antes de retornar al programa principal para poder enviar un nuevo comando.
LCD_BUSY LEER bsf movlw movwf bcf ENABLE nop L_BUSY btfsc goto DISABLE bsf clrf bcf ESCRIBIR return ;Pone el LCD en Modo RD STATUS,RP0 HFF PORTB STATUS,RP0 ;Puerta B como entrada ;Selecciona el banco 0 ;Activa el LCD ;Chequea bit de BUSY ;Desactiva LCD STATUS,RP0 PORTB STATUS,RP0 ;Puerta B salida ;Pone LCD en modo WR

PORTB,7 L_BUSY

Rutina LCD_E: Se trata de una pequea rutina que se encarga de generar un impulso de 1s (para una frecuencia de funcionamiento de 4 MHz) por la patita de salida de la puerta A RA2, que se halla conectada a la seal E (enable) del mdulo LCD. Con esta rutina se pretende activar al mdulo LCD.
LCD_E ENABLE nop DISABLE return ;Activa E ;Desactiva E

Rutina LCD_DATO: Es una rutina que pasa el contenido cargado en el registro W, el cual contiene un carcter ASCII, a la puerta B, para visualizarlo por el LCD o escribirlo en la CGRAM.
LCD_DATO OFF_COMANDO movwf PORTB B call LCD_BUSY ON_COMANDO call LCD_E return ;Desactiva RS (modo comando) ;Valor ASCII a sacar por puerta ;Espera a que se libere el LCD ;Activa RS (modo dato) ;Genera pulso de E

108

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Rutina LCD_REG: Rutina parecida a la anterior, pero el contenido de W ahora es el cdigo de un comando para el LCD, que es necesario pasar tambin a la puerta B para su ejecucin.
LCD_REG OFF_COMANDO movwf PORTB call LCD_BUSY call LCD_E return ;Desactiva RS (modo comando) ;Cdigo de comando ;LCD libre? ;S. Genera pulso de E

Rutina LCD_INI: Esta rutina se encarga de realizar la secuencia de inicializacin del mdulo LCD de acuerdo con los tiempos dados por el fabricante (15 ms). Se especifican los valores de DL, N y F, as como la configuracin de una interfaz de ocho lneas con el bus de datos del PIC y dos lneas de diecisis caracteres de 5 7 pxeles.
LCD_INI movlw call call movlw call call movlw call call return b00111000 LCD_REG LCD_DELAY b00111000 LCD_REG LCD_DELAY b00111000 LCD_REG LCD_DELAY ;Cdigo de instruccin ;Temporiza ;Cdigo de instruccin ;Temporiza ;Cdigo de instruccin ;Temporiza

Rutina BORRA_Y_HOME: Borra el display y retorna el cursor a la posicin 0.


BORRA_Y_HOME movlw call return b00000001 LCD_REG ;Borra LCD y HOME

Rutina DISPLAY_ON_CUR_OFF: Control del display y cursor. Activa el display y desactiva el cursor.
DISPLAY_ON_CUR_OFF movlw b00001100 call LCD_REG return ;LCD on, cursor off

Rutina LCD_DELAY: Se trata de un rutina que implementa un retardo o temporizacin de 5 ms. Utiliza dos variables, llamadas LCD_TEMP_1 y LCD_TEMP_2, que se van decrementando hasta alcanzar dicho tiempo.
LCD_DELAY clrwdt movlw movwf clrf 10 LCD_TEMP_1 LCD_TEMP_2

PROYECTOS CON EL PIC16F84A

109

LCD_DELAY_1

decfsz goto decfsz goto return

LCD_TEMP_2,F LCD_DELAY_1 LCD_TEMP_1,F LCD_DELAY_1

Enunciado y objetivos
Con ayuda de las libreras LCD_CXX.ASM y P16CXX.INC realizar un programa en el que aparezca un mensaje de bienvenida sobre el LCD.

Materiales especficos para el proyecto tpico 2 1.o Pantalla LCD Organigrama

Figura F.33. Organigrama del proyecto.

El programa comentado
PROYECTO TPICO 2: MENSAJE DE BIENVENIDA SOBRE LCD

Programa que muestra la palabra HOLA en la lnea 1 del LCD. Directivas del programa
LIST RADIX p=16F84A HEX ;Se emplea el PIC16F84A ;Sistema de numeracin hexadecimal

110

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Esquema elctrico

Figura F.34. Esquema de conexionado.

Esquema del montaje

Figura F.35. Fotografa del montaje sobre la placa PIC18-ME.

PROYECTOS CON EL PIC16F84A

111

Etiquetas del programa


INCLUDE RESUL TEMPO1 OFFSET OPCION LCD_VAR PIC16CXX.INC ;Etiquetas genricas para los PIC16CXX EQU EQU EQU EQU EQU 0x0C 0x0D 0x0E 0x81^80H 0x0F

Programa principal
ORG goto ORG 0 INICIO 5 ;El programa comienza en la direccin 0 y ;salta a la direccin 5 para sobrepasar ;el vector de interrupcin

INCLUDE LCD_CXX.ASM INICIO call bsf movlw movwf bcf call UP_LCD STATUS,RP0 b10000111 OPCION STATUS,RP0 LCD_INI ;Configura el PIC para el uso del LCD ;Seleccin del banco 1 ;Asigna preescaler al TMR0 ;Inicializa el LCD

INICIO_1 call call movlw call movlw call clrf call BUCLE goto

BORRA_Y_HOME DISPLAY_ON_CUR_OFF 0x80 ;Primera posicin de primera fila LCD_REG b00000110 ;Entry Mode Set. Inc de cursor LCD_REG OFFSET ;Direccin del mensaje MENS BUCLE ;El programa acaba en un bucle infinit

Rutina MENS: Esta rutina saca mensajes por la pantalla LCD, siendo el primer carcter aquel que est en la posicin apuntada por OFFSET y debiendo ser el ltimo 0x00.
MENS MENS_1 clrf movf addwf call iorlw btfsc return call incf movlw movwf goto RESUL OFFSET,W RESUL,W DATOS 0 STATUS,2 LCD_DATO RESUL,F d10 TEMPO1 MENS_1 ;Inicializa contador de caracteres ;Coge el desplazamiento ;Calcula el carcter a coger ;Coge el carcter ;Actualiza flags ;Comprueba si es el ltimo ;Si es el ltimo, vuelve ;Visualiza el carcter ;Incrementa contador de caracteres

112

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Tabla con los datos a sacar por el LCD


DATOS addwf retlw retlw retlw retlw retlw END PCL,1 H O L A 0x00 ;OFFSET = 0x00

Propuesta de un nuevo proyecto


En el programa anterior se ha probado una forma tpica de sacar mensajes, pero esto depende del cdigo que se enve a LCD_REG, segn las variantes de la tabla de la Figura F.31. Ahora se trata de probar otras combinaciones y meterlas como rutinas independientes (MENSAJE_PARPADEO, MENSAJE_PRIMERA_FILA...) en el fichero LCD_CXX.ASM. Se puede intentar, adems, crear caracteres nuevos y almacenarlos en la CGRAM para mostrarlo con una nueva rutina MOSTRAR_CGRAM.

PROYECTO TPICO 3: ESCRITURA DE MENSAJES DE TECLADO SOBRE LCD Enunciado y objetivos


Mediante las libreras TECLADO.ASM, LCD_CXX.ASM y P16CXX.INC, realizar un programa que visualice sobre el LCD las teclas que se vayan pulsando. Cada pulsacin ir acompaada de un beep de 0,25 segundos sobre el zumbador piezoelctrico conectado a RA3.

Materiales especficos para el proyecto tpico 3


1.o 2.o 3.o 4.o Teclado de diecisis teclas hexadecimales (0-F). Cuatro resistencias de 2 K2W y 1/4 W. Zumbador miniatura C.I. P = 7,5. Pantalla LCD.

PROYECTOS CON EL PIC16F84A

113

Foto del montaje

Figura F.36. Fotografa del montaje sobre la placa PIC18-ME.

El programa comentado
PROYECTO TPICO 3: ESCRITURA DE MENSAJES DE TECLADO SOBRE LCD

Se desea realizar un programa que visualice sobre el LCD las teclas que se vayan pulsando. Cada pulsacin ir acompaada de un beep de 0,25 segundos sobre el zumbador piezoelctrico conectado a RA3. Directivas del programa
LIST RADIX P=16F84A HEX ;Se emplea el PIC16F84A ;Sistema de numeracin hexadecimal

Etiquetas del programa


INCLUDE TEMP_1 PIC16CXX.INC EQU 0x0C

114

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Esquema elctrico

Figura F.37. Esquema de conexionado del teclado, LCD y zumbador.

PROYECTOS CON EL PIC16F84A

115

Organigrama

Figura F.38. Organigrama del proyecto.

116

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

DELAY_1 DELAY_2 DELAY_3 LCD_VAR KEY_VAR

EQU EQU EQU EQU EQU

0x0D 0x0E 0x0F 0x10 0x12

Posicionamiento de la rutina de INICIO


ORG goto ORG 0 INICIO 5 ;El programa comienza en la direccin 0 y ;salta a la direccin 5 para sobrepasar el ;vector de interrupcin

Rutina HEX_ASCII: Rutina que pasa el valor hexadecimal que contiene W a valor ASCII para ser mostrado por el LCD.
HEX_ASCII addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw PCL,1 0 1 2 3 4 5 6 7 8 9 A B C D E F

Programa principal
INCLUDE LCD_CXX.ASM INCLUDE TECLADO.ASM INICIO call call call bsf clrf movlw movwf bcf bsf UP_LCD LCD_INI DISPLAY_ON_CUR_OFF STATUS,RP0 ;Seleccin del banco 1 PORTA ;Puerta A como salida b10000111 OPTION_REG STATUS,RP0 PORTA,3 ;Desactivacin del zumbador ;Se hace un chequeo del teclado ;Sobre TECLA quedar la tecla pulsada o 0x80

NO_HAY call KEY_SCAN movlw 0x80 subwf TECLA,W

PROYECTOS CON EL PIC16F84A

117

btfsc goto call bcf movlw movwf call bsf call call movwf call call call movlw call movf call goto

STATUS,Z NO_HAY ;No se ha pulsado ninguna tecla KEY_OFF ;S se ha pulsado. Se espera a que se suelte PORTA,3 ;Se genera un beep d25 TEMP_1 DELAY10 ;Se crea una temporizacin de 25 ms PORTA,3 ;Se desactiva zumbador KEY_HEX ;Se pasa a valor hexadecimal HEX_ASCII ;Se pasa el valor hexadecimal a cdigo ASCII TECLA ;Se guarda temporalmente en TECLA UP_LCD BORRA_Y_HOME DISPLAY_ON_CUR_OFF 0x81 ;Primer carcter de primera lnea LCD_REG TECLA,W LCD_DATO ;Se saca por el LCD NO_HAY ;Se vuelve a empezar

Rutina de DELAY de 10 ms: Esta rutina utiliza el TMR0. Es una temporizacin de 10 ms que se repite tantas veces como indique la variable TEMPO1.
DELAY10 bcf movlw movwf btfss goto decfsz goto return INTCON,2 0xD8 TMR0 INTCON,2 DELAY10_1 TEMP_1,F DELAY10 ;Borra flag del TMR0 ;Carga el TMR0 con valor 9 ;Espera rebosamiento del R0

DELAY10_1

Rutina de DELAY de un segundo: Se basa en la rutina de 10 ms repitindola 100 veces.


DELAY1S movlw movwf call return 0x64 TEMP_1 DELAY10

Rutina KEY_OFF: Esta rutina espera que la tecla recin pulsada sea soltada. Debe usarse justo despus de llamar a la rutina KEY_SCAN.
KEY_OFF KEY_OFF_NO movf movwf call movlw subwf btfss TECLA,W TEMP_1 KEY_SCAN 0x80 TECLA,W STATUS,Z ;Guarda temporalmente la tecla ;Mira si se ha soltado

118

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

goto movf movwf return

KEY_OFF_NO ;Bucle mientras no se suelte TEMP_1,W ;Ya se ha soltado TECLA ;Se repone la tecla

Rutina de DELAY variable: Esta rutina realiza una temporizacin que depende del valor del acumulador en el momento en que se le llama.
DELAY_V DELAY_LOOP movwf clrf clrf decfsz goto decfsz goto decfsz goto return END DELAY_1 DELAY_3 DELAY_2 DELAY_3,F DELAY_LOOP DELAY_2,F DELAY_LOOP DELAY_1,F DELAY_LOOP

Propuesta de un nuevo proyecto


En el programa anterior, cuando se mostraba una tecla en el LCD, se haca siempre en la misma posicin, esto es, una tecla se sobrescriba encima de otra. Se trata de modificar ahora el programa para que las teclas vayan saliendo seguidas (como en una calculadora). Cuidado, porque la lnea no es infinita y llegar un momento en que habr que borrarla o pasar a la de abajo.

TERCERA PARTE: COLECCIN DE PROYECTOS PROPUESTOS OBJETIVOS


Se presenta en este tema una coleccin de proyectos que se pueden programar en el PIC16F84A y comprobar con el sistema de desarrollo PIC School. Una vez que se asegure su buen funcionamiento se recomienda montarlos en la tarjeta de prototipos con la ayuda de la protoboard y de los materiales ya usados en los proyectos bsicos y tpicos anteriores. Estos proyectos son de diferente estilo y complejidad y su finalidad es la de conseguir que se alcance una experiencia profesional en el diseo de proyectos basados en microcontroladores. El lector puede, a su vez, plantearse sus propios proyectos y llevarlos, por qu no, a la prctica en un entorno real.

PROYECTOS CON EL PIC16F84A

119

EJERCICIO COMBINACIONAL DE MANEJO DE E/S DIGITALES


Montar el hardware necesario y confeccionar el programa correspondiente para controlar dos diodos led, L0 y L1, desde el interruptor I0, de forma que L0 refleja el nivel lgico que introduce I0 y L1 dicho estado invertido (Fig. F.39).

Figura F.39. Esquema simplificado de los perifricos.

OTRO EJERCICIO COMBINACIONAL


Mediante dos interruptores, I0 e I1, controlar el estado de ocho diodos led, de los que dispone una barra DIL, segn la siguiente tabla de verdad y esquema de conexionado.
l1 0 0 1 1 l2 0 1 0 1 L7 1 0 0 1 L6 0 1 0 1 L5 1 0 0 1 L4 0 1 0 1 L3 0 0 1 0 L2 0 1 1 0 L1 1 0 1 0 L0 0 1 1 0

Figura F.40. Tabla de verdad.

120

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

CONTROL DE UN TORNO
La secuencia de funcionamiento del torno se inicia cuando se pulsa I, que activa el cilindro V, el cual, en su avance, empuja la pieza a tornear hasta que acciona el sensor b, que pone en funcionamiento el motor M (Fig. F.42).

Figura F.41. Conexin de los perifricos.

Figura F.42. Boceto del proyecto.

PROYECTOS CON EL PIC16F84A

121

Figura F.43. Esquema de funcionamiento del torno y conexin de perifricos al PIC16F84A.

Figura F.44. Boceto del taladro.

122

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Figura F.45. Esquema de funcionamiento del taladro y conexin de perifricos al PIC.

En el avance se llega hasta el sensor c, que detiene el avance de V, e inicia su retroceso. Al volver a pasar el cilindro por b se desconecta M. Cuando se llega al final de carrera a, se produce una seal acstica en el zumbador A para avisar al operario de que coloque una nueva pieza, repitindose el ciclo.

AUTOMATISMO DE CONTROL DE UN TALADRO


Al accionar el pulsador I, el cabezal del taladro realiza un descenso rpido de aproximacin BR. Al llegar al sensor b, se activa el rel M, que hace girar la broca al mismo tiempo que se ejecuta un descenso lento BL durante el taladrado. Al activarse el sensor c, se considera el final del taladrado de la pieza y se inicia una subida rpida SR del cabezal, siguiendo activado M. Cuando se alcanza el sensor a, finaliza la subida rpida SR, se para M y se activa una seal acstica A para avisar al operario del final de la operacin.

PROYECTOS CON EL PIC16F84A

123

SISTEMA ANTIRREBOTES
Los perifricos de entrada de tipo electromecnico (interruptores, pulsadores, etc.) producen rebotes de efectos indeseables. Colocar en los lugares apropiados del programa que controla el taladro del ejercicio anterior unos retardos de 20 ms para eliminar dichos rebotes.

MANEJO DEL TMR0


Utilizando el temporizador TMR0 de que dispone el PIC16F84A, junto a su divisor de frecuencia, conseguir que el diodo led L7 se encienda y se apague con una intermitencia de 0,5 segundos. Se supone que el PIC que se inserta en la tarjeta de prototipos PIC18ME funciona a 4 MHz.

Figura F.46. Intermitencia de 0,5 segundos para L7.

CONTADOR ASCENDENTE/DESCENDENTE
Un display de siete segmentos visualiza el nmero de impulsos, de 0 a 9, que se introducen por medio del microrruptor I0. El contaje de los impulsos puede ser ascendente o descendente, segn el estado que introduce el microrruptor I1. Si I1 = 0, el contaje es ascendente; en caso contrario, es descendente. Colocar retardos antirrebotes en la exploracin de los interruptores.

124

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Figura F.47. Contador ascendente/descendente.

CONTROL DE LA PUERTA DE UN GARAJE


Se desea controlar automticamente la secuencia de apertura para la entrada y salida de vehculos en un garaje que tiene las siguientes caractersticas: 1.a En reposo, el semforo rojo SR est encendido. 2.a Al entrar un vehculo, se acciona la llave AP y se activa un rel MA, simulado mediante un led, que pone en marcha el motor de apertura de la puerta. Cuando se abre totalmente la puerta y se activa el sensor PA, se desactiva MA, se ilumina el semforo verde SV y se apaga el rojo SR. 3.a La situacin anterior se mantiene durante 5 segundos. 4.a Tras ese tiempo, se apaga el semforo verde y se enciende el rojo al mismo tiempo que se activa el rel MC, que pone en marcha el motor de cierre de la puerta hasta retornar a la situacin de reposo. 5.a Si en la fase de cierre hay algn vehculo en la entrada (sensor DP), se inicia una nueva secuencia de apertura (Fig. 48).

PROYECTOS CON EL PIC16F84A

125

Figura F.48. Boceto de la puerta de un garaje.

Figura F.49. Control de la puerta de un garaje.

126

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Figura F.50. Cuando se produce un impulso en I0, se genera un nmero binario aleatorio.

Figura F.51. Visualizacin del estado lgico de I0. Se debe conectar el segmento dp.

PROYECTOS CON EL PIC16F84A

127

GENERACIN DE UN NMERO ALEATORIO


En este ejercicio se propone generar un nmero binario de 8 bits de forma aleatoria (00FF). El nmero debe generarse al aplicar un impulso (cierre/apertura) con el interruptor I0 y quedar visualizado en los ocho diodos led conectados en la puerta B. La visualizacin se mantiene durante tres segundos y luego los led se apagan.

Figura F.52. Boceto del proyecto.

Figura F.53. Control de acceso de personal. I0 e I1 pueden ser sustituidos por pulsadores u optoacopladores.

128

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

PRESENTACIN DE ESTADOS LGICOS


Sobre el display de siete segmentos conectado en la puerta B, se visualiza el estado lgico del interruptor I0 mediante un 0 o un 1. El interruptor I1 enciende o no el punto decimal del display segn est cerrado o abierto.

CONTROL DE ACCESO
Se desea controlar la capacidad mxima de un local que no debe superar las doce personas. Para conocer la entrada y salida de las personas existen dos sensores, I0 e I1, colocados estratgicamente. Cuando hay personas en el local, la lmpara L est encendida y se apaga automticamente cuando no hay nadie. Si dentro del local hay menos de doce personas, se ilumina en el exterior un cartel PL que indica plazas libres. Si hay doce personas, se enciende el cartel C de completo. Si estando completo el local alguien intenta entrar, se activa una alarma acstica A.

CONTADOR DE HASTA MILES DE PIEZAS


Se dispone de un optoacoplador destinado a generar un impulso cada vez que pasa entre su detector y emisor una pieza. Las piezas o impulsos del optoacoplador los cuenta el TMR0, pero dividiendo dicho contaje entre un valor del divisor de frecuencia o preescaler interno. El valor entre el que divide el preescaler el nmero de impulsos depende del estado lgico que introduzcan los interruptores I0, I1 e I2, segn la siguiente tabla.
12 0 0 0 0 1 1 1 1 11 0 0 1 1 0 0 1 1 10 0 1 0 1 0 1 0 1 Factor divisin 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256

Figura F.54. Tabla de verdad que indica el factor de divisin del preescaler segn el valor de los interruptores.

El contaje de los impulsos dividido entre el factor establecido por los interruptores se visualiza en ocho diodos led. El contador se resetea cuando I3 = 1.

PROYECTOS CON EL PIC16F84A

129

Figura F.55. Visualizacin del contaje binario de impulsos del optoacoplador.

CONTROL DE ACCESO POR CLAVE


Se pretende realizar el control de acceso a un local mediante la validacin de una clave almacenada en la EEPROM de datos. Se utiliza un teclado para la introduccin de la clave y el LCD para visualizar los mensajes de introducir clave, acceso denegado o acceso permitido. Cuando el acceso sea denegado por no coincidir la clave introducida con la almacenada, se activar un zumbador durante dos segundos. Por el contrario, cuando el acceso sea permitido, se activar un rel que se supone conectado a la puerta de entrada.

130

MICROCONTROLADORES PIC. DISEO PRCTICO DE APLICACIONES

Figura F.56. Esquema de conexionado de un control de acceso por clave.

También podría gustarte