Está en la página 1de 18

CERRADURA ELÉCTRICA CON CONTRASEÑA DE 4 DIGITOS USANDO 1 SOLO

BOTÓN CON PIC12F629 (REF001)


14 de marzo de 2012 Claudio Larios

Cerradura Eléctrica con contraseña de 4 dígitos usando sólo un simple botón


Al observar algunas revistas sobre electrónica, encontré un artículo llamado originalmente de: Code Lock
con One Button, de Zorislav Miljak, usando un microcontrolador PIC16F84. Fue la inspiración para este
proyecto.
Pensé: ¿Por qué no simplemente usar una pequeña PIC12F629 para esto? Es mucho más barato (R$
5,00), pequeño, tiene oscilador interno, y fácilmente encontrado en el mercado. Aparentemente, sería fácil la
adaptación, pero el problema surgió al intentar encender el display de 7 segmentos. La solución fue
implementar una multiplexación en la que se presentarían los seguimientos del display "c, p, b, a" o "g, d, y,
f", alternadamente, y usando la señal del punto (p) para accionar un transistor BC547, cuyo colector aterrizó
un relé de potencia para la cerradura eléctrica. El pin 7 del PIC se utiliza como señal de conmutación. Cuando
en DC (1) inhibe los segmentos C, P, B, A, a través de un transistor BC547 y cuando está en Gnd (0) inhibe
los segmentos G, D, F, y utilizando diodo tipo 1N4148, que se desvían la tensión de estos seguimientos.
Lógicamente, fue necesario comenzar un programa ".asm" de cero para obtener lo deseado. El código
".asm" generado es muy simple de entender, si acompaña los comentarios (Obs. Hecho por hobysta, no un
programador "experto"). Después de compilado, se realizaron varias pruebas para ajustar los tiempos, ya que
estamos utilizando el oscilador interno del PIC para ahorrar los raros pines. Tenga en cuenta que se utilizó el
pino reset (4) como entrada. No olvide acertar la palabra "Config" para este objetivo si tiene que recompilar el
programa asm.
Como la introducción de una contraseña es de forma serial, no es bueno tener una contraseña de muchos
dígitos, ya que consumía mucho tiempo para introducirla. Por eso, se ha optado por utilizar sólo 4 dígitos de
forma fija. En el programa ".asm" se definió por línea de código la contraseña inicial como "7523". En uso,
cambie como desee y después se guarda en la memoria EEprom del chip. Si olvida la contraseña que ha
cambiado, debe apagar el chip y volver a grabarlo utilizando la contraseña "7523", inicialmente.
Llegó el gran momento. ¿Cómo utilizar este dispositivo? Comience presionando el botón, que mostrará
secuencialmente un recuento de 0 a "P". Suelte el botón cuando aparezca el primer número de la contraseña.
Repita con los siguientes 3 números. Si la contraseña se introduce correctamente aparecerá la letra "L"
(liberada) y luego "." (Punto), conectando el relé de la cerradura durante 15 segundos y apagando
automáticamente. Si la contraseña se escribe incorrectamente, aparecerá la letra "F" (falla) parpadeando 3
veces. Para cambiar la contraseña, suelte el botón cuando aparezca la letra "P", y al hacer esto, aparecerá la
letra "O" (Contraseña antigua). A continuación, debe introducir la contraseña actual. Si se introduce
correctamente, aparecerá la letra "N" (Nueva Contraseña). Introduzca ahora la nueva contraseña de 4 dígitos.
A continuación, aparecerá la letra "C" y volver a introducir la nueva contraseña para confirmar el cambio.
Después de esto, aparecerá la letra "A" (Cambiado) parpadeando 3 veces, indicando el éxito en el cambio.
Para grabar el PIC con el archivo Hex puede utilizar un programa como WinPic800 y desea cambiar el
"fechadura1sw.asm" programa de utilizar MPLAB de Microchip.
Se utilizó un protoboard para realizar un montaje experimental, no habiéndose hecho una placa de circuito
impreso.
Para alimentar el circuito puede utilizar un pequeño transformador de 110V 12+12 y un regulador de voltaje
de 5 voltios para el tipo 7805.
Sigue el esquema:
Esquema de circuito cerrado

Sigue el código asm

;****************************************************************************
; PROYECTO: CERRADURA ELECTRICA CON CONTRASEÑA DE 4 DIGITOS USANDO SOLAMENTE 1
SOLO BOTÓN (SERIAL)
;****************************************************************************
;-----------------------------“fechadura1sw.asm”-----------------------------
;
; INICIO: 09/01/12 TERM.:
; AUTOR: C. LÁRIOS
; PROCESSADOR: PIC12F629
; OBJETIVO: ACCIONAR SOLENOIDE DE PUERTO O COMANDO DE ABRIR/CERRAR PORTÓN
AUTOMATICO
;****************************************************************************
;
#INCLUDE <P12F629.INC> ; ARCHIVO ESTÁNDAR
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _MCLRE_OFF &
_INTRC_OSC_NOCLKOUT ;( ATENCIÓN DESACTIVADO. ¡HECHO DURANTE LA CONFIGURACION!!!)
ERRORLEVEL -302

; PAGINACION DE MEMORIA;
#DEFINE BANK0 BCF STATUS,RP0 ;CONFIGURA BANK0 DE MEMORIA
#DEFINE BANK1 BSF STATUS,RP0 ;CONFIGURA BANK1

