Desde 1994 en la Red. La pagina de los aficionados a la electronica, informatica y otras curiosidades de la vida. No dudes en visitarnos.
Ahora 2 visitas.| 3484492 Visitas (desde Dic. 2011), hoy: 327 Visitas 1000 Pag. Vistas , ultimos 36 dias: 11188 Visitas. 38212 Pag. Vistas. Tu IP: 18.117.78.87
Que ando curioseando:
AutosuficienciaCosas de casaElectronicaEn InternetInformáticaMundo MisticoSin categoríaSociedadTe lo recomiendo

Cerradura codificada con pic 16f84a

Esta es la plaqueta vista desde el lado del cobre, la columna de componentes que se ven a la derecha, de abajo hacia arriba son: puente rectificador, capacitor de 1000 uF, regulador 7805 y capacitor de 100 uf.

Lo único que falta para terminar la cerradura es el programa para el PIC que es el siguiente, cerradura.asm y cerradura.hex

Esta cerradura usa un código de 4 dígitos, que al ser marcado activa un relé por unos 5 segundos o 15 segundos si la activas con el botón directo (usado para salir de la habitación).

Cada vez que apretás un botón suena un beep de muy corta duración.

Si te equivocas mientras marcas la clave, volves a empezar y listo (el PIC reconoce el código dentro de una cadena de números).

Codigo ASM:

	list	p=16f84A
	include 	<p16f84A.inc>
	__config 1b

	Z	equ	02

	pta	equ	05
	ptb	equ	06
	num1	equ	20
	num2	equ	21
	clav1	equ	22
	clav2	equ	23
	clav3 	equ	24
	clav4	equ	25
	press	equ	26

	w2	equ	27
	w3	equ	28

	j	equ	37
	k	equ	38
	l	equ	39

	dig1	equ	3A
	dig2	equ	3B
	dig3	equ	3C
	dig4	equ	3D
	dig5	equ	3E
	pros	equ	3F
	cont	equ	40

	org	0
	goto inicio

inicio
	movlw	d'1'	;***** codigo ***********
	movwf	dig1
	movlw	d'3'
	movwf	dig2
	movlw	d'5'
	movwf	dig3
	movlw	d'9'
	movwf	dig4	;***** fin de codigo *****

	clrw
	movlw	b'11111111'
	tris	ptb
	movlw	b'00010011'
	tris	pta

	clrf	pta	;**** reseteo de variables ***
	clrf	ptb	;***** fin reset variables ****

codigo
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	call leerpt
	movf	press,0
	movwf	num1
	movlw	d'11'
	movwf	num2
	call comparar
	movwf	w3
	btfss	w3,3
	goto	codigo

cod1	call buzzer

	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******

	movf	press,0	;**** comparar press con el digito 1 ***
	movwf	num1
	movf	dig1,0
	movwf	num2
	call comparar
	movwf	w3
	btfsc 	w3,3
	goto codigox

cod2
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	call leerpt
	movf	press,0	;**** comparar press con el digito 2 (y11) ***
	movwf	num1
	movf	dig1,0
	movwf	num2
	call comparar
	movwf	w3
	btfsc	w3,3
	goto cod2b
	goto cod2

cod2b
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	call leerpt
	movf	press,0
	movwf	num1
	movlw	d'11'
	movwf	num2
	call 	comparar
	movwf	w3
	btfss 	w3,3
	goto 	cod2b

cod2c	call buzzer
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	movf	dig2,0
	movwf	num2
	call 	comparar
	movwf	w3
	btfsc	w3,3
	goto 	codigo

cod3
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	call leerpt
	movf	press,0	;**** comparar press con el digito 3 (y11) ***
	movwf	num1
	movf	dig2,0
	movwf	num2
	call comparar
	movwf	w3
	btfsc	w3,3
	goto cod3b
	goto cod3

cod3b
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	call leerpt
	movf	press,0
	movwf	num1
	movlw	d'11'
	movwf	num2
	call 	comparar
	movwf	w3
	btfss 	w3,3
	goto 	cod3b

cod3c	call buzzer
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	movf	dig3,0
	movwf	num2
	call 	comparar
	movwf	w3
	btfsc	w3,3
	goto 	codigo

cod4
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	call leerpt
	movf	press,0	;**** comparar press con el digito 4 (y11) ***
	movwf	num1
	movf	dig3,0
	movwf	num2
	call comparar
	movwf	w3
	btfsc	w3,3
	goto cod4b
	goto cod4

