Professional Documents
Culture Documents
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
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.
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.
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.
64
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.
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.
65
Organigrama
66
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
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
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
68
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.
Esquema elctrico
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
70
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
71
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
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
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
73
74
75
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
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
77
Organigrama
;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
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
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
79
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
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.
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
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
Organigrama
83
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
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
85
Esquema elctrico
86
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
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.
87
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
88
;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
VOLVER1 return
89
VOLVER3 return
90
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
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.
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
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
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
96
;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
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
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
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
Esquema elctrico
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
99
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
Organigrama
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
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
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.
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 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
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.
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
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
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
107
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
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 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
109
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.
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
Esquema elctrico
111
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
113
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
114
Esquema elctrico
115
Organigrama
116
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
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 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
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
119
120
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).
121
122
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.
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.
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
125
126
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.
127
Figura F.53. Control de acceso de personal. I0 e I1 pueden ser sustituidos por pulsadores u optoacopladores.
128
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.
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.
129
130