; VARIABLES
CBLOCK 0X20 ;DIRECCION INICIAL DE MEMORIA
N0,N1,N2,N3,AUX,DEL4,
DEL5,AUX1,TEMP,CONT,SAIDA,NUM,PONT,XW0,XW1,XW2,XW3,W0,W1,W2,W3,C0,C1,C2,FLAG,B0,
B1,B2,PASSO
ENDC

;======================DEFINICION DE BITS Y FLAGS=======================


#DEFINE SAE GPIO,5 ; SALIDA PARA DISPLAY SEG 'A' Y 'E' - PIN 2
#DEFINE SBF GPIO,4 ; SALIDA PARA DISPLAY SEG 'B' Y 'F' - PIN 3
#DEFINE SCG GPIO,2 ; SALIDA PARA DISPLAY SEG 'C' Y 'G' - PIN 5
#DEFINE SDP GPIO,1 ; SALIDA PARA DISPLAY SEG 'D' Y '.' - PIN 6
#DEFINE SW GPIO,3 ; ENTRADA DE LA CLAVE DEL CODIGO PIN 4
#DEFINE MUX GPIO,0 ; SALIDA PARA MULTIPLEXADO DE DISPLAY PIN 7
LETRA_C EQU .12
LETRA_P EQU .10
LETRA_A EQU .18
LETRA_F EQU .15
LETRA_N EQU .13
LETRA_E EQU .11
LETRA_L EQU .17
LETRA_o EQU .14
LETRA_PONTO EQU .16 ;MUESTRA PUNTO Y ACCIONA
TMAX EQU 0X28 ;TIEMPO MAXIMO ENTRE ENTRADA DE NUMERO DE LA
CONTRASEÑA (15 SEG)

TEMPO_FECHADURA_LIGADO EQU 0X50 ;TIEMPO EN QUE LA CERRADURA ESTA ACCIONADA

#DEFINE FLAGTAP FLAG,0


ORG H'2100'
DE 7,3,2,5 ;CONTRASEÑA INICIAL (MODIFICAR)
ORG 0X00
GOTO INICIO

;...........................................................................
; VECTOR DE INTERRUPCION
ORG 0X04
RETFIE

;...........................................................................
TABELA
ADDWF PCL,F
; ABCPEFGD
RETLW B'11101101' ;0
RETLW B'01100000' ;1
RETLW B'11001011' ;2
RETLW B'11100011' ;3
RETLW B'01100110' ;4
RETLW B'10100111' ;5
RETLW B'10101111' ;6
RETLW B'11100000' ;7
RETLW B'11101111' ;8
RETLW B'11100111' ;9
RETLW B'11001110' ;LETRA 'P' =.10
RETLW B'10001111' ;LETRA 'E' =.11
RETLW B'10001101' ;LETRA 'C' =.12
RETLW B'11101100' ;LETRA 'N' =.13
RETLW B'00101011' ;LETRA 'O' =.14
RETLW B'10001110' ;LETRA 'F' =.15
RETLW B'00010000' ;LETRA '.' =.16
RETLW B'00001101' ;LETRA 'L' =.17
RETLW B'11101110' ;LETRA 'A' =.18

