You are on page 1of 28

Proyecto Control de acceso electrnico o cerradura electrnica

Bueno, me toco hacer un proyecto para un ramo en la u y eleg este porque igual es
entretenido, si alguien necesita hacerlo para la u o por amor al arte les detallo a
continuacin todo lo necesario para hacerlo realidad.
Software y materiales:
Dado que el control de este circuito es con un micro-controlador se necesita el
software para programar y compilar el programa para luego cargarlo al micro
Ac un link con el tutorial de instalacin para el software MicroCodeStudio, su
compilador y todo el cuento
AQUI
PARA QUEMAR O GRABAR EL PIC SE NECESITA UN GRABADOR DE ESTE
TIPO
AQUI
yo uso un clon del Pickit2 lo recomiendo es econmico , cualquiera que sea
compatible sirve he incluso andan dando vuelta los esquematicos para fabricarlo uno
mismo.
PROTEUS PARA LA SIMULACIN
AQUI

MATERIALES :
- MICROCONTROLADOR PIC16F877A puede ser otro de 40 o menos pines, puede
usted modificar el PCB segn sus necesidades.
- DISPLAY LCD 16x2
- TECLADO MATRICIAL 4x4 RECOMIENDO ESTOS MODELOS 1 y 2 , me gusta mas
la segunda opcion ya que es adhesivo y es mucho mas estetico que el primero,
respecto al funcionamiento, solo de deben activar las resistencias pull-up internas del
pic en la programacion, el primer modelo las tiene incluidas en el pcb.

