Sistema de Caja Fuerte
-
Upload
verito-ochoa -
Category
Documents
-
view
111 -
download
7
Transcript of Sistema de Caja Fuerte
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL
FIEC
Laboratorio de MicroControladores
Proyecto del Primer Parcial
Sistema de Seguridad Caja Fuerte
Integrante:
Brian Laaz Ochoa
Paralelo: # 7
2014 – I TÉRMINO
1. ENUNCIADO DEL PROYECTO
SISTEMA DE SEGURIDAD CAJA FUERTESe tendrá un sistema de seguridad de una caja fuerte, en donde se requiere un controlador para el ingreso y comprobación de la clave de 4 dígitos que abrirá el cerrojo, la clave correcta se encontrara almacenada en una variable dentro del programa. El usuario podrá tener como máximo 3 errores, es decir:Error #1 Encenderá el primer LEDError #2 Encenderá el segundo LEDError #3 Parpadearan los tres LEDs durante a una frecuencia de 60Hz indicando un tipo de alerta, además se encenderá un speaker emitirá un sonido de alarma, el pic se mantendrá en este estado hasta realizar un reinicio del mismo.
Se tendrán 4 DISPLAY (Usar técnica de Multiplexacion para ahorrar pines) para mostrar los números que vaya ingresando el usuario, la forma de ingresar los números será la siguiente debajo de cada display deberá haber un pulsador el cual mediante él envía de un alto incremente el valor en el respectivo display al final para comprobar si la clave es correcta se adicionara un switch para indicar que debe proceder hacer la comparación del valor ingresado por el usuario y el q está dentro de una.
2. DIAGRAMA DE BLOQUES
3. DIAGRAMA DE FULO FUNCIONAL DEL PROGRAMA PRINCIPAL
INTERRUPCIONES
4. DESCRIPCION DEL ALGORITMO O ESTRATEGIA UTILIZADA
PROGRAMA PRINCIPAL
1. Se realiza un seteo de los puertos
2. Se inicializa las variables
3. Se presionan los pulsadores para el ingreso de la clave, la cual está configurada
en el PORTA.
4. Se presiona la tecla de comprobar para verificar si la clave ingresada es
correcta
5. Si es correcta vuelve al inicio del programa, caso contrario al primer error se
enciende uno de los tres led´s que lo hemos configurado en el PORTD.
6. Al tercer error se encenderá los tres leds y adicional una alarma, y volverá al
estado inicial si se presiona el botón reset
INTERRUPCION
1. Se mueven los numero1 y numero 2 a w
2. Manda a llamar a la tabla
3. Retorna el codigo de 7 segmentos
4. Se muestran en el puerto b
5. Se mueven numero3 y numero 4 a w
6. Manda a llamat a la tabla
7. Retorna el codigo de 7 segmentos
8. Se muestran en el puerto c
9. Borra las banderas
5. LISTADO DEL PROGRAMA FUENTE EN LENGUAJE ENSAMBLADOR CON COMENTARIOS
;**********************************************************; NOMBRE: caja fuerte.asm; FECHA: 26/06/2014; VERSION: 1.00; PROGRAMADOR: Brian Laaz;**********************************************************;DIRECTIVAS
LIST p=16F887 ;Tipo de microcontroladorINCLUDE P16F887.INC ;Define los SFRs y bits del
;P16F887
__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_XT_OSC;Setea parámetros de ;configuración
errorlevel -302 ;Deshabilita mensajes de ;advertencia por cambio bancos
CBLOCK0X020contador ;Cuenta 100 interrupcionesuni_coddec_codselnum1num2num3num4c1c2c3c4con1con2con3cont1cont2cont3ENDC
;**********************************************************
;PROGRAMAORG 0x00 ;Vector de RESETGOTO MAINORG 0x04 ;Vector de interrupciónGOTO Interrupcion ;Va a rutina de interrupción
;DURANTE LA INTERRUPCION SE CUENTAN 100 INTERRUPCIONES;PARA COMPLETAR 10x100=1000ms. Interrupcion
movf sel,w ;Se mueve a si mismo para afectar banderabtfss STATUS,2 ;sel=0 refresca dig1; sel=1 refresca dig2goto dig2
dig1 movf num2,w call tablamovwf uni_codmovf uni_cod,wbsf PORTA,0bsf PORTA,1movwf PORTBmovf num4,w call tablamovwf uni_codmovf uni_cod,wmovwf PORTCbcf PORTA,0comf sel,fgoto Seguir
dig2movf num1,w call tablamovwf dec_codmovf dec_cod,wbsf PORTA,0bsf PORTA,1movwf PORTBmovf num3,w call tablamovwf dec_codmovf dec_cod,wmovwf PORTCbcf PORTA,1
comf sel,f
Seguir bcf INTCON,T0IF ;Repone flag del TMR0 movlw ~.39
movwf TMR0 ;Repone el TMR0 con ~.39 retfie ;Retorno de interrupción
MAIN;SETEO DE PUERTOS
BANKSEL ANSEL ;Selecciona el Bank3CLRF ANSELCLRF ANSELHBANKSEL TRISA ;Selecciona el Bank1MOVLW b'00111100'MOVWF TRISA ;PORTA configurado como salidaCLRF TRISB ;PORTB configurado como salidaCLRF TRISCclrf TRISDmovlw b'11111111'movwf TRISE
;INICIALIZACION BANKSEL PORTA ;Selecciona el Bank0CLRF PORTA ;Borra latch de salida de PORTBCLRF PORTB ;Borra latch de salida de PORTCclrf PORTCclrf PORTEclrf PORTDclrf selmovlw b'00000000'movwf num1movwf num2movwf num3movwf num4movlw .1movwf c1movlw .2movwf c2movlw .3movwf c3movlw .4
movwf c4
;PROGRAMACION DEL TMR0banksel OPTION_REG ;Selecciona el Bank1movlw b'00000111' ;TMR0 como temporizadormovwf OPTION_REG ;con preescaler de 256 BANKSEL TMR0 ;Selecciona el Bank0movlw .217 ;Valor decimal 217movwf TMR0 ;Carga el TMR0 con 217
;PROGRAMACION DE INTERRUPCIONmovlw b'10100000'movwf INTCON ;Activa la interrupción del TMR0movlw .100 ;Cantidad de interrupciones a contarmovwf contador ;Nº de veces a repetir la interrupción
Loopnopbtfsc PORTA,2GOTO digito1btfsc PORTA,3GOTO digito2btfsc PORTA,4GOTO digito3Btfsc PORTA,5GOTO digito4Btfsc PORTE,0GOTO COMPROBARgoto Loop
digito1incf num1movlw .10subwf num1,wbtfsc STATUS,Zclrf num1call retardcall retardgoto Loop
digito2incf num2
movlw .10subwf num2,wbtfsc STATUS,Zclrf num2call retardcall retardgoto Loop
digito3incf num3movlw .10subwf num3,wbtfsc STATUS,Zclrf num3call retardcall retardgoto Loop
digito4incf num4movlw .10subwf num4,wbtfsc STATUS,Zclrf num4call retardcall retardgoto Loop
COMPROBAR
movf c1,W subwf num1,W btfsc STATUS,Z
goto soniguales1goto fail
soniguales1 movf c2,W subwf num2,W btfsc STATUS,Z
goto soniguales2goto fail
soniguales2 movf c3,W subwf num3,W btfsc STATUS,Z
goto soniguales3goto fail
soniguales3 movf c4,W subwf num4,W btfsc STATUS,Z
goto abiertogoto failgoto retorno
abiertobsf PORTD,3call retardcall retardcall retardgoto retorno
failbsf STATUS,0rlf PORTDcall retardcall retard
call retardbtfsc PORTD,2goto fallagoto Loop
fallaclrf PORTDcall retardobsf PORTD,0bsf PORTD,1bsf PORTD,2bsf PORTD,3call retardoclrf PORTD
call retardobsf PORTD,0bsf PORTD,1bsf PORTD,2bsf PORTD,3call retardoclrf PORTDcall retardobsf PORTD,0bsf PORTD,1bsf PORTD,2bsf PORTD,3call retardoclrf PORTDcall retardobsf PORTD,0bsf PORTD,1bsf PORTD,2bsf PORTD,3call retardoclrf PORTDcall retardobsf PORTD,0bsf PORTD,1bsf PORTD,2bsf PORTD,3call retardoclrf PORTDcall retardobsf PORTD,0bsf PORTD,1bsf PORTD,2bsf PORTD,3call retardogoto falla
retorno goto MAIN; TABLA DE CONVERSION---------------------------------------------------------
tabla ADDWF PCL,F ; PCL + W -> PCL
; El PCL se incrementa con el ; valor de W proporcionando un ; salto
RETLW 0x3F ; Retorna con el código del 0RETLW 0x06 ; Retorna con el código del 1RETLW 0x5B ; Retorna con el código del 2RETLW 0x4F ; Retorna con el código del 3RETLW 0x66 ; Retorna con el código del 4RETLW 0x6D ; Retorna con el código del 5RETLW 0x7D ; Retorna con el código del 6RETLW 0x07 ; Retorna con el código del 7RETLW 0x7F ; Retorna con el código del 8RETLW 0x67 ; Retorna con el código del 9
retard clrf con1 clrf con2 MOVLW .2 MOVWF con3reta2 decfsz con1 ; Decrements "counter1" by 1. If result is 0 goto reta2 ; skip next instruction decfsz con2 ; Decrements "counter2" by 1. If result is 0 goto reta2 ; skip next instruction decfsz con3 ; Decrements "counter2" by 1. If result is 0 goto reta2 ; skip next instruction
return
retardo clrf cont1
movlw .28 movwf cont2
reta1 decfsz cont1 ; Decrements "counter1" by 1. If result is 0 goto reta1 ; skip next instruction decfsz cont2 ; Decrements "counter2" by 1. If result is 0 goto reta1 ; skip next instruction
return
END
6. SIMULACION DEL CIRCUITO ARMADO EN PROTEUS
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U1
PIC16F887
R1
330R2
330R3
330R4
330R5
330R6
330R7
330
T2
12
1 2
a1b1c1d1e1f1g1
a1 b1 c1 d1 e1 f1 g1a2 b2 c2 d2 e2 f2 g2
a2b2c2d2e2f2g2
R10
330R11
330R12
330R13
330R14
330R15
330R16
330
1 2
T1
T3T4
R8
10k
T4R9
10k
T3R17
10k
T2R18
10k
T1
L1L2L3
D1LED-GREEN
D2LED-YELLOW
D3LED-RED
L1 L2 L3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R1910k
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U1
PIC16F887
R1
330R2
330R3
330R4
330R5
330R6
330R7
330
T2
12
1 2
a1b1c1d1e1f1g1
a1 b1 c1 d1 e1 f1 g1a2 b2 c2 d2 e2 f2 g2
a2b2c2d2e2f2g2
R10
330R11
330R12
330R13
330R14
330R15
330R16
330
1 2
T1
T3T4
R8
10k
T4R9
10k
T3R17
10k
T2R18
10k
T1
L1L2L3
D1LED-GREEN
D2LED-YELLOW
D3LED-RED
L1 L2 L3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R1910k
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U1
PIC16F887
R1
330R2
330R3
330R4
330R5
330R6
330R7
330
T2
12
1 2
a1b1c1d1e1f1g1
a1 b1 c1 d1 e1 f1 g1a2 b2 c2 d2 e2 f2 g2
a2b2c2d2e2f2g2
R10
330R11
330R12
330R13
330R14
330R15
330R16
330
1 2
T1
T3T4
R8
10k
T4R9
10k
T3R17
10k
T2R18
10k
T1
L1L2L3
D1LED-GREEN
D2LED-YELLOW
D3LED-RED
L1 L2 L3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R1910k
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U1
PIC16F887
R1
330R2
330R3
330R4
330R5
330R6
330R7
330
T2
12
1 2
a1b1c1d1e1f1g1
a1 b1 c1 d1 e1 f1 g1a2 b2 c2 d2 e2 f2 g2
a2b2c2d2e2f2g2
R10
330R11
330R12
330R13
330R14
330R15
330R16
330
1 2
T1
T3T4
R8
10k
T4R9
10k
T3R17
10k
T2R18
10k
T1
L1L2L3
D1LED-GREEN
D2LED-YELLOW
D3LED-RED
L1 L2 L3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R1910k
RE3/MCLR/VPP1
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RB0/AN12/INT33
RB1/AN10/C12IN3-34
RB2/AN835
RA7/OSC1/CLKIN13
RA6/OSC2/CLKOUT14
RD5/P1B28
RD6/P1C29
RD7/P1D30
RC4/SDI/SDA23
RC5/SDO24
RC3/SCK/SCL18
RC2/P1A/CCP117
RC1/T1OSI/CCP216
RC0/T1OSO/T1CKI15
RB7/ICSPDAT40
RB6/ICSPCLK39
RB5/AN13/T1G38
RB4/AN1137
RD322
RD221
RD120
RD019
RC7/RX/DT26
RC6/TX/CK25
RE2/AN710
RE1/AN69
RE0/AN58
RA3/AN3/VREF+/C1IN+5
RD427
RB3/AN9/PGM/C12IN2-36
RA0/AN0/ULPWU/C12IN0-2
U1
PIC16F887
R1
330R2
330R3
330R4
330R5
330R6
330R7
330
T2
12
1 2
a1b1c1d1e1f1g1
a1 b1 c1 d1 e1 f1 g1a2 b2 c2 d2 e2 f2 g2
a2b2c2d2e2f2g2
R10
330R11
330R12
330R13
330R14
330R15
330R16
330
1 2
T1
T3T4
R8
10k
T4R9
10k
T3R17
10k
T2R18
10k
T1
L1L2L3
D1LED-GREEN
D2LED-YELLOW
D3LED-RED
L1 L2 L3
R23
10k
PROBAR
PROBAR
LS1
SPEAKER
R1910k
7. CONCLUSIONES En este proyecto aprendimos el importante uso de los contadores,
programándolos para el PIC 16F887, lo que es básico en cuestiones de desarrollo de cualquier otro proyecto que necesite llevar algún tipo de conteo a determinada frecuencia, además aplicamos la técnica usada para darle el tiempo de retardo de conteo deseado, haciendo posible el control del mismo
El timer0 puede funcionar como temporizador o como contador. En modo temporizador el valor del registro TMR0 se incrementa con cada ciclo de instrucción. En modo contador el valor del registro TMR0 se incrementa en cada flanco. En ambos casos al desbordarse (pasar de FFh a 00h) el registro TMR0 la bandera de interrupción del timer 0 (bit T0IF del registro INTCON) se pone en 1.
La frecuencia trabajada en los leds no fue la de 60hz ya que a dicha frecuencia no se observaba con claridad el parpadeo de los leds se trabajo a frecuencia mayor
8. RECOMENDACIONES
Se recomienda utilizar varias subrutinas dentro de un programa para
facilitar la resolución del problema. Como se observó en el proyecto, las
rutinas de tablas nos ayudaron a obtener el código que representaría las
unidades y las decenas de los segundos de nuestro cronometro para
atletismo y así se pudo resolver el problema de manera efectiva y
estructurada
Se debe revisar los mensajes y advertencias que se obtienen luego de que
se realiza la compilación del programa en el MPLAB, aunque en ciertas
ocasiones la compilación termina satisfactoriamente hay que tener en
cuenta lo que dicen estos mensajes para prevenir errores.
Utilizar el software conocido como Microsoft Visio para realizar los
diagramas de flujo correcto de nuestro proyecto ya que de esta manera
podemos comprender como es su funcionamiento.
Familiarizarnos con los Datasheet de los microcontroladores. Nos sirve de
mucho ya que cada uno de ellos contiene información valiosa de cómo usar
los microcontroladores y bajo que parámetros puede trabajar.