RECEBE_SENHA
CLRF PONT
CLRF PCLATH
MOVFW PASSO
ADDWF PCL,F
GOTO TESTA_SENHA ;0- NORMAL - COMPARA CONTRASEÑA RECEBIDA
CON EEPROM
GOTO TESTA_SENHA ;1- MODO CAMBIO DE CONTRASEÑA - COMPARA
CONTRASEÑA RECIBIDA CON EEPROM Y SIGUE LOS PASOS
GOTO RECEBE_NOVA_SEÑA ;2- RECIBE NUEVA CONTRASEÑA
GOTO CONFIRMA_NOVA_SEÑA ;3- RECIBE NUEVAMENTE LA MESMA NUEVA
CONTRASEÑA PARA CONFIRMACION
RECEBE_NOVA_SENHA
MOVFW N0 ;SALVA CONTRASEÑA A CONFIRMAR
MOVWF XW0
MOVFW N1
MOVWF XW1
MOVFW N2
MOVWF XW2
MOVFW N3
MOVWF XW3
MOVLW 0X04
CALL DELAYSEG
MOVLW LETRA_C
CALL MOSTRALETRA
MOVLW .3
MOVWF PASSO
GOTO MAIN
TESTA_SENHA
CALL LEEEP
CONFIRMA_NOVA_SENHA
MOVFW XW0
XORWF N0
BTFSS STATUS,Z
GOTO FALHA1
MOVFW XW1
XORWF N1
BTFSS STATUS,Z
GOTO FALHA1
MOVFW XW2
XORWF N2
BTFSS STATUS,Z
GOTO FALHA1
MOVFW XW3
XORWF N3
BTFSS STATUS,Z
GOTO FALHA1
MOVLW .1
XORWF PASSO,W
BTFSC STATUS,Z
GOTO PASSO1 ;MODO 1 - INICIA ALTERACION DE CONTRASEÑA
MOVLW .3
XORWF PASSO,W
BTFSC STATUS,Z
GOTO GRAVAR ;MODO 3 - GRABAR NUEVA CONTRASEÑA EN LA EEPROM
MOVLW 0X02
CALL DELAYSEG
MOVLW LETRA_L
CALL MOSTRALETRA
CLRF GPIO
BSF GPIO,1 ;CONECTA PUNTO (SALIDA A LA CERRADURA)
MOVLW TEMPO_FECHADURA_LIGADO
CALL DELAYSEG
VFIM
CLRF N0
CLRF N1
CLRF N2
CLRF N3
CLRF PONT
CLRF GPIO
CLRF PASSO
BCF FLAGTAP
GOTO MAIN
PASSO1
MOVLW 0X02
CALL DELAYSEG
MOVLW LETRA_N
CALL MOSTRALETRA
MOVLW .2
MOVWF PASSO
GOTO MAIN
GRAVAR
CALL VAIEEPROM
MOVLW 0X03
MOVWF AUX
MOVLW 0X04
CALL DELAYSEG
MOVLW LETRA_A
CALL MOSTRALETRA
DECFSZ AUX,F
GOTO $-5
GOTO VFIM
;
;
INICIO
BANK1 ;BANCO 1
MOVLW .0
MOVWF INTCON ;DESCONECTA TODAS LAS INTERRUPCIONES
MOVLW B'000000' ;SALIDA EN GP0
MOVWF TRISIO ;
BANK0
MOVLW .7 ; DESCONECTA EL COMPARADOR
MOVWF CMCON ;IDEM
CLRF GPIO
CLRF PONT ;PONE A CERO EL PUNTERO
MOVLW TMAX
MOVWF C2
CLRF FLAG
CLRF PASSO
MAIN
BTFSC SW
GOTO VETEMP
DECFSZ B0,F
GOTO MAIN
DECFSZ B1,F
GOTO MAIN
MOVLW TMAX
MOVWF C2
GOTO INITCONT
VETEMP
CLRF B0
CLRF B1
DECFSZ C0,F
GOTO MAIN
DECFSZ C1,F
GOTO MAIN
DECFSZ C2,F
GOTO MAIN
MOVLW TMAX
MOVWF C2
BTFSS FLAGTAP
GOTO NMOSTRAC
CALL FALHA1
NMOSTRAC
CLRF N0
CLRF N1
CLRF N2
CLRF N3
GOTO MAIN
INITCONT
CLRF AUX1
MOVLW .0
MOVWF NUM
CALL TABELA
MOVWF SAIDA
APRMESMO
CALL MS1
CALL DELAYT
ADDLW .0
BTFSS STATUS,Z
GOTO PEGAN
CALL MS2
CALL DELAYT
ADDLW .0
BTFSS STATUS,Z
GOTO PEGAN
DECFSZ AUX1,F
GOTO APRMESMO
INCF NUM,F
MOVFW NUM
CALL TABELA
MOVWF SAIDA
MOVFW NUM
SUBLW .11
BTFSC STATUS,Z
GOTO INITCONT
GOTO APRMESMO
PEGAN
MOVFW NUM
SUBLW .10 ;PRUEBA SI ES LETRA 'A' DE CAMBIAR CONTRASEÑA
BTFSC STATUS,Z
GOTO ALTERA_SENHA ; VA A CAMBIAR CONTRASEÑA
BSF FLAGTAP ; FLAG PARA PRESENTACIÓN DE 'F'
MOVFW PONT
ADDLW 0X20
MOVWF FSR
MOVFW NUM
MOVWF INDF
INCF PONT,F
MOVFW PONT
SUBLW .4
BTFSC STATUS,Z
GOTO RECEBE_SENHA
GOTO MAIN
ALTERA_SENHA
MOVLW .1 ; SEÑALA QUE HAY CAMBIO DE CONTRASEÑA
MOVWF PASSO
MOVLW 0X04
CALL DELAYSEG
MOVLW LETRA_o ; MUESTRA LETRA 'O' DE OLD (CONTRASEÑA VIEJA)
CALL MOSTRALETRA
GOTO MAIN
FALHA1 MOVLW .3 ; PARPADEA 3 VECES Y APARECE LA LETRA 'F'
MOVWF AUX
MOVLW 0X04
CALL DELAYSEG
MOVLW LETRA_F
CALL MOSTRALETRA
DECFSZ AUX,F
GOTO $-5
GOTO VFIM
MOSTRALETRA
CLRF AUX1
CALL TABELA
MOVWF SAIDA
X1
CALL MS1
CALL DELAY
CALL MS2
CALL DELAY
DECFSZ AUX1,F
GOTO X1
CLRF GPIO
RETURN
MS1
CLRF GPIO
BTFSC SAIDA,7
BSF GPIO,5
BTFSC SAIDA,6
BSF GPIO,4
BTFSC SAIDA,5
BSF GPIO,2
BTFSC SAIDA,4
BSF GPIO,1
BCF GPIO,0
RETURN
MS2
CLRF GPIO
BTFSC SAIDA,3
BSF GPIO,5
BTFSC SAIDA,2
BSF GPIO,4
BTFSC SAIDA,1
BSF GPIO,2
BTFSC SAIDA,0
BSF GPIO,1
BSF GPIO,0
RETURN
;---------------------------------------------------------------------------
DELAY
MOVLW 0XFF
MOVWF DEL5
NOP
NOP
NOP
NOP
DECFSZ DEL5,F
GOTO $-5
RETURN
DELAYT
MOVLW 0XFF
MOVWF DEL5
NOP
BTFSC SW
GOTO DBNCE
NOP
NOP
VT1 DECFSZ DEL5,F
GOTO $-5
CLRF GPIO
RETLW .0
DBNCE
CALL DELAY
BTFSS SW
GOTO VT1
CLRF GPIO
RETLW .1
;..................SUB-RUTINA DE ESCRITURA EN E2PROM...................
ESCR_E2PROM
BANK1
MOVWF EEDATA
BCF INTCON,GIE
BSF EECON1,WREN
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
; BTFSC EECON1,WRERR ;* HUBO ERROR?(* OPCIONAL ESTA LÍNEA Y LA PROXIMA)
; GOTO ESCR_E2PROM ;* INTENTA NUEVAMENTE SIN AFECTAR EEDATA
BTFSC EECON1,WR
GOTO $ - 1
BANK0
RETURN
VAIEEPROM ; ESCRIBE EN E2PROM
MOVLW .0
BANK1
MOVWF EEADR
BANK0
MOVFW XW0 ; DATO DEL TMR1H N.OVERFLOW
CALL ESCR_E2PROM
MOVLW .1
BANK1
MOVWF EEADR
BANK0
MOVFW XW1 ; DATO DEL TMR1H
CALL ESCR_E2PROM
MOVLW .2 ; TODAVIA NO
BANK1
MOVWF EEADR
BANK0
MOVFW XW2 ; DATO DEL TMR1L
CALL ESCR_E2PROM
MOVLW .3 ; TODAVIA NO
BANK1
MOVWF EEADR
BANK0
MOVFW XW3 ; DATO DEL TMR1L
CALL ESCR_E2PROM
LEEEP MOVLW .0 ; VALOR PARA NUMERO 0
BANK1
MOVWF EEADR ; CARGA DIRECCION
CALL LE_E2PROM ; SUBRUTINA PARA LECTURA
MOVWF XW0 ; CARGA PRIMER NUMERO
MOVLW .1 ; VALOR PARA NUMERO 0
BANK1
MOVWF EEADR ; CARGA DIRECCION
CALL LE_E2PROM ; SUBRUTINA PARA LECTURA
MOVWF XW1 ; CARGA PRIMER NUMERO
MOVLW .2 ; VALOR PARA NUMERO 0
BANK1
MOVWF EEADR ; CARGA DIRECCION
CALL LE_E2PROM ; SUBRUTINA PARA LECTURA
MOVWF XW2 ; CARGA PRIMER NUMERO
MOVLW .3 ; VALOR PARA NUMERO 0
BANK1
MOVWF EEADR ; CARGA DIRECCION
CALL LE_E2PROM ; SUBRUTINA PARA LECTURA
MOVWF XW3 ; CARGA PRIMER NUMERO
RETURN
LE_E2PROM
BANK1 ; SUBRUTINA PARA LECTURA DE E2PROM
BSF EECON1,RD ;
MOVF EEDATA,W ;
BANK0 ;
RETURN
DELAYSEG
MOVWF C2
DECFSZ C0,F
GOTO $-1
DECFSZ C1,F
GOTO $-3
DECFSZ C2,F
GOTO $-5
RETURN
END
Sigue el código "cerradura1sw.hex":