cod4b
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	call leerpt
	movf	press,0
	movwf	num1
	movlw	d'11'
	movwf	num2
	call 	comparar
	movwf	w3
	btfss 	w3,3
	goto 	cod4b

cod4c	call buzzer
	btfsc	pta,4	;***** abrir directo *******
	call	abrir2	;***** abrir directo *******
	movf	dig4,0
	movwf	num2
	call 	comparar
	movwf	w3
	btfsc	w3,3
	goto 	codigo

cod5
	;***************** abrir *******************
	call	abrir
	goto codigo

pausa1			;****** pausa de 1 segundo ***
	movlw	d'2'	;*** 50 ****
	movwf	l
loop0	movlw	d'150'	;*** 200 ***
	movwf	j
loop1	movlw	d'200'	;*** 200 ***
	movwf	k
loop2	decfsz	k,1
	goto loop2
	decfsz	j,1
	goto	loop1
	decfsz	l,1
	goto loop0
	return		;**** fin de pausa 1 **********

pausa2			;****** pausa de .05 segundos ***
	movlw	d'100'	;** 50 **
	movwf	j
loop1b	movlw	d'150'	;** 5 **
	movwf	k
loop2b	decfsz	k,1
	goto loop2b
	decfsz	j,1
	goto	loop1b
	return		;**** fin de pausa 2 **********

comparar		;*** compara igualdad entre num1 y num2**
			;*** si num1=num2 => w=00 sino w=ff
	movf	num1,0
	xorwf	num2,0
	movwf	w2
	btfsc	w2,0
	retlw	h'ff'
	btfsc	w2,1
	retlw	h'ff'
	btfsc	w2,2
	retlw	h'ff'
	btfsc	w2,3
	retlw	h'ff'
	btfsc	w2,4
	retlw	h'ff'
	btfsc	w2,5
	retlw	h'ff'
	btfsc	w2,6
	retlw	h'ff'
	btfsc	w2,7
	retlw	h'ff'
	retlw	00	;****** fin subrutina comparar ***

buzzer	bsf 	pta,2	;****** sonar buzzer *****
	call pausa2
	bcf	pta,2
	return		;****** fin de buzzer ****

leerpt			;**** leer el puerto  *******

	movlw	d'11'	;** preseteo a press en 11 (no press)***
	movwf	press

	movf	ptb,0	;*** si está presionado el 0b => press =1 ***
	movwf	num1
	movlw	d'1'
	movwf	num2
	call	comparar
	movwf	w3
	btfsc	w3,3
	goto	lp2
	movlw	d'1'
	movwf	press

lp2	movf	ptb,0	;*** si está presionado el 1b => press =2 ***
	movwf	num1
	movlw	d'2'
	movwf	num2
	call	comparar
	movwf	w3
	btfsc	w3,3
	goto lp3
	movlw	d'2'
	movwf	press

lp3	movf	ptb,0	;*** si está presionado el 2b => press =3 ***
	movwf	num1
	movlw	d'4'
	movwf	num2
	call	comparar
	movwf	w3
	btfsc	w3,3
	goto lp4
	movlw	d'3'
	movwf	press

lp4	movf	ptb,0	;*** si está presionado el 3b => press =4 ***
	movwf	num1
	movlw	d'8'
	movwf	num2
	call	comparar
	movwf	w3
	btfsc	w3,3
	goto lp5
	movlw	d'4'
	movwf	press

lp5	movf	ptb,0	;*** si está presionado el 4b => press =5 ***
	movwf	num1
	movlw	d'16'
	movwf	num2
	call	comparar
	movwf	w3
	btfsc	w3,3
	goto lp6
	movlw	d'5'
	movwf	press

lp6	movf	ptb,0	;*** si está presionado el 5b => press =6 ***
	movwf	num1
	movlw	d'32'
	movwf	num2
	call	comparar
	movwf	w3
	btfsc	w3,3
	goto lp7
	movlw	d'6'
	movwf	press

lp7	movf	ptb,0	;*** si está presionado el 6b => press =7 ***
	movwf	num1
	movlw	d'64'
	movwf	num2
	call	comparar
	movwf	w3
	btfsc	w3,3
	goto lp8
	movlw	d'7'
	movwf	press

lp8	movf	ptb,0	;*** si está presionado el 7b => press =8 ***
	movwf	num1
	movlw	d'128'
	movwf	num2
	call	comparar
	movwf	w3
	btfsc	w3,3
	goto lp9
	movlw	d'8'
	movwf	press

