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
Tuitear 15.088 Veces leído 5 comentarios |
23 julio 2010 en Electronica | tags: Electronica |
En que programa puedo compilarlo ??
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.
Excelente proyecto, Felicitaciones!
cuales es la clave del compilado
1359 (revisa el apartado “codigo”)