:020000040000FA
:020000006B286B
:0800080009008207ED346034A9
:10001000CB34E3346634A734AF34E034EF34E73420
:10002000CE348F348D34EC342B348E3410340D3484
:10003000EE34AC018A013C088207302830282128A0
:1000400031282008AD002108AE002208AF002308A7
:10005000B000043048210C30CE200330BC00792899
:100060002E212D08A006031DC5282E08A106031D5C
:10007000C5282F08A206031DC5283008A306031DA6
:10008000C52801303C0603195A2803303C060319E1
:100090006128023048211130CE208501851450306E
:1000A0004821A001A101A201A301AC018501BC016D
:1000B00038107928023048210D30CE200230BC00A3
:1000C000792816210330A400043048211230CE20B4
:1000D000A40B64285128831600308B000030850063
:1000E0008312073099008501AC012830B700B801B0
:1000F000BC0185198228B90B7928BA0B79282830D8
:10010000B7009428B901BA01B50B7928B60B792844
:10011000B70B79282830B700381C8F28C520A001DC
:10012000A101A201A3017928A7010030AB0005209D
:10013000AA00D920F820003E031DAE28E420F820B4
:10014000003E031DAE28A70B9928AB0A2B080520FB
:10015000AA002B080B3C0319942899282B080A3C69
:100160000319BE2838142C08203E84002B08800078
:10017000AC0A2C08043C0319192879280130BC006A
:10018000043048210E30CE2079280330A4000430FA
:1001900048210F30CE20A40BC7285128A7010520E5
:1001A000AA00D920EF20E420EF20A70BD128850159
:1001B00008008501AA1B85162A1B0516AA1A051513
:1001C0002A1A8514051008008501AA1985162A190E
:1001D0000516AA1805152A18851405140800FF30FD
:1001E000A6000000000000000000A60BF128080097
:1001F000FF30A60000008519032900000000A60BAF
:10020000FB2885010034EF20851DFF28850101347E
:1002100083169A008B131C1555309D00AA309D0043
:100220009C141C119C18122983120800003083169C
:100230009B0083122D080821013083169B00831236
:100240002E080821023083169B0083122F080821F4
:10025000033083169B008312300808210030831678
:100260009B004321AD00013083169B004321AE006B
:10027000023083169B004321AF00033083169B009E
:100280004321B000080083161C141A0883120800CA
:10029000B700B50B4929B60B4929B70B4929080006
:02400E00C43FAD
:084200000700030002000500A5
:00000001FF