lp9	movf	pta,0	;*** si está presionado el 0a => press =9 ***
	movwf	num1

	btfss	num1,0
	goto lp10
	movlw	d'9'
	movwf	press

lp10	movf	pta,0	;*** si está presionado el 1b => press =0 ***
	movwf	num1

	btfss	num1,1
	goto lp11
	movlw	d'0'
	movwf	press

lp11

	return		;******* fin subr leer puerto ****

abrir			;********** abrir puerta ***********
	bsf	pta,3
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1

	bcf	pta,3

	return

abrir2			;*********** abrir puerta mas tiempo *****

	bsf	pta,3
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1
	bsf	pta,2
	call pausa1
	bcf	pta,2
	call pausa1

	bcf	pta,3

	return

codigox				;****** retencion de numero erroneo *****

codxb	movlw	b'00000010'
	movwf	pros
	call leerpt
	movf	press,0
	movwf	num1
	movlw	d'11'
	movwf	num2
	call 	comparar
	movwf	w3
	btfsc 	w3,3
	goto 	codxb
	goto	codigo		;**** fin de retencion ***************

	end

Codigo Hex:

:1000000001280130BA000330BB000530BC000930C4
:10001000BD000301FF3066001330650085018601D5
:10002000051A3821B6202608A0000B30A1009E201A
:10003000A800A81D1028B220051A38212608A00003
:100040003A08A1009E20A800A8197B29051A38218A
:10005000B6202608A0003A08A1009E20A800A819F2
:1000600032282628051A3821B6202608A0000B3091
:10007000A1009E20A800A81D3228B220051A382110
:100080003B08A1009E20A800A8191028051A3821B5
:10009000B6202608A0003B08A1009E20A800A819B1
:1000A00052284628051A3821B6202608A0000B3011
:1000B000A1009E20A800A81D5228B220051A3821B0
:1000C0003C08A1009E20A800A8191028051A382174
:1000D000B6202608A0003C08A1009E20A800A81970
:1000E00072286628051A3821B6202608A0000B3091
:1000F000A1009E20A800A81D7228B220051A382150
:100100003D08A1009E20A800A8191028152110283C
:100110000230B9009630B700C830B800B80B8E284E
:10012000B70B8C28B90B8A2808006430B7009630CA
:10013000B800B80B9928B70B9728080020082106AB
:10014000A7002718FF34A718FF342719FF34A71971
:10015000FF34271AFF34A71AFF34271BFF34A71BCD
:10016000FF34003405159520051108000B30A6005A
:100170000608A0000130A1009E20A800A819C228EE
:100180000130A6000608A0000230A1009E20A800B1
:10019000A819CC280230A6000608A0000430A1004F
:1001A0009E20A800A819D6280330A6000608A000A3
:1001B0000830A1009E20A800A819E0280430A6005D
:1001C0000608A0001030A1009E20A800A819EA2867
:1001D0000530A6000608A0002030A1009E20A8003F
:1001E000A819F4280630A6000608A0004030A10097
:1001F0009E20A800A819FE280730A6000608A00027
:100200008030A1009E20A800A81908290830A60067
:100210000508A000201C0E290930A6000508A00032
:10022000A01C14290030A60008008515051588209B
:1002300005118820051588200511882005158820BE
:1002400005118820051588200511882005158820AE
:10025000051188200515882005118820051588209E
:1002600005118820051588200511882085110800B2
:10027000851505158820051188200515882005118C
:10028000882005158820051188200515882005116E
:10029000882005158820051188200515882005115E
:1002A000882005158820051188200515882005114E
:1002B000882005158820051188200515882005113E
:1002C000882005158820051188200515882005112E
:1002D000882005158820051188200515882005111E
:1002E000882005158820051188200515882005110E
:1002F0008820851108000230BF00B6202608A00023
:0E0300000B30A1009E20A800A8197B29102810
:02400E001B0095
:00000001FF

Fuente:  http://www.carcass.4t.com/pics/aplicaciones/cerradura/cerradura.htm

Comentarios (5)

Juan8 julio 2015 at 6:02

En que programa puedo compilarlo ??

pesadillo16 agosto 2015 at 15:30

El programa ya esta compilado, simplemente copia el codigo HEX y genera un fichero de texto con el contenido. Luego utiliza el “quemador” (programador) para pasarlo al pic.

Kevin20 enero 2017 at 0:33

Excelente proyecto, Felicitaciones!

damian30 junio 2018 at 23:08

cuales es la clave del compilado

pesadillo3 marzo 2022 at 22:19

1359 (revisa el apartado “codigo”)

Escribe un comentario

Tu comentario