iluminacion para vidrieras

Anuncio
Emiliano Teseo y José Luis Fernández
Proyecto: ILUMINACION PARA VIDRIERAS
Carrera: “Técnico Superior en Técnicas Digitales”
Instituto: CENT 57
Trabajo final – Año 2005
Alumnos: Emiliano Teseo y José Luis Fernández
Proyecto: ILUMINACION PARA VIDRIERAS
1
Emiliano Teseo y José Luis Fernández
Proyecto: ILUMINACION PARA VIDRIERAS
ILUMINACION PARA VIDRIERAS
q
Descripción general (Guía para el usuario)
Se desea controlar el periodo de tiempo en que la luz de una vidriera debe
permanecer encendida, en el cual el usuario es el que programa el tiempo que
desea que permanezca encendida.
El circuito consta de 3 displays, el 1ero señala la hora y los otros 2 los minutos.
Se puede configurar desde un mínimo de 10 minutos, hasta un máximo de 9
horas y 50 minutos.
La programación del tiempo se realiza mediante los pulsadores que se
encuentran en el panel de control del circuito (fácil y sencillo para el usuario).
El pulsador H incrementa la hora, el M los minutos y por ultimo el pulsador ON
/OFF enciende o apaga las luces de las vidrieras.
Una vez obtenida la hora deseada empieza a decrementar el contador hasta
llegar a 0:00 donde se apagan las luces.
Si durante el proceso en donde el sistema esta decrementando la hora se desea
parar el conteo, basta con presionar el botón ON/OFF y así podrá cambiar la hora
de programación si es que lo desea. Si no pulsando devuelta este botón
comenzara el conteo desde el estado que quedo antes de que pare el sistema.
q
Descripción del funcionamiento
Este circuito posee 3 display los cuales 1 mostrara la hora y los otros 2 los
minutos en el cual el de la unida estará siempre en cero.
Otros 3 pulsadores se utilizaran para:
1- modificar hora (H)
2- modificar minutos (M)
3- marcha/parada del conteo (ON/OFF)
El timer esta programado para que el programa genere una interrupción cada
10ms. Por medio de este incrementamos un contador hasta llegar al segundo, así
incrementar otro hasta llegar al minuto, para luego llegar a los 10 minutos y
comenzar el decremento.
Durante el multiplexado de los displays se genera una subrutina en donde el
programa verifica si se pulso algunos de los botones de hora o minutos. Si es así
se incrementa la memoria 1.(hora) o memoria 2.(minutos).
Mediante un FLAG podemos saber si algunos de los botones siguen presionados,
cuando uno de estos se deje de presionar podemos seguir incrementando la
hora.
Esta subrutina provoca un retardo aparte de el cual tenemos hecho, lo que actúa
2
Emiliano Teseo y José Luis Fernández
Proyecto: ILUMINACION PARA VIDRIERAS
como antirrebote al pulsar los distintos botones sin necesidad de agregar ningún
elemento físico para generarlo.
Al presionar el botón de ON/OFF para comenzar el decremento de la hora este
activara el relé L1 en donde estarán conectadas las luces de la vidrieras que las
encenderá. Destacamos también que con este botón se puede parar el conteo en
cualquier momento.
Cuando la hora llegue a 0:00, se desactivara el relé (L1) lo que provocara que las
luces se apaguen.
q
Circuito
3
Emiliano Teseo y José Luis Fernández
q
Proyecto: ILUMINACION PARA VIDRIERAS
PROGRAMACION DEL PIC
;--------------------------------------------------------------------; -Iluminacion para vidrieras; Version 1, 05/09/2005
; Finalizado: 20/09/2005
; XTAL 4 MHZ ; T CICLO=1 uS
; Alumnos: TESEI Emiliano - FERNANDEZ Jose Luis
; Utiliza dos displays multiplexados: hora y 10 minutos. El tercer display
; debera mostrar siempre un 0.
; Segmentos en RB0 a RB6
; Catodos en RA0 y RA1
; Salida al RELE en RB7
; Tres pulsadores para cambio de hora, minutos (saltos de a 10)
; y prendido/apagado.
; P1: cambio de hora en RA2
; P2: cambio de min en RA3
; P3: On/Off en RA4
;
; =funciona ok = 20/09/2005=
;--------------------------------------------------------------------#include "p16f84a.inc"
LIST p=16F84A, R=DEC
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;---------VARIABLES------------MEM1
EQU
12
MEM2
EQU
13
cont1
EQU
14
cont2
EQU
15
cont3
EQU
16
FLAG
EQU
17
_w_temp
EQU
18
_status_temp EQU
19
CONTMS
EQU
20
CONTSEG
EQU
21
CONTMIN
EQU
22
FLAG2
EQU
23
; -------ANTE UN RESET----ORG
0
GOTO
PROG
; --------CON UNA INT----------; (C/10mS)
;------------------------------ORG
4
;SALVAR REGISTROS
movwf _w_temp
swapf STATUS,w
movwf _status_temp
;PREPARO EL TIMER PARA LA PROXIMA INTERRUPCION:
MOVLW
.216
; CARGA DEL TIMER 0
4
Emiliano Teseo y José Luis Fernández
MOVWF
BCF
TMR0
INTCON,2
Proyecto: ILUMINACION PARA VIDRIERAS
;PERMITO OTRA INTERRUPCION DE TIMER
;INCREMENTO CONTADORES DE MINUTOS...SEGUNDOS...ETC
INCF
CONTMS,F
; HASTA 100 (1SEG)
MOVLW
.99
; (de 0 a 99)
SUBWF
CONTMS,W
;LLEGO A 100?
BTFSS
STATUS,Z
GOTO
FININT
; NO, CHAU
CLRF
CONTMS
INCF
CONTSEG,F
;OTRO SEGUNDO...
MOVLW
.59
; (de 0 a 59)
SUBWF
CONTSEG,W
;LLEGO A 60?
BTFSS
STATUS,Z
GOTO
FININT
; NO, CHAU
CLRF
CONTSEG
INCF
CONTMIN,F
;OTRO MINUTO...
MOVLW
.10
SUBWF
CONTMIN,W
;LLEGO A 10?
BTFSS
STATUS,Z
GOTO
FININT
; NO, CHAU
;SE CUMPLIERON 10 MINUTOS...
;ESTA APAGADO?
BTFSS
FLAG2,7
GOTO
FININT
; si, entonces NO DECREMENTO EL DISPLAY
;DECREMENTO DISPLAYS
DECF
MEM2,F
;(DE 5-4...0-5...)
;SI MEM2=0XFF (-1), TENGO QUE LLEVARLO A 5:
MOVLW
0XFF
SUBWF
MEM2,W
;ES 0XFF?
BTFSS
STATUS,Z
GOTO
OTRO_DISP
;NO => SE FUE A 0:00 ????
;MIN=5 Y DECREMENTO LA HORA:
MOVLW
5
MOVWF
MEM2
DECF
MEM1,F
;(NUNCA VALDRA MENOS DE 0 PORQUE SE TESTEA ANTES)
OTRO_DISP
;SI VALE 0:00 TERMINO...(APAGO EL RELE)
MOVF
MEM1,W
IORWF
MEM2,W
BTFSC
STATUS,Z
BCF
FLAG2,7
; APAGO RELE - VALEN 0 LOS 2 (HR Y MIN)
FININT
;RECUPERAR REGISTROS
swapf _status_temp,w
movwf STATUS
swapf _w_temp,f
swapf _w_temp,w
RETFIE
;=============== PROGRAMA PRINCIPAL===============
PROG
5
Emiliano Teseo y José Luis Fernández
BSF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
MOVLW
MOVWF
Proyecto: ILUMINACION PARA VIDRIERAS
STATUS,RP0
B'00000000' ;RB0:6-> DISPLAYS ; RB7-> rele
TRISB
B'00011100'
; RA0 y RA1 -> KATODOS; R42,3,4 PULSADORES
TRISA
B'11010111'
;TIMER0 Y PRESCALER % 256
OPTION_REG
B'10100000'
;INTERRUPCIONES PARA EL TIMER0 C/10mS
INTCON
STATUS,RP0
.216
; CARGA DEL TIMER 0
TMR0
;---inicializo variables--------movlw 1
movwf MEM1
;HORA
movlw 3
movwf MEM2
;MINUTOS (DECENA)
BCF
PORTB,7
;apagar rele
clrf
FLAG
clrf
FLAG2
;--------------------------------iloop CALL
LEETECLAS
BSF
MOVF
CALL
IORWF
MOVWF
BCF
CALL
PORTA,1
MEM1,W
TABLA
FLAG2,W
PORTB
PORTA,0
RETARDO5MS
;APAGO DISPLAY 2
BSF
MOVF
CALL
IORWF
MOVWF
BCF
CALL
PORTA,0
MEM2,W
TABLA
FLAG2,W
PORTB
PORTA,1
RETARDO5MS
;APAGO DISPLAY 1
goto
iloop
;SUMO EL BIT 7(ON/OFF) Y EL DISPLAY
;PRENDO DISPLAY 1
;SUMO EL BIT 7(ON/OFF) Y EL DISPLAY
;PRENDO DISPLAY 2
;--------------------------------; TARDARA DE 8 A 15 CICLOS
;
LEETECLAS
BTFSS
FLAG,0
GOTO
TESTBOT
BTFSC
PORTA,2
;hora pulsado?
GOTO
FINTST
;si
BTFSC
PORTA,3
;min pulsado?
GOTO
FINTST
;si
BTFSC
PORTA,4
;PRENDO/APAGO pulsado?
GOTO
FINTST
;si
BCF
FLAG,0
;si,borro el flag.
FINTST RETURN
6
Emiliano Teseo y José Luis Fernández
TESTBOT BTFSC
GOTO
BTFSC
GOTO
BTFSC
GOTO
RETURN
PORTA,2
HORPULS
PORTA,3
MINPULS
PORTA,4
ONOFFPULS
HORPULS INCF
MOVLW
SUBWF
BTFSC
CLRF
GOTO
MEM1,F
.10
MEM1,W
STATUS,Z
MEM1
FINTST2
Proyecto: ILUMINACION PARA VIDRIERAS
MINPULS INCF
MEM2,F
MOVLW
.6
SUBWF
MEM2,W
BTFSC
STATUS,Z
CLRF
MEM2
GOTO
FINTST2
ONOFFPULS
;INVIERTO EL RELE (ON->OFF y OFF->ON)
movlw B'10000000'
xorwf FLAG2,f
;invierto flag indicador del rele (bit 7)
;RESETEO CONTADORES:
CLRF
CONTMS
CLRF
CONTSEG
CLRF
CONTMIN
FINTST2 BSF
FLAG,0
;indica el valor del pulsador
RETURN
;--------------------------------TABLA ADDWF PCL,F
RETLW B'00111111'
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111101'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01100111'
;--------------------------------RETARDO5MS
loop3 movlw .1
;
movwf cont2
;
loop2 movlw .200
;1
movwf cont1
;1
loop1 decfsz cont1,f
;1\ * 255=765 CICLOS (767uS)
goto
loop1
;2/
decfsz cont2,f
;1 FIN BUCLE 2?
goto
loop2
; NO
return
;--------------------------------end
7
Descargar