curiosidades:
FECHADURA ELÉTRICA COM SENHA DE 4 DIGITOS USANDO 1 SÓ BOTÃO COM
PIC12F629 (REF001)
14 de março de 2012 Claudio Larios

Fechadura Eletrica com senha de 4 digitos usando apenas um simples botão


Observando algumas revistas sobre eletrônica, encontrei um artigo chamado originalmente de: Code Lock
with One Button, de Zorislav Miljak, usando um microcontrolador PIC16F84. Foi a inspiração para este projeto.
Pensei: Porque não usar um pequeno PIC12F629 para isto? É bem mais barato (R$ 5,00), pequeno, tem
oscilador interno, e facilmente encontrado no mercado. Aparentemente, seria fácil a adaptação, mas o
problema surgiu ao tentar ligar o display de 7 seguimentos. A solução foi implementar uma multiplexação em
que se apresentaria os seguimentos do display “c, p, b, a” ou “g, d, e, f”, alternadamente, e usando o sinal do
ponto (p) para acionar um transistor BC547 ,cujo coletor aterraria um rele de potencia para a fechadura
elétrica. O pino 7 do Pic é usado como sinal de chaveamento. Quando está em Vcc (1) inibe os seguimentos
c, p, b, a, via um transistor BC547 e quando está em Gnd (0) inibe os seguimentos g, d, f, e, usando diodos
tipo 1N4148, que desviam a tensão destes seguimentos .
Logicamente, foi preciso começar um programa “.asm” do zero para obter o desejado. O código
“.asm”gerado é bem simples de entender, se acompanhar os comentários (Obs. Feito por hobysta, não um
programador “expert”). Depois de compilado, foi feito vários testes para acertar os tempos, visto que estamos
usando o oscilador interno do PIC visando poupar os raros pinos. Note que foi usado o pino reset (4) como
entrada. Não esqueça de acertar a palavra “Config” para este objetivo caso tenha que recompilar o programa
asm.
Como a introdução de uma senha é de forma serial, não é bom termos uma senha de muitos dígitos,pois
consumiria muito tempo para introduzi-la. Por isto, foi optado por se usar apenas 4 digitos de forma fixa. No
programa “.asm” foi definido por linha de código a senha inicial como sendo “7523”. Em uso, altere ela
conforme desejar, sendo depois salva na memória EEprom do chip. Caso esqueça a senha que você alterou,
deverá apagar o chip e grava-lo novamente, usando a senha “7523”, inicialmente.
Chegou o grande momento. ¿Como usar este dispositivo? Comece apertando o botão, que irá apresentar
sequencialmente uma contagem de 0 a “P”. Solte o botão quando aparecer o primeiro numero da senha.
Repita com os próximos 3 números. Se a senha for introduzida corretamente aparecerá a letra “L” (liberado)
e depois “.” (ponto), ligando o relé da fechadura por 15 segundos e desligando automaticamente. Se a senha
for digitada incorretamente aparecerá a letra “F” (falha) piscando 3 vezes. Para mudar a senha, soltar o botão
quando aparecer a letra “P”, e ao fazer isto, irá aparecer a letra “O” (Senha antiga). Em seguida deverá ser
digitado a senha atual. Se introduzida de forma correta, aparecerá a letra “N” (Nova Senha). Introduza agora
a nova senha de 4 digitos. Irá aparecer em seguida a letra “C”, devendo introduzir de novo a senha nova para
confirmar a mudança. Após isto, aparecerá a letra “A” (Alterado) piscando por 3 vezes, indicando o sucesso
na alteração.
Para gravar o PIC com arquivo Hex poderá usar um programa como WinPic800 e se desejar alterar o
programa “fechadura1sw.asm” use o Mplab da Microchip.
Foi usado um protoboard para realizar uma montagem experimental, não tendo sido feita ainda uma placa
de circuito impresso.
Para alimentar o circuito pode-se se usar um pequeno transformador de 110v para 12+12 e um regulador
de tensão para 5 volts do tipo 7805.
Segue o esquema:

Esquema circuito fechadura

Segue codigo asm:

;****************************************************************************
; PROJETO : FECHADURA ELETRICA COM SENHA DE 4 DIGITOS USANDO APENAS 1 SÓ BOTÃO
(SERIAL)
;****************************************************************************
; -------------------------------------“fechadura1sw.asm”--------------------
----------
;
; INICIO : 09/01/12 TERM.:
; AUTOR: C. LÁRIOS
; PROCESSADOR: PIC 12F629
; OBJETIVO: ACIONAR SOLENOIDE DE PORTÃO OU COMANDO DE ABRIR /FECHAR PORTÃO
AUTOMATICO
;****************************************************************************
*
;
#INCLUDE <P12F629.INC> ; ARQUIVO PADRAO
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_ON & _WDT_OFF & _MCLRE_OFF &
_INTRC_OSC_NOCLKOUT ;(ATENÇÃO DESLIGADO. FEITO NO CONFIGURE!!!!)
ERRORLEVEL -302

; PAGINACAO DE MEMORIA;
#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA
#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1

