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