Vous êtes sur la page 1sur 28

Proyecto Control de acceso electrónico o cerradura electrónica

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 continuación 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 instalación para el software MicroCodeStudio, su compilador y todo el cuento

PARA QUEMAR O GRABAR EL PIC SE NECESITA UN GRABADOR DE ESTE TIPO

yo uso un clon del Pickit2 lo recomiendo es económico , cualquiera que sea compatible sirve he incluso andan dando vuelta los esquematicos para fabricarlo uno mismo.

PROTEUS PARA LA SIMULACIÓN

MATERIALES :

usted modificar el PCB según sus necesidades.

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.

puede reemplazar por dispositivos electrónicos para cumplir la función de

conmutador.)

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 560Ωx5(R5,R5,R7,R1,R2),

4.7KΩx1(R8),1KΩx1(R9),180Ωx1(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

  • - 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.

Diseño 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 LÍNEA LCDOUT $FE, $C2, "CERRADURA" 'ESCRIBIR EN LA SEGUNDA LÍNEA 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 LÍNEA FOR B0 = 0 TO 9 LOOKUP B0,["4 DIGITOS:"],B1 LCDOUT $FE,$0C,B1 PAUSE 45

next GOTO TECLAUNO ; IR A COMPARAR

_

MSJ_VERIF ;

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

_

pause 200 LCDOUT $FE, 1 ' LIMPIAR LCD

LCDOUT $FE, $82, "VERIFICANDO" 'ESCRIBIR EN LA PRIMER LÍNEA LCDOUT $FE, $C4, "CLAVE" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C pause 500 HIGh LED_OPEN PAUSE 200 LCDOUT $FE, 1 ' LIMPIAR LCD LCDOUT $FE, $82, "VERIFICANDO" 'ESCRIBIR EN LA PRIMER LÍNEA LOW LED_OPEN

LCDOUT $FE, $C2, " LCDOUT $FE, $0C PAUSE 500

"

...........

'ESCRIBIR EN LA SEGUNDA LÍNEA

GOTO MSJ_OPEN

;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

_

MSJ_ERROR pause 200 LCDOUT $FE, 1 ' LIMPIAR LCD LCDOUT $FE, $82, "VERIFICANDO" 'ESCRIBIR EN LA PRIMER LÍNEA LCDOUT $FE, $C4, "CLAVE" 'ESCRIBIR EN LA SEGUNDA LÍNEA 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 LÍNEA

LCDOUT $FE, $C2, " LCDOUT $FE, $0C

"

...........

'ESCRIBIR EN LA SEGUNDA LÍNEA

PAUSE 1000 LCDOUT $FE, 1 ; LIMPIAR VISOR LCDOUT $FE, $84, "CLAVE" 'ESCRIBIR EN LA PRIMER LÍNEA LCDOUT $FE, $C2, "INCORRECTA!" 'ESCRIBIR EN LA SEGUNDA LÍNEA 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 LÍNEA 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 LÍNEA LCDOUT $FE, $0C IF NUMERO = 2 THEN TECLATRES ;SI EL NUMERO ES = A 2 IR A "TECLATRES" LCDOUT $FE, $CB, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C

GOTO FALSO1 TECLATRES:

GOSUB BARRIDO GOSUB PTECLA LCDOUT $FE, $CC, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C IF NUMERO = 3 THEN TECLACUATRO ; SI EL NUMERO ES = A 3 IR A "TECLACUATRO" LCDOUT $FE, $CC, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C GOTO FALSO2 TECLACUATRO:

GOSUB BARRIDO GOSUB PTECLA LCDOUT $FE, $CD, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C IF NUMERO = 4 THEN OPENGE ;SI EL NUMERO ES IGUAL A 4 CONECTAR RELE LCDOUT $FE, $CD, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA 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 LÍNEA

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 LÍNEA LCDOUT $FE, $0C FALSO1: ; SOLO ESPERA QUE TERMINE DE PULSAR LAS 4 TECLAS.

GOSUB BARRIDO GOSUB PTECLA LCDOUT $FE, $CC, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C

FALSO2:

GOSUB BARRIDO GOSUB PTECLA LCDOUT $FE, $CD, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA 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 tecnología CMOS, su consumo de potencia es muy bajo, El encapsulado más común para este micro controlador es el DIP (Dual In-line Pin) de 40 pines, propio para usarlo en experimentación.

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

DISTRIBUCIÓN DE PINES:

gran facilidad en el desarrollo de prototipos ya que no requiere ser borrado con luz ultravioleta

La máxima 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 máxima 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 operación, 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).