; VARIAVEIS
CBLOCK 0X20 ;ENDERECO INICIAL DE MEMORIA
N0,N1,N2,N3,AUX,DEL4,
DEL5,AUX1,TEMP,CONT,SAIDA,NUM,PONT,XW0,XW1,XW2,XW3,W0,W1,W2,W3,C0,C1,C2,FLAG,B0,
B1,B2,PASSO
ENDC

;======================DEFINICAO DE BITS E FLAGS========================


#DEFINE SAE GPIO,5 ; SAIDA PARA DISPLAY SEG 'A' E 'E' - PINO 2
#DEFINE SBF GPIO,4 ; SAIDA PARA DISPLAY SEG 'B' E 'F' - PINO 3
#DEFINE SCG GPIO,2 ; SAIDA PARA DISPLAY SEG 'C' E 'G' - PINO 5
#DEFINE SDP GPIO,1 ; SAIDA PARA DISPLAY SEG 'D' E '.' - PINO 6
#DEFINE SW GPIO,3 ; ENTRADA DA CHAVE DO CODIGO PINO 4
#DEFINE MUX GPIO,0 ; SAIDA PARA MULTIPLEXAGEM DO DISPLAY PINO 7
LETRA_C EQU .12
LETRA_P EQU .10
LETRA_A EQU .18
LETRA_F EQU .15
LETRA_N EQU .13
LETRA_E EQU .11
LETRA_L EQU .17
LETRA_o EQU .14
LETRA_PONTO EQU .16 ;MOSTRA PONTO E ACIONA
TMAX EQU 0X28 ;TEMPO MAXIMO ENTRE ENTRADA DE NUMERO DA SENHA (15
SEG)

TEMPO_FECHADURA_LIGADO EQU 0X50 ;TEMPO QUE FECHADURA FICA ACIONADA

#DEFINE FLAGTAP FLAG,0


ORG H'2100'
DE 7,3,2,5 ;SENHA INICIAL (ALTERAR)
ORG 0X00
GOTO INICIO

;............................................................................
....................
; VETOR DE INTERRUPCAO
ORG 0X04
RETFIE

;............................................................................
....................
TABELA
ADDWF PCL,F
; ABCPEFGD
RETLW B'11101101' ;0
RETLW B'01100000' ;1
RETLW B'11001011' ;2
RETLW B'11100011' ;3
RETLW B'01100110' ;4
RETLW B'10100111' ;5
RETLW B'10101111' ;6
RETLW B'11100000' ;7
RETLW B'11101111' ;8
RETLW B'11100111' ;9
RETLW B'11001110' ;LETRA 'P' =.10
RETLW B'10001111' ;LETRA 'E' =.11
RETLW B'10001101' ;LETRA 'C' =.12
RETLW B'11101100' ;LETRA 'N' =.13
RETLW B'00101011' ;LETRA 'O' =.14
RETLW B'10001110' ;LETRA 'F' =.15
RETLW B'00010000' ;LETRA '.' =.16
RETLW B'00001101' ;LETRA 'L' =.17
RETLW B'11101110' ;LETRA 'A' =.18