- RELE ELECTROMECANICO 12V ( Rele modificable segn las necesidades, se


puede reemplazar por dispositivos electrnicos para cumplir la funcin de
conmutador.)
- CRISTRAL DE CUARZO 4MHZ
- CONDENSADORES 33 pF En cualquier casa de electronica, deben ser de este valor
o lo mas proximo 22pf para dar un valor comercial, si es otro mayor funcionara mas
lento el programa y tendra distorciones, segun lo que pude ver en las pruebas de
protoboard)
- RESISTENCIAS DE 560x5(R5,R5,R7,R1,R2),
4.7Kx1(R8),1Kx1(R9),180x1(R3) lo mismo de arriba respecto a la compra y
valores fueron los calculados por ley de ohm para las corrientes minimas de
funcionamiento, LED,PIC,LCD,TRANSISTOR etc.
- TRANSISTOR 2N3904 en google hay arta documentacion sobre este transistor de
baja potencia.
- DIODO RECTIFICADOR 1N4001 (PROTECCION) ultra comun lo venden en todos
lados.
- SOCKET 40 PINES Si se van a lanzar armando el pcb, ojo con las perforaciones que
queden lo mas alineadas posibles, porque las patitas de los socket son delgadas y
cagan rapido.
- DIODOS LED ALTO BRILLO 3,5mm ROJOx2(D1,(D3) VERDEx1(D2)
- TERMINAL BLOCKS: TRIPLEx1 DOBLESx2
- PULSADOR 2 PINES PARA RESET o similar
- PIN HEADER 40pines (PARA CONECTAR LCD J1 Y TECLADO J2 )
- PLACA FIBRA DE VIDRIO , IMPRECION DEL PICTOGRAMA EN PAPEL
FOTOGRAFICO GLOSSY CON TONER! PARA QUE QUEDE BIEN, PLANCHADO O
ALGUN PROCESO MAS PRO DE CALOR Y AL ACIDO, HAY ARTAS GUIAS DE
FABRICACION DE PCB EN LA NET.

Diseo 3D DE LA PLACA CON LA UBICACION DE CADA COMPONENTE

A continuacion dejo el programa completo en lenguaje basic y una descripcion del


proyecto y del programa realizada por mi :
************************************************** **************'* Name : CERRADURA
ELECTRONICA CON DISPLAY LCD *
'* Author : *
'* Notice : Copyright (c) 2013 All Rights Reserved *
'* Date : 31/05/2013 *
'* Version : 1.0 *
'* Notes : CONTROL DISPLAY LCD 16x2 CON BUS DE 4 BIT *
'* : TECLADO 4x4 MATRICIAL *
'************************************************* ***************

define osc 4 ; OSC_XT 4MHz


;CONFIG PORT_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
cmcon=7 ;PUERTO A COMO I/O DIGITAL
TRISA=0 ;PORTA SALIDA
TRISC=0 ;PORTC SALIDA
TRISB=0 ;PORTB SALIDA
TRISD=%11110000 ; RD0,RD1,RD2,RD3 = OUTPUT = FILAS
; RD4,RD5,RD6,RD7 = INPUT = COLUMNAS
;DEFINICION DE VARIABLES_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
B0 var byte
B1 var byte
LED_INDICADOR var PORTC.4
LED_OPEN VAR PORTC.5
LED_ERROR VAR PORTC.6

RELE var PORTC.3


NUMERO var byte ;TECLA PULSADA
R var byte ;REPETICIONES
;DEFINICION DE PUERTOS PARA TECLADO_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_
F1 VAR PORTD.0 ;OUTPUT = FILAS ;
F2 VAR PORTD.1 ;
F3 VAR PORTD.2 ;
F4 VAR PORTD.3
C1 VAR PORTD.4 ; INPUT = COLUMNAS
C2 VAR PORTD.5
C3 VAR PORTD.6
C4 VAR PORTD.7
;CONFIG DISPLAY LCD(4bit)(16x2)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE
DATOS
DEFINE LCD_DBIT 4 'DESDE EL BIT B.4 AL BIT B.7
DEFINE LCD_RSREG PORTB'UTILIZAR EL REGISTRO DE CONTROL/DATOS EN
PORTB
DEFINE LCD_RSBIT 1 'EN EL BIT B.1
DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B
DEFINE LCD_EBIT 2 'EN EL BIT B.2
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

;INICIO DE PROGRAMA
INIT ;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
High LED_INDICADOR ;ENCIENDE LED
pause 500

low LED_INDICADOR ;APAGA LED


pause 200
High LED_INDICADOR ;ENCIENDE LED
pause 200
low LED_INDICADOR ;APAGA LED
pause 200

LCDOUT $FE, 1 ; LIMPIAR VISOR


LCDOUT $FE, $82, "INICIANDO" 'ESCRIBIR EN LA PRIMER LNEA
LCDOUT $FE, $C2, "CERRADURA" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C 'APAGAR EL CURSOR
PAUSE 500

MSJ_CLAVE ;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pause 45
LCDOUT $FE, 1 ' LIMPIAR LCD
FOR B0 = 0 TO 12
LOOKUP B0,["INGRESA CLAVE"],B1
LCDOUT $FE,$0C,B1
PAUSE 45
NEXT
LCDOUT $FE, $C0 'COLOCAR EL CURSOR EN LA SEG LNEA
FOR B0 = 0 TO 9
LOOKUP B0,["4 DIGITOS:"],B1
LCDOUT $FE,$0C,B1
PAUSE 45
next
GOTO TECLAUNO ; IR A COMPARAR CLAVES_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
MSJ_VERIF ; _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

pause 200
LCDOUT $FE, 1 ' LIMPIAR LCD
LCDOUT $FE, $82, "VERIFICANDO" 'ESCRIBIR EN LA PRIMER LNEA
LCDOUT $FE, $C4, "CLAVE" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
pause 500
HIGh LED_OPEN
PAUSE 200
LCDOUT $FE, 1 ' LIMPIAR LCD
LCDOUT $FE, $82, "VERIFICANDO" 'ESCRIBIR EN LA PRIMER LNEA
LOW LED_OPEN
LCDOUT $FE, $C2, "..........." 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
PAUSE 500
GOTO MSJ_OPEN ;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
MSJ_ERROR
pause 200
LCDOUT $FE, 1 ' LIMPIAR LCD
LCDOUT $FE, $82, "VERIFICANDO" 'ESCRIBIR EN LA PRIMER LNEA
LCDOUT $FE, $C4, "CLAVE" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
pause 500
HIGh LED_OPEN
PAUSE 200
low LED_OPEN
LCDOUT $FE, 1 ' LIMPIAR LCD
LCDOUT $FE, $82, "VERIFICANDO" 'ESCRIBIR EN LA PRIMER LNEA
LCDOUT $FE, $C2, "..........." 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
PAUSE 1000
LCDOUT $FE, 1 ; LIMPIAR VISOR
LCDOUT $FE, $84, "CLAVE" 'ESCRIBIR EN LA PRIMER LNEA
LCDOUT $FE, $C2, "INCORRECTA!" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C 'APAGAR EL CURSOR
High LED_ERROR ;ENCIENDE LED

pause 500
low LED_ERROR ;APAGA LED
pause 200
High LED_ERROR ;ENCIENDE LED
pause 500
low LED_ERROR ;APAGA LED
PAUSE 1500
GOTO MSJ_CLAVE

BARRIDO: ;ESCANEO DE TECLADO_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

LOW F1 ;VERIFICAR FILA 1


IF C1 = 0 THEN NUMERO = 7 :RETURN ;TECLA RETORNA CARGADA CON 7
IF C2 = 0 THEN NUMERO = 8 :RETURN ;TECLA RETORNA CARGADA CON 8
IF C3 = 0 THEN NUMERO = 9 :RETURN ;TECLA RETORNA CARGADA CON 9
IF C4 = 0 THEN NUMERO = 10 :RETURN ;TECLA RETORNA CARGADA CON 10
HIGH F1
LOW F2
IF C1 = 0 THEN NUMERO = 4 :RETURN ;TECLA RETORNA CARGADA CON 4
IF C2 = 0 THEN NUMERO = 5 :RETURN ;TECLA RETORNA CARGADA CON 5
IF C3 = 0 THEN NUMERO = 6 :RETURN ;TECLA RETORNA CARGADA CON 6
IF C4 = 0 THEN NUMERO = 11 :RETURN ;TECLA RETORNA CARGADA CON 11
HIGH F2
LOW F3
IF C1 = 0 THEN NUMERO = 1 :RETURN ;TECLA RETORNA CARGADA CON 1
IF C2 = 0 THEN NUMERO = 2 :RETURN ;TECLA RETORNA CARGADA CON 2
IF C3 = 0 THEN NUMERO = 3 :RETURN ;TECLA RETORNA CARGADA CON 3
IF C4 = 0 THEN NUMERO = 12 : RETURN ;TECLA RETORNA CARGADA CON 13
HIGH F3
LOW F4
IF C2 = 0 THEN NUMERO = 0 :RETURN ;TECLA RETORNA CARGADA CON 0
high f4

pause 10
Goto BARRIDO
;_________programa anti rebotes de teclas___________
PTECLA:
HIGH LED_INDICADOR
PAUSE 200 ;DURACION 50MS
LOW LED_INDICADOR
ESPACIO: ;PROGRAMA DE ANTIRREBOTE DE TECLAS
IF C1 = 0 THEN ESPACIO
IF C2 = 0 THEN ESPACIO ;SI SIGUE PULSADA LA TECLA IR A ESPACIO
IF C3 = 0 THEN ESPACIO
PAUSE 45
RETURN ;RETORNA SI SE SUELTAN LAS TECLAS
;______________COMPARACION DE CLAVES_______________________

TECLAUNO:
GOSUB BARRIDO ; IR A BARRIDO Y RETORNAR CON UN VALOR
GOSUB PTECLA ; ENVIA A PROGRAMA ANTIREBOTES
LCDOUT $FE, $CA, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
IF NUMERO = 1 THEN TECLADOS ; SI EL NUMERO ES = A 1 IR A "TECLADOS"
GOTO FALSO ; SI NO ES IGUAL A 1 IR A LAZO FALSO
TECLADOS:
GOSUB BARRIDO
GOSUB PTECLA
LCDOUT $FE, $CB, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
IF NUMERO = 2 THEN TECLATRES ;SI EL NUMERO ES = A 2 IR A "TECLATRES"
LCDOUT $FE, $CB, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C

GOTO FALSO1
TECLATRES:
GOSUB BARRIDO
GOSUB PTECLA
LCDOUT $FE, $CC, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
IF NUMERO = 3 THEN TECLACUATRO ; SI EL NUMERO ES = A 3 IR A
"TECLACUATRO"
LCDOUT $FE, $CC, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
GOTO FALSO2
TECLACUATRO:
GOSUB BARRIDO
GOSUB PTECLA
LCDOUT $FE, $CD, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
IF NUMERO = 4 THEN OPENGE ;SI EL NUMERO ES IGUAL A 4 CONECTAR RELE
LCDOUT $FE, $CD, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
GOTO FALSO3
OPENGE: PAUSE 200
GOTO MSJ_VERIF
MSJ_OPEN
HIGH LED_OPEN
PAUSE 1000
high RELE
LCDOUT $FE, 1 ' LIMPIAR VISOR
LCDOUT $FE, $81, "PUERTA ABIERTA" 'ESCRIBIR EN LA PRIMER LNEA
PAUSE 4000
LOW LED_OPEN
LOW RELE
GOTO MSJ_CLAVE ; IR NUEVAMENTE A COMPARAR CLAVES
;_______________LAZO FALSO____________
FALSO:

GOSUB BARRIDO
GOSUB PTECLA ;ESTAS TECLAS NO COMPARAN NINGUNA CLAVE
LCDOUT $FE, $CB, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
FALSO1: ; SOLO ESPERA QUE TERMINE DE PULSAR LAS 4 TECLAS.

GOSUB BARRIDO
GOSUB PTECLA
LCDOUT $FE, $CC, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
FALSO2:

GOSUB BARRIDO
GOSUB PTECLA
LCDOUT $FE, $CD, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
FALSO3:

pause 200
GOTO MSJ_ERROR

end

Teoria y aplicacion
MICROCONTROLADOR PIC16F877A
El PIC16F877A es un micro controlador con memoria tipo flash, lo que permite una

gran facilidad en el desarrollo de prototipos ya que no requiere ser borrado con luz
ultravioleta como las versiones EPROM, si no que permite ser reprogramado
nuevamente sin ser borrado con anterioridad.
Dispositivo de la empresa MICROCHIP technology fabricado en tecnologa CMOS, su
consumo de potencia es muy bajo, El encapsulado ms comn para este micro
controlador es el DIP (Dual In-line Pin) de 40 pines, propio para usarlo en
experimentacin.
La referencia completa es:
PIC16F877-04 para el dispositivo que utiliza cristal oscilador de hasta 4 MHz
PIC16F877-20 para el dispositivo que utiliza cristal oscilador de hasta 20 MHz
PIC16F877A-I para el dispositivo tipo industrial que puede trabajar hasta a 20 MHz
DISTRIBUCIN DE PINES:

La mxima capacidad de corriente de cada uno de los pines de los puertos en modo
sumidero (sink) o en modo fuente (source) es de 25 mA.
La mxima capacidad de corriente total de los puertos es:
PUERTO A PUERTO B PUERTO C PUERTO D
Modo sumidero 150mA 200mA 200mA 200mA
Modo fuente 150mA 200mA 200mA 200mA
El consumo de corriente del micro controlador para su funcionamiento depende del
voltaje de operacin, la frecuencia y de las cargas que tengan sus pines.
Para un oscilador de 4 MHz el consumo es de aproximadamente 2mA aunque este se

puede reducir a 40 A cuando se est en el modo sleep (en este modo el micro se
detiene y disminuye el consumo de potencia).

DESCRIPCION DE PINES

El oscilador externo
Todo micro controlador requiere un circuito externo que le indique la velocidad a la
que debe trabajar. Este circuito, que se conoce como oscilador o reloj, es muy simple
pero de vital importancia para el buen funcionamiento del sistema.
El PIC16F877 puede utilizar cuatro tipos de oscilador diferentes. Estos tipos son:
RC. Oscilador con resistencia y condensador (baja precisin).
XT. Cristal (por ejemplo de 1 a 4 MHz, utilizado en este proyecto)
HS. Cristal de alta frecuencia (por ejemplo 10 a 20 MHz).

LP. Cristal para baja frecuencia y bajo consumo de potencia.


En el momento de programar o quemar el micro controlador se debe especificar qu
tipo de oscilador se usa. Esto se hace a travs de unos fusibles llamados fusibles de
configuracin.
El tipo de oscilador que se sugiere para las prcticas es el XT con un cristal de 4 MHz,
porque garantiza precisin y es muy comercial. Internamente esta frecuencia es
dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz en
este caso, por lo que cada instruccin se ejecuta en un microsegundo.
RESET
En los microcontroladores se requiere un pin de reset para reiniciar el funcionamiento
del sistema cuando sea necesario, ya sea por una falla que se presente o porque as
se haya diseado el sistema. El pin de reset en los PIC es llamado MCLR (Master
Clear).
Existen varias formas de reiniciar el sistema:
Al encendido (Power On Reset)
Pulso en el pin MCLR durante operacin normal
Pulso en el pin MCLR durante el modo de bajo consumo (modo sleep)
El rebase del conteo del circuito de vigilancia (watchdog) durante operacin normal y
tambin en bajo consumo (Sleep).

ETAPA DE PROGRAMACIN:
Para el desarrollo del programa que controlara todo el dispositivo se necesitaba de un
lenguaje que fuese muchsimo ms amigable que el lenguaje assembler (lenguaje de
bajo nivel), por lo tanto se utilizo el entorno de desarrollo MicroCodeStudio junto con
una programacin en lenguaje BASIC (lenguaje de alto nivel).
Porque BASIC y no Assembler?
Si bien assembler en un lenguaje ms optimizado para trabajar con micro
controladores, tiene tiempos de ejecucin ms rpidos y permite una mayor
optimizacin de la memoria interna del pic, para alguien que no conoce el lenguaje se
le complicara demasiado poder entenderlo para casos de modificaciones o
soluciones de problemas que puedan presentarse.
En cambio el lenguaje BASIC es muchsimo ms amigable, se reduce
considerablemente las lneas de cdigo para un mismo fin, aunque consume ms

memoria interna esto ya no es un problema porque cada vez los PIC contienen mas
memoria para soportar programas ms pesados.
Un ejemplo claro seria un programa para generar tonos telefnicos DTMF (Dual-Tone
Multi-Frequency), en assembler serian 260 lneas de cdigo, el tiempo en estudiar y
calcular cada una de las frecuencias sera demasiado y si lo que se busca es
optimizar tiempos y resultados no es lo ideal, en cambio para el lenguaje BASIC
dentro del entorno MCS resulta algo bastante simple y que no requiere ms de un par
de segundos para obtener todos los tonos DTMF, por ejemplo la siguiente lnea de
cdigo:
DTMFOUT portb.3, [0,9,6,1,3,6,5,6,4] ;genera tonos telefnicos por el pin RB.3
Por lo tanto tenemos una gran flexibilidad para poder desarrollar proyectos complejos
en un corto tiempo y con una gran eficacia, que para el caso de assembler requerira
de mucho tiempo y conocimientos especficos.

PROGRAMA CONTROL DE ACCESO


En este apartado se procede a dar la explicacin detallada del programa, sus
aspectos fundamentales y el proceso que se debe seguir para un ptimo
funcionamiento tanto en la simulacin como en el montaje fsico de todo el dispositivo.
Pasos a seguir para el desarrollo del programa:
- Configuracin de fuses del micro controlador
- Configurar variables y Definir puertos de entrada y salida
- Programacin (comparar claves, tiempos de espera, condiciones y subrutinas)
- Compilar y generar archivo .hex
- Simular programa en proteus
- CONFIGURACION DE FUSES DEL MICROCONTROLADOR
La configuracin de fuses o fusibles del micro es uno de los pasos ms importantes
en el desarrollo de un programa, un error bastante comn que comenten las personas
no muy entendidas en el tema es no configurar debidamente estas opciones, lo que
genera un mal o prcticamente el NO funcionamiento del pic fsicamente, provocando
una confusin ya que al simular en proteus el programa si funciona y se aleja bastante
de el resultado real.

Para nuestro programa definimos la siguiente configuracin de fuses que nos permite
su ptimo funcionamiento en base a la configuracin sugerida por el fabricante, para
esto se debe editar el archivo .INC dentro de la carpeta pbp, este archivo contiene la
configuracin defecto que adquiere nuestro programa, a continuacin el cdigo a ser
modificado:
__config _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF (GENERALMENTE
VIENE TAL CUAL)
(Indica que el tipo de oscilador ser de tipo XT cristal de cuarzo, Perro guardin
activado y la proteccin de cdigo desactivada, eso es para que el programa
pueda ser modificado posterior a la grabacin)
- CONFIGURAR VARIABLES Y DEFINCION DE PUERTOS I/O
Dentro de las configuraciones est la de definir caractersticas y variables, esto se
logra mediante el comando DEFINE, VAR y a continuacin se detallan
configuraciones del programa de control de acceso:
DEFINE OSC 4 ; OSC_XT 4MHz; Establecemos que el oscilador ser de 4Mhz
; CONFIG PORT_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Cmcon=7 ; PORTA COMO I/O DIGITAL POR DEFECTO VIENE COMO ENTRADA
ANALOGICA.
TRISA=0 ; PORTA SALIDA
TRISC=0 ; PORTC SALIDA
TRISB=0 ; PORTB SALIDA
TRISD=%11110000; RD0, RD1, RD2, RD3 = OUTPUT = FILAS
; RD4, RD5, RD6, RD7 = INPUT = COLUMNAS
*DENTRO DEL REGISTRO STATUS DEL MICROCONTROLADOR EXISTE LA
FUNCION TRIS QUE NOS PERMITE DEFINIR SI UN PIN ES ENTRADA O SALIDA.
; DEFINICION DE VARIABLES_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
B0 var byte ; VARIABLE QUE ALMACENA BYTE O LETRAS EN EL CASO
CUANDO SE DESPLIEGA UN MENSAJE LETRA POR LETRA.
B1 var byte
LED_INDICADOR var PORTC.4; INDICAMOS QUE EL PUERTO C4 SE LED
INDICADOR O STATUS
LED_OPEN VAR PORTC.5; SALIDA PARA LED OPEN POR PUERTO C5
LED_ERROR VAR PORTC.6; SALIDA PARA LED ERROR POR PUERTO C6
RELE var PORTC.3; SALIDA PARA RELE POR PUERTO C3

NUMERO var byte; TECLA PULSADA


R var byte; REPETICION

; DEFINICION DE PUERTOS PARA TECLADO_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _


_
F1 VAR PORTD.0; OUTPUT = FILAS; EL COMANDO VAR INDICA QUE AL
DECLARAR F1 CORRESPONDERA A LA SALIDA PORTD,0
F2 VAR PORTD.1 ; REVISE LA IMAGEN CON LA DESCRIPCION DE LOS PINES
PARA SABER A QUE NUMERO DE
F3 VAR PORTD.2 ; PIN CORRESPONDE , EN LA SIMULACION SE LOGRA
OBSERVAR EL COMPORTAMIENTO DE LAS I/O
F4 VAR PORTD.3
C1 VAR PORTD.4; INPUT = COLUMNAS
C2 VAR PORTD.5
C3 VAR PORTD.6
C4 VAR PORTD.7
; CONFIG DISPLAY LCD (4bit)(16x2)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
DEFINE LCD_DREG PORTB 'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE
DATOS
DEFINE LCD_DBIT 4 'DESDE EL BIT B.4 AL BIT B.7
DEFINE LCD_RSREG PORTB; UTILIZAR EL REGISTRO DE CONTROL/DATOS EN
PORTB
DEFINE LCD_RSBIT 1 'EN EL BIT B.1
DEFINE LCD_EREG PORTB 'UTILIZAR EL ENABLE EN EL PUERTO B
DEFINE LCD_EBIT 2 'EN EL BIT B.2

Luego de definir todas las variables podemos decir que el PIC16F877A queda con las
siguientes configuraciones para trabajar:
- Oscilador de tipo XT cristal de cuarzo de 4mhz
- Reset por pulso bajo nivel por defecto.
- Configuracin de Puerto B como salida, donde se enviaran los datos al LCD
- Configuracin de los 4 bit menos significativos del puerto C (0.1.2.3) como salida que
corresponden a las filas del teclado, y los 4 bit ms significativos (4.5.6.7) como
entradas que corresponden a las columnas, no se activan resistencias internas PULLUP ya que el teclado las tiene agregadas al PCB.

PROGRAMACIN GENERAL
En esta etapa se exponen fragmentos de cdigo donde se generan los procesos de
todas las funciones del dispositivo
INIT ;
High LED_INDICADOR; ENCIENDE LED: ESTA LINEA INDICA QUE SE SEBEN
SACAR 5V CON UNA CORRIENTE DE 25mA POR EL PUERTO C4, YA QUE LO
DEFINIMOS AL PRINCIPIO EN LAS CONFIGURACIONES DE PUERTOS I/O.
Pause 500
Low LED_INDICADOR; APAGA LED
Pause 200 : ESTO SIGNIFICA QUE SE GENERA UNA PAUSA DE 200ms
PARA ENCENDER NUEVAMENTE EL LED
High LED_INDICADOR; ENCIENDE LED
Pause 200
Low LED_INDICADOR; APAGA LED
Pause 200 ; RETARDO DE TIEMPO PARA PREPARAR DISPLAY
LCDOUT $FE, 1 ; COMANDO PARA LIMPIAR DISPLAY LCD
LCDOUT $FE, $82, "INICIANDO" 'ESCRIBIR EN LA PRIMER LNEA
LCDOUT $FE, $C2, "CERRADURA" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C 'APAGAR EL CURSOR
PAUSE 500
Estas lneas de cdigo sirven para generar lo primero que sucede al encender el
dispositivo, se enva un pulso para encender el led indicador por un periodo de
500ms, luego se apaga y vuelve a encender por un periodo de 200ms y vuelve a
apagarse, luego se espera otro periodo de 200ms suficiente para que se prepare el
display para recibir su primera instruccin de borrado de pantalla, luego se le indica
que debe desplazar el cursor y desplegar la palabra INICIANDO, luego se le indica
que debe desplazarse a la segunda lnea en la Posicin C2 y escribir CERRADURA,
luego apaga el cursor y espera un tiempo de 500ms a la espera de la siguiente
instruccin.
Informacion completa con ejemplos sobre programar un display LCD , tabla de
posicion de memoria, comandos ,efectos etc.

.: IC - USO DEL LCD USANDO PIC-BASIC-PRO::.

Imagen de la simulacin en proteus:

MSJ_CLAVE
Pause 45
LCDOUT $FE, 1 ' LIMPIAR LCD
FOR B0 = 0 TO 12
LOOKUP B0,["INGRESA CLAVE"],B1
LCDOUT $FE,$0C,B1
PAUSE 45
NEXT
LCDOUT $FE, $C0 'COLOCAR EL CURSOR EN LA SEG LNEA
FOR B0 = 0 TO 9
LOOKUP B0,["4 DIGITOS:"],B1
LCDOUT $FE,$0C,B1
PAUSE 45
Next
GOTO TECLAUNO; IR A COMPARAR CLAVES
Este fragmento es cuando se le indica al usuario ingresar su clave de cuatro dgitos,
los comandos para desplegar los mensaje cambian respecto a los anteriores porque
ahora se aplica el efecto de despliegue letra por letra, todo con retardos de 45ms
suficientes para preparar a la memoria RAM de la pantalla para que reciba la
informacin, Al final en la lnea que dice GOTO TECLAUNO, es simplemente IR A

TECLA UNO lo que se llama salto incondicional, no requiere una condicin para ir a
ese punto del programa.

El programa ha generado el salto a TECLAUNO Y PROCEDERA A REALIZAR EL


BARRIDO DEL TECLADO, en este fragmento del programa estn presente
subrutinas y saltos condicionales.
****LA CLAVE ES 1,2,3,4 CLAVE DE PRUEBA SOLAMENTE, PARA PROBAR EL
FUNCIONAMIENTO Y TODA LA APLICACION, USTED PUEDE CAMBIARLA,
MODIFICAR EL PROGRAMA PARA ALMACENAR CLAVES DE X LONGITUD EN
MEMORIA EEPROM (256 bytes) Y GENERAR NUEVAS RUTINAS MAS
SOFISTICADAS DE COMPARACIONES****
TECLAUNO:
GOSUB BARRIDO; IR A BARRIDO Y RETORNAR CON UN VALOR
GOSUB PTECLA; ENVIA A PROGRAMA ANTIREBOTES
LCDOUT $FE, $CA, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
IF NUMERO = 1 THEN TECLADOS; SI EL NUMERO ES = A 1 IR A "TECLADOS"
Lo primero que hace el programa en este punto es ir a la subrutina (GOSUB)
llamada BARRIDOencargada de capturar el valor de la tecla pulsada. Como
funciona? Se detalla a continuacin:
BARRIDO
LOW F1 ; VERIFICAR FILA 1

IF C1 = 0 THEN NUMERO = 7: RETURN; TECLA RETORNA CARGADA CON 7


IF C2 = 0 THEN NUMERO = 8: RETURN; TECLA RETORNA CARGADA CON 8
IF C3 = 0 THEN NUMERO = 9: RETURN; TECLA RETORNA CARGADA CON 9
IF C4 = 0 THEN NUMERO = 10: RETURN; TECLA RETORNA CARGADA CON 10
HIGH F1
Para este fragmento el programa indica que F1 debe estar en estado 0 lgico (0v)
como las columnas estn alimentadas con 5v a travs de las resistencias pull-up, si se
presiona una tecla correspondiente a la fila 1 (7, 8, 9,10 o A) el programa detectara el
cambio de estado de la columna de 1 a 0 lgico e identifica que valor se presion y lo
almacena en una variable ya definida como NUMERO, por ejemplo la primera lnea de
cdigo se expresara como:
ES C1 IGUAL A 0? - Si, ENTONCES LA VARIABLE NUMERO ES IGUAL A 7,
RETORNE CON EL VALOR. NO ES 0, ENTONCES CONSULTE LA SIGUIENTE
COLUMNA.
A esto se le llama saltos condicionales, si se cumple una condicin salta a la siguiente
lnea de cdigo o donde se le indique.
Este proceso del escaneo se realiza de la misma forma para las cuatro filas y
columnas y se repite como bucle infinito hasta que se presione una tecla y se
almacene el valor en la variable.
Una subrutina es un subprograma dentro del programa principal y es llamado
mediante el comando GOSUB, para este caso hemos llamado a la subrutina
de BARRIDO y se ha obtenido un valor, ahora que sucede en este punto? Una
subrutina vuelve al programa principal con la funcin RETURN, gracias a la memoria
de pila interna del pic o memoria STACK que consta de 8 niveles, sea puede
almacenar hasta 8 direcciones de programa para poder ejecutar los retornos, ya que
una subrutina puede contener a otra, y siempre se debe tener almacenada la
direccin siguiente desde donde fue llamada la subrutina para que retorne sin
problemas. Entonces analizamos el fragmento de cdigo donde fue llamada la
subrutina BARRIDO.
GOSUB BARRIDO; IR A BARRIDO Y RETORNAR CON UN VALOR
GOSUB PTECLA; ENVIA A PROGRAMA ANTIREBOTES
Al presionar la tecla se almacena la variable y se retorna de la subrutina (RETURN), la

memoriaSTACK a almacenado que el retorno debe ser a la lnea de cdigo siguiente


sea otra subrutina pero llamada PTECLA encargada de encender el LED indicador
cuando se presion una tecla y esperando a que esta tecla se suelte dentro de un
periodo de 45ms, si aun no se ha soltado la tecla, seguir en un bucle infinito.
PTECLA:
HIGH LED_INDICADOR; ENCIENDE LED
PAUSE 200 ; DURACION 200MS
LOW LED_INDICADOR
ESPACIO: PROGRAMA DE ANTIRREBOTE DE TECLAS
IF C1 = 0 THEN ESPACIO
IF C2 = 0 THEN ESPACIO; SI SIGUE PULSADA LA TECLA IR A ESPACIO
IF C3 = 0 THEN ESPACIO
PAUSE 45
RETURN ; RETORNA SI SE SUELTAN LAS TECLAS
Al soltar la tecla el programa retorna a la siguiente lnea de cdigo:
LCDOUT $FE, $CA, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
IF NUMERO = 1 THEN TECLADOS; SI EL NUMERO ES = A 1 IR A "TECLADOS"
GOTO FALSO ; SI NO ES IGUAL A 1 IR A LAZO FALSO
Siempre al presionar cualquier tecla esta se mostrara en la pantalla LCD como un
asterisco, luego se llega al salto condicional y consulta por el primer digito de la clave
que es 1, si la variable numero es igual a 1 entonces salta a TECLADOS donde la
variable numero debe ser igual a 2 y a si sucesivamente, si no es uno salta a un
fragmento del programa llamado FALSOque se encarga de esperar a que se
completen los cuatro dgitos e indicar que hay un error en la clave, simplemente todo
lo explicado anteriormente se repite para los 4 dgitos de la clave:

Si la clave es correcta entonces se ejecutan las siguientes lneas de cdigo


OPENGE:
PAUSE 200
GOTO MSJ_VERIF
MSJ_OPEN
HIGH LED_OPEN
PAUSE 1000
High RELE ; ACTIVA EL RELE
LCDOUT $FE, 1 ' LIMPIAR VISOR
LCDOUT $FE, $81, "PUERTA ABIERTA" 'ESCRIBIR EN LA PRIMER LNEA
PAUSE 4000
LOW LED_OPEN
LOW RELE; APAGA RELE
GOTO MSJ_CLAVE; IR NUEVAMENTE A COMPARAR CLAVES
Al estar correcta la clave el programa espera 200ms y salta a la
etiqueta MSJ_VERIF que contiene las instrucciones para desplegar el mensaje de
verificacin en la pantalla LCD como se muestra en la siguiente imagen:

Luego se vuelve a la lnea MSJ_OPEN espera 1 segundo y enva 5 volt al pin donde
est conectado el rel mediante un transistor 2n3904 que al recibir el pulso entra en
estado de saturacin permitiendo la circulacin de corriente por la bobina y activando
los contactos internos del rel, tambin se mantiene encendido el LED_OPEN y se
enva un mensaje al LCDindicando que se abri la puerta:

Luego se activar el rel se espera un tiempo de 4 segundos y se desconecta el rel


junto con el diodo led_open, luego vuelve a comparar las claves para un nuevo ciclo.

Para el caso de un error en la clave se ejecuta el siguiente fragmento del programa:


FALSO:
GOSUB BARRIDO

GOSUB PTECLA; ESTAS TECLAS NO COMPARAN NINGUNA CLAVE


LCDOUT $FE, $CB, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
FALSO1: SOLO ESPERA QUE TERMINE DE PULSAR LAS 4 TECLAS.
GOSUB BARRIDO
GOSUB PTECLA
LCDOUT $FE, $CC, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
FALSO2:
GOSUB BARRIDO
GOSUB PTECLA
LCDOUT $FE, $CD, "*" 'ESCRIBIR EN LA SEGUNDA LNEA
LCDOUT $FE, $0C
FALSO3:
Pause 200
GOTO MSJ_ERROR
Si hay un error en la primera comparacin el programa enva a FALSO, si el error es
en la segunda comparacin enva a FALSO1 y a si con la tercera y cuarta
comparacin, al llegar a esta parte del programa no se compara ni almacena ninguna
clave, solo deja que se terminen de digitar nmeros restantes despus del error y se
muestran los asteriscos en el LCD, luego el programa salta a MS_ERROR para
desplegar el mensaje Clave incorrecta como se muestra en la siguiente imagen*:

DISPLAY LCD

Los LCD tienen la capacidad de mostrar cualquier carcter alfa numrico, vienen con
la lgica de control pre programada de fbrica, el consumo de corriente es menor a 5
mA.
En total se pueden visualizar 2 lneas de 16 caracteres cada una, es decir, 2x16=32
caracteres. A pesar de que el display slo puede visualizar 16 caracteres por lnea
(esto est sujeto al tipo de display que se est utilizando), puede almacenar en total
40 por lnea. Es el usuario el que especifica que 16 caracteres son los que se van a
visualizar.
CONEXIONES:

Para la aplicacin de nuestro proyecto de indica a continuacin las conexiones usadas


y su funcin:
1- VSS (GND) : conexin a tierra
2- VDD (Vin+): conexin a 5v mediante resistencia limitadora de corriente.
3- VE o VO (contraste): nivel de contraste, se conecta mediante potencimetro o
directamente a tierra con una resistencia.
4- Register Select (RS): Seleccin de modo, 0 = comando 1 = Dato carcter.
5- Read write (RW): Define si se va a escribir informacin o se va a leer, 1 = Lectura 0
= Escritura, para nuestro caso se conecta a tierra solo escribiremos en la pantalla.
6- Enable: 0 = LCD desactivado 1 = LCD activado para recibir informacin.
Bus de datos desde Data 4 a Data 7, PIn 15 y 16 corresponden a la conexin del
diodo led de iluminacin de la pantalla, su conexionado es mediante una resistencia
de 560.
Recordemos que en las configuraciones de variables y puertos I/O en el programa

definimos que se usara un bus de 4 bit en este caso lo ms altos (4 al 7), tambin
que se usara el pin B.1 como RS y el B.2 como Enable.

TECLADO MATRICIAL
El teclado matricial est compuesto por filas y columnas, en este caso es un teclado
4x4, se uso uno con resistencias pull-up integradas al PCB ya que el microcontrolador
detecta voltajes y no impedancias por lo tanto detectara cuando una columna cambie
a 0 como se explico anteriormente en el funcionamiento del programa, se puede
conectar un teclado sin resistencias pull-up, estas se deben activar en la
programacin del micro y se debe consultar el datashet del modelo de pic a usar o del
Pic16f877A en este caso.
ESQUEMATICO PARA PROTEUS

PCB ---- La medida de la placa es de 15 cm de largo por 10 cm de alto, puden


modificarla a su gusto , con o sin pantalla , otro pic, otro rele no se, a gusto de uno,
eso es una referencia, este diseo lo realice yo y me funciono.

FOTOS TERMINADO Y FUNCIONANDO

La pantalla se puede cambiar de posicin , se puede soldar con un cable tipo IDE o
flex , yo lo sold directo a la placa.

You might also like