puede reducir a 40 µA cuando se está en el modo sleep (en este modo el

DESCRIPCION DE PINES

puede reducir a 40 µA cuando se está en el modo sleep (en este modo el

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 precisión). • 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 través de unos fusibles llamados “fusibles de configuración”. El tipo de oscilador que se sugiere para las prácticas es el XT con un cristal de 4 MHz, porque garantiza precisión 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 instrucción 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 diseñado 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 operación normal • Pulso en el pin MCLR durante el modo de bajo consumo (modo sleep) • El rebase del conteo del circuito de vigilancia (watchdog) durante operación normal y también en bajo consumo (Sleep).

ETAPA DE PROGRAMACIÓN:

Para el desarrollo del programa que controlaría todo el dispositivo se necesitaba de un lenguaje que fuese muchísimo más amigable que el lenguaje assembler (lenguaje de bajo nivel), por lo tanto se utilizo el entorno de desarrollo MicroCodeStudio junto con una programación en lenguaje BASIC (lenguaje de alto nivel). Porque BASIC y no Assembler? Si bien assembler en un lenguaje más optimizado para trabajar con micro controladores, tiene tiempos de ejecución más rápidos y permite una mayor optimización de la memoria interna del pic, para alguien que no conoce el lenguaje se le complicaría demasiado poder entenderlo para casos de modificaciones o soluciones de problemas que puedan presentarse. En cambio el lenguaje BASIC es muchísimo más amigable, se reduce considerablemente las líneas de código para un mismo fin, aunque consume más

memoria interna esto ya no es un problema porque cada vez los PIC contienen mas memoria para soportar programas más pesados. Un ejemplo claro seria un programa para generar tonos telefónicos DTMF (Dual-Tone Multi-Frequency), en assembler serian 260 líneas de código, el tiempo en estudiar y calcular cada una de las frecuencias sería 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 más de un par de segundos para obtener todos los tonos DTMF, por ejemplo la siguiente línea de código:

DTMFOUT portb.3, [0,9,6,1,3,6,5,6,4] ;genera tonos telefónicos 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 requeriría de mucho tiempo y conocimientos específicos.

PROGRAMA CONTROL DE ACCESO

En este apartado se procede a dar la explicación detallada del programa, sus aspectos fundamentales y el proceso que se debe seguir para un óptimo funcionamiento tanto en la simulación como en el montaje físico de todo el dispositivo.

Pasos a seguir para el desarrollo del programa:

  • - Configuración de fuses del micro controlador

  • - Configurar variables y Definir puertos de entrada y salida

  • - Programación (comparar claves, tiempos de espera, condiciones y subrutinas)

  • - Compilar y generar archivo .hex

  • - Simular programa en proteus

  • - CONFIGURACION DE FUSES DEL MICROCONTROLADOR

La configuración de fuses o fusibles del micro es uno de los pasos más importantes en el desarrollo de un programa, un error bastante común que comenten las personas no muy entendidas en el tema es no configurar debidamente estas opciones, lo que genera un mal o prácticamente el NO funcionamiento del pic físicamente, provocando una confusión ya que al simular en proteus el programa si funciona y se aleja bastante de el resultado real.

Para nuestro programa definimos la siguiente configuración de fuses que nos permite su óptimo funcionamiento en base a la configuración sugerida por el fabricante, para esto se debe editar el archivo .INC dentro de la carpeta pbp, este archivo contiene la configuración defecto que adquiere nuestro programa, a continuación el código 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 guardián activado y la protección de código desactivada, eso es para que el programa pueda ser modificado posterior a la grabación)

- CONFIGURAR VARIABLES Y DEFINCION DE PUERTOS I/O

Dentro de las configuraciones está la de definir características y variables, esto se logra mediante el comando DEFINE, VAR y a continuación 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.

  • - Configuración de Puerto B como salida, donde se enviaran los datos al LCD

  • - Configuración 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 más significativos (4.5.6.7) como

entradas que corresponden a las columnas, no se activan resistencias internas PULL- UP ya que el teclado las tiene agregadas al PCB.

PROGRAMACIÓN GENERAL

En esta etapa se exponen fragmentos de código 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 LÍNEA LCDOUT $FE, $C2, "CERRADURA" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C 'APAGAR EL CURSOR PAUSE 500

Estas líneas de código sirven para generar lo primero que sucede al encender el dispositivo, se envía 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 instrucción 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 línea en la Posición C2 y escribir “CERRADURA”, luego apaga el cursor y espera un tiempo de 500ms a la espera de la siguiente instrucción.

Informacion completa con ejemplos sobre programar un display LCD , tabla de posicion de memoria, comandos ,efectos etc.

.:

<a href=.: IC - USO DEL LCD USANDO PIC-BASIC-PRO::. Imagen de la simulación 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 LÍNEA 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 dígitos, 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 información, Al final en la línea que dice GOTO TECLAUNO , es simplemente IR A " id="pdf-obj-17-5" src="pdf-obj-17-5.jpg">

Imagen de la simulación en proteus:

<a href=.: IC - USO DEL LCD USANDO PIC-BASIC-PRO::. Imagen de la simulación 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 LÍNEA 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 dígitos, 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 información, Al final en la línea que dice GOTO TECLAUNO , es simplemente IR A " id="pdf-obj-17-11" src="pdf-obj-17-11.jpg">

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 LÍNEA 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 dígitos, 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 información, Al final en la línea que dice GOTO TECLAUNO, es simplemente IR A

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