RECEBE_SENHA
CLRF PONT
CLRF PCLATH
MOVFW PASSO
ADDWF PCL,F
GOTO TESTA_SENHA ;0- NORMAL - COMPARA SENHA RECEBIDA COM
EEPROM
GOTO TESTA_SENHA ;1- MODO TROCA DE SENHA - COMPARA SENHA
RECEBIDA COM EEPROM E SEGUE OS PASSOS
GOTO RECEBE_NOVA_SENHA ;2- RECEBE NOVA SENHA
GOTO CONFIRMA_NOVA_SENHA ;3- RECEBE ANOVAMENTE A MESMA NOVA SENHA
PARA CONFIRMAÇÃO
RECEBE_NOVA_SENHA
MOVFW N0 ;SALVA SENHA A CONFIRMAR
MOVWF XW0
MOVFW N1
MOVWF XW1
MOVFW N2
MOVWF XW2
MOVFW N3
MOVWF XW3
MOVLW 0X04
CALL DELAYSEG
MOVLW LETRA_C
CALL MOSTRALETRA
MOVLW .3
MOVWF PASSO
GOTO MAIN
TESTA_SENHA
CALL LEEEP
CONFIRMA_NOVA_SENHA
MOVFW XW0
XORWF N0
BTFSS STATUS,Z
GOTO FALHA1
MOVFW XW1
XORWF N1
BTFSS STATUS,Z
GOTO FALHA1
MOVFW XW2
XORWF N2
BTFSS STATUS,Z
GOTO FALHA1
MOVFW XW3
XORWF N3
BTFSS STATUS,Z
GOTO FALHA1
MOVLW .1
XORWF PASSO,W
BTFSC STATUS,Z
GOTO PASSO1 ;MODO 1 - INICIA ALTERAÇÃO DE SENHA
MOVLW .3
XORWF PASSO,W
BTFSC STATUS,Z
GOTO GRAVAR ;MODO 3 - GRAVAR NOVA SENHA NA EEPROM
MOVLW 0X02
CALL DELAYSEG
MOVLW LETRA_L
CALL MOSTRALETRA
CLRF GPIO
BSF GPIO,1 ;LIGA PONTO (SAIDA PARA FECHADURA)
MOVLW TEMPO_FECHADURA_LIGADO
CALL DELAYSEG
VFIM
CLRF N0
CLRF N1
CLRF N2
CLRF N3
CLRF PONT
CLRF GPIO
CLRF PASSO
BCF FLAGTAP
GOTO MAIN
PASSO1
MOVLW 0X02
CALL DELAYSEG
MOVLW LETRA_N
CALL MOSTRALETRA
MOVLW .2
MOVWF PASSO
GOTO MAIN
GRAVAR
CALL VAIEEPROM
MOVLW 0X03
MOVWF AUX
MOVLW 0X04
CALL DELAYSEG
MOVLW LETRA_A
CALL MOSTRALETRA
DECFSZ AUX,F
GOTO $-5
GOTO VFIM
;
;
INICIO
BANK1 ;BANCO 1
MOVLW .0
MOVWF INTCON ;DESLIGA TODAS INTERRUPCOES
MOVLW B'000000' ;SAIDA EM GP0
MOVWF TRISIO ;
BANK0
MOVLW .7 ;DESLIGA O COMPARADOR
MOVWF CMCON ;IDEM
CLRF GPIO
CLRF PONT ;ZERA PONTEIRO
MOVLW TMAX
MOVWF C2
CLRF FLAG
CLRF PASSO
MAIN
BTFSC SW
GOTO VETEMP
DECFSZ B0,F
GOTO MAIN
DECFSZ B1,F
GOTO MAIN
MOVLW TMAX
MOVWF C2
GOTO INITCONT
VETEMP
CLRF B0
CLRF B1
DECFSZ C0,F
GOTO MAIN
DECFSZ C1,F
GOTO MAIN
DECFSZ C2,F
GOTO MAIN
MOVLW TMAX
MOVWF C2
BTFSS FLAGTAP
GOTO NMOSTRAC
CALL FALHA1
NMOSTRAC
CLRF N0
CLRF N1
CLRF N2
CLRF N3
GOTO MAIN
INITCONT
CLRF AUX1
MOVLW .0
MOVWF NUM
CALL TABELA
MOVWF SAIDA
APRMESMO
CALL MS1
CALL DELAYT
ADDLW .0
BTFSS STATUS,Z
GOTO PEGAN
CALL MS2
CALL DELAYT
ADDLW .0
BTFSS STATUS,Z
GOTO PEGAN
DECFSZ AUX1,F
GOTO APRMESMO
INCF NUM,F
MOVFW NUM
CALL TABELA
MOVWF SAIDA
MOVFW NUM
SUBLW .11
BTFSC STATUS,Z
GOTO INITCONT
GOTO APRMESMO
PEGAN
MOVFW NUM
SUBLW .10 ;TESTA SE É LETRA 'A' DE ALTERAR SENHA
BTFSC STATUS,Z
GOTO ALTERA_SENHA ;VAI PARA ALTERAR SENHA
BSF FLAGTAP ;FLAG PARA APRESENTAÇÃO DE 'F'
MOVFW PONT
ADDLW 0X20
MOVWF FSR
MOVFW NUM
MOVWF INDF
INCF PONT,F
MOVFW PONT
SUBLW .4
BTFSC STATUS,Z
GOTO RECEBE_SENHA
GOTO MAIN
ALTERA_SENHA
MOVLW .1 ;SINALIZA QUE HÁ ALTERAÇÃO DE SENHA
MOVWF PASSO
MOVLW 0X04
CALL DELAYSEG
MOVLW LETRA_o ;MOSTRA LETRA 'O' DE OLD (VELHA SENHA)
CALL MOSTRALETRA
GOTO MAIN
FALHA1 MOVLW .3 ;3 VEZES PISCA E APARECE A LETRA 'F'
MOVWF AUX
MOVLW 0X04
CALL DELAYSEG
MOVLW LETRA_F
CALL MOSTRALETRA
DECFSZ AUX,F
GOTO $-5
GOTO VFIM
MOSTRALETRA
CLRF AUX1
CALL TABELA
MOVWF SAIDA
X1
CALL MS1
CALL DELAY
CALL MS2
CALL DELAY
DECFSZ AUX1,F
GOTO X1
CLRF GPIO
RETURN
MS1
CLRF GPIO
BTFSC SAIDA,7
BSF GPIO,5
BTFSC SAIDA,6
BSF GPIO,4
BTFSC SAIDA,5
BSF GPIO,2
BTFSC SAIDA,4
BSF GPIO,1
BCF GPIO,0
RETURN
MS2
CLRF GPIO
BTFSC SAIDA,3
BSF GPIO,5
BTFSC SAIDA,2
BSF GPIO,4
BTFSC SAIDA,1
BSF GPIO,2
BTFSC SAIDA,0
BSF GPIO,1
BSF GPIO,0
RETURN
;----------------------------------------------------------------------------
--------------
DELAY
MOVLW 0XFF
MOVWF DEL5
NOP
NOP
NOP
NOP
DECFSZ DEL5,F
GOTO $-5
RETURN
DELAYT
MOVLW 0XFF
MOVWF DEL5
NOP
BTFSC SW
GOTO DBNCE
NOP
NOP
VT1 DECFSZ DEL5,F
GOTO $-5
CLRF GPIO
RETLW .0
DBNCE
CALL DELAY
BTFSS SW
GOTO VT1
CLRF GPIO
RETLW .1
;..................SUB-ROTINA DE ESCRITA NA E2PROM...................
ESCR_E2PROM
BANK1
MOVWF EEDATA
BCF INTCON,GIE
BSF EECON1,WREN
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
; BTFSC EECON1,WRERR ; * HOUVE ERRO?( * OPCIONAL ESTA LINHA E A
PROXIMA)
; GOTO ESCR_E2PROM ; * TENTA NOVAMENTE SEM AFETAR EEDATA
BTFSC EECON1,WR
GOTO $ - 1
BANK0
RETURN
VAIEEPROM ; ESCREVE NA E2PROM
MOVLW .0
BANK1
MOVWF EEADR
BANK0
MOVFW XW0 ;DADO DO TMR1H N.OVERFLOW
CALL ESCR_E2PROM
MOVLW .1
BANK1
MOVWF EEADR
BANK0
MOVFW XW1 ;DADO DO TMR1H
CALL ESCR_E2PROM
MOVLW .2 ;AINDA NÃO
BANK1
MOVWF EEADR
BANK0
MOVFW XW2 ;DADO DO TMR1L
CALL ESCR_E2PROM
MOVLW .3 ;AINDA NÃO
BANK1
MOVWF EEADR
BANK0
MOVFW XW3 ;DADO DO TMR1L
CALL ESCR_E2PROM
LEEEP MOVLW .0 ;VALOR PARA NUMERO 0
BANK1
MOVWF EEADR ;CARREGA ENDERECO
CALL LE_E2PROM ;SUBROTINA PARA LEITURA
MOVWF XW0 ;CARREGA PRIMEIRO NUMERO
MOVLW .1 ;VALOR PARA NUMERO 0
BANK1
MOVWF EEADR ;CARREGA ENDERECO
CALL LE_E2PROM ;SUBROTINA PARA LEITURA
MOVWF XW1 ;CARREGA PRIMEIRO NUMERO
MOVLW .2 ;VALOR PARA NUMERO 0
BANK1
MOVWF EEADR ;CARREGA ENDERECO
CALL LE_E2PROM ;SUBROTINA PARA LEITURA
MOVWF XW2 ;CARREGA PRIMEIRO NUMERO
MOVLW .3 ;VALOR PARA NUMERO 0
BANK1
MOVWF EEADR ;CARREGA ENDERECO
CALL LE_E2PROM ;SUBROTINA PARA LEITURA
MOVWF XW3 ;CARREGA PRIMEIRO NUMERO
RETURN
LE_E2PROM
BANK1 ;SUB-ROTINA DE LEITURA DE E2PROM
BSF EECON1,RD ;
MOVF EEDATA,W ;
BANK0 ;
RETURN
DELAYSEG
MOVWF C2
DECFSZ C0,F
GOTO $-1
DECFSZ C1,F
GOTO $-3
DECFSZ C2,F
GOTO $-5
RETURN
END

Segue o código “fechadura1sw.hex”:

:020000040000FA
:020000006B286B
:0800080009008207ED346034A9
:10001000CB34E3346634A734AF34E034EF34E73420
:10002000CE348F348D34EC342B348E3410340D3484
:10003000EE34AC018A013C088207302830282128A0
:1000400031282008AD002108AE002208AF002308A7
:10005000B000043048210C30CE200330BC00792899
:100060002E212D08A006031DC5282E08A106031D5C
:10007000C5282F08A206031DC5283008A306031DA6
:10008000C52801303C0603195A2803303C060319E1
:100090006128023048211130CE208501851450306E
:1000A0004821A001A101A201A301AC018501BC016D
:1000B00038107928023048210D30CE200230BC00A3
:1000C000792816210330A400043048211230CE20B4
:1000D000A40B64285128831600308B000030850063
:1000E0008312073099008501AC012830B700B801B0
:1000F000BC0185198228B90B7928BA0B79282830D8
:10010000B7009428B901BA01B50B7928B60B792844
:10011000B70B79282830B700381C8F28C520A001DC
:10012000A101A201A3017928A7010030AB0005209D
:10013000AA00D920F820003E031DAE28E420F820B4
:10014000003E031DAE28A70B9928AB0A2B080520FB
:10015000AA002B080B3C0319942899282B080A3C69
:100160000319BE2838142C08203E84002B08800078
:10017000AC0A2C08043C0319192879280130BC006A
:10018000043048210E30CE2079280330A4000430FA
:1001900048210F30CE20A40BC7285128A7010520E5
:1001A000AA00D920EF20E420EF20A70BD128850159
:1001B00008008501AA1B85162A1B0516AA1A051513
:1001C0002A1A8514051008008501AA1985162A190E
:1001D0000516AA1805152A18851405140800FF30FD
:1001E000A6000000000000000000A60BF128080097
:1001F000FF30A60000008519032900000000A60BAF
:10020000FB2885010034EF20851DFF28850101347E
:1002100083169A008B131C1555309D00AA309D0043
:100220009C141C119C18122983120800003083169C
:100230009B0083122D080821013083169B00831236
:100240002E080821023083169B0083122F080821F4
:10025000033083169B008312300808210030831678
:100260009B004321AD00013083169B004321AE006B
:10027000023083169B004321AF00033083169B009E
:100280004321B000080083161C141A0883120800CA
:10029000B700B50B4929B60B4929B70B4929080006
:02400E00C43FAD
:084200000700030002000500A5
:00000001FF