TECLA UNO lo que se llama salto incondicional, no requiere una condición para ir a ese

El programa ha generado el salto a TECLAUNO Y PROCEDERA A REALIZAR EL BARRIDO DEL TECLADO, en este fragmento del programa están 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 LÍNEA 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 continuación:

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 lógico (0v) como las columnas están alimentadas con 5v a través 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 lógico e identifica que valor se presionó y lo almacena en una variable ya definida como NUMERO, por ejemplo la primera línea de código se expresaría 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 condición salta a la siguiente línea de código 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 función 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 dirección siguiente desde donde fue llamada la subrutina para que retorne sin problemas. Entonces analizamos el fragmento de código 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 línea de código 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 línea de código:

LCDOUT $FE, $CA, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA 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 dígitos e indicar que hay un error en la clave, simplemente todo lo explicado anteriormente se repite para los 4 dígitos de la clave:

Si la clave es correcta entonces se ejecutan las siguientes líneas de código OPENGE: PAUSE 200

Si la clave es correcta entonces se ejecutan las siguientes líneas de código

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 LÍNEA 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 verificación en la pantalla LCD como se muestra en la siguiente imagen:

Luego se vuelve a la línea MSJ_OPEN espera 1 segundo y envía 5 volt al pin

Luego se vuelve a la línea MSJ_OPEN espera 1 segundo y envía 5 volt al pin donde está conectado el relé mediante un transistor 2n3904 que al recibir el pulso entra en estado de saturación permitiendo la circulación de corriente por la bobina y activando los contactos internos del relé, también se mantiene encendido el LED_OPEN y se envía un mensaje al LCDindicando que se abrió la puerta:

Luego se vuelve a la línea MSJ_OPEN espera 1 segundo y envía 5 volt al pin

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 LÍNEA LCDOUT $FE, $0C FALSO1: SOLO ESPERA QUE TERMINE DE PULSAR LAS 4 TECLAS. GOSUB BARRIDO GOSUB PTECLA LCDOUT $FE, $CC, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C

FALSO2:

GOSUB BARRIDO GOSUB PTECLA LCDOUT $FE, $CD, "*" 'ESCRIBIR EN LA SEGUNDA LÍNEA LCDOUT $FE, $0C

FALSO3:

Pause 200 GOTO MSJ_ERROR

Si hay un error en la primera comparación el programa envía a FALSO, si el error es en la segunda comparación envía a FALSO1 y a si con la tercera y cuarta comparación, al llegar a esta parte del programa no se compara ni almacena ninguna clave, solo deja que se terminen de digitar números restantes después 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*:

GOSUB PTECLA; ESTAS TECLAS NO COMPARAN NINGUNA CLAVE LCDOUT $FE, $CB, "*" 'ESCRIBIR EN LA SEGUNDA

DISPLAY LCD

Los LCD tienen la capacidad de mostrar cualquier carácter alfa numérico, vienen con la lógica de control pre programada de fábrica, el consumo de corriente es menor a 5 mA. En total se pueden visualizar 2 líneas de 16 caracteres cada una, es decir, 2x16=32 caracteres. A pesar de que el display sólo puede visualizar 16 caracteres por línea (esto está sujeto al tipo de display que se está utilizando), puede almacenar en total 40 por línea. Es el usuario el que especifica que 16 caracteres son los que se van a visualizar. CONEXIONES:

Los LCD tienen la capacidad de mostrar cualquier carácter alfa numérico, vienen con la lógica de

Para la aplicación de nuestro proyecto de indica a continuación las conexiones usadas y su función:

1- VSS (GND) : conexión a tierra 2- VDD (Vin+): conexión a 5v mediante resistencia limitadora de corriente. 3- VE o VO (contraste): nivel de contraste, se conecta mediante potenciómetro o directamente a tierra con una resistencia. 4- Register Select (RS): Selección de modo, 0 = comando 1 = Dato carácter. 5- Read write (RW): Define si se va a escribir información 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 información.

Bus de datos desde Data 4 a Data 7, PIn 15 y 16 corresponden a la conexión del diodo led de iluminación 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 usaría un bus de 4 bit en este caso lo más altos (4 al 7), también que se usaría 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 programación del micro y se debe consultar el datashet del modelo de pic a usar o del Pic16f877A en este caso.

ESQUEMATICO PARA PROTEUS

definimos que se usaría un bus de 4 bit en este caso lo más altos (4

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 diseño lo realice yo y me funciono.

FOTOS TERMINADO Y FUNCIONANDO

FOTOS TERMINADO Y FUNCIONANDO

FOTOS TERMINADO Y FUNCIONANDO
FOTOS TERMINADO Y FUNCIONANDO
La pantalla se puede cambiar de posición , se puede soldar con un cable tipo IDE

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