Autor Tema: efecto de luces desvanecente  (Leído 1978 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ceneca

  • PIC16
  • ***
  • Mensajes: 105
efecto de luces desvanecente
« en: 24 de Octubre de 2010, 11:18:31 »
hola a todos , debido a mi nula experiencia (cero) , es que recurro al foro para ver si me dan una mano.
Primero les cuento el proyecto, el proyecto original es este:

con un 555 y 4017 y triac a la salida

o sea la idea es mediante un pote comandar el tiempo de la secuencia mas o menos de 1 a 10 seg, con el siguiente efecto : al encender , prende la primera lampara a máximo brillo , luego esta comienza a apagarse lentamente mientras comienza a encenderse la segunda aumentando su brillo hasta el máximo mientras que la primera decrece hasta apagarse , o sea mientras uno enciende el otro se apaga en forma desvanecente( en el medio se cruzan a la misma intensidad ), con el cto adjunto logro ese efecto en continua pero no lo logro en alterna, como bien me explico el amigo martincnc, entendí el porque y finalmente me he replanteado el proyecto de la siguiente manera:

utilizar un 12f675 o un 12 f629, dos triac BT137 para la salida y obviamente el código necesario, y ahí esta mi problema no se como arrancar , he estado leyendo  ,pero como es cero mi conocimiento no logro arrancar , encontré aquí en el foro  este hilo
dimmer

que mas o menos es lo que yo quiero , pero no igual.
Código: [Seleccionar]
LIST   P=16f628
   INCLUDE   "P16f628.inc"
   ERRORLEVEL    -302
   __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF  & _LVP_OFF & _XT_OSC

   CBLOCK   0x20
VAR01         ;equ 0x20   variable a modificar para poder variar el brillo de las lamparas
VAR02         ;equ 0x21
VAR03         ;equ 0x22
VAR04         ;equ 0x23
VAR05         ;equ 0x24   Bandera que indica al codigo que se a producido el zero cross
VAR06         ;equ 0x25
   ENDC

   org   0x00      ;inicio de programa y direccion de interrupcion
   goto   Inicio
   org   0x04
   goto   Inter
   org   0x05
Inter
   bcf   PORTA,0      ;desactivamos el triac PORTA,1
   movlw   b'00010000'
   movwf   INTCON
   bsf   VAR05,0      ;Se levanta la bandera zero cross
   retfie
Inicio
   org   0x20
   bsf    STATUS,RP0      ;Banco 01
   bsf   OPTION_REG,INTEDG   ;Configurar la INT. flanco de bajada de la INT
   movlw   b'11111111'
   movwf   TRISB      ;El Puerto B como entrada
   clrf   TRISA      ;El Puerto A como salida
   bcf    STATUS,RP0      ;Banco 00
   clrf   PORTA      ;Limpiamos el Puerto
   bsf   INTCON,INTE      ;Activamos la interrupcon INT externa
programa
   nop
   bcf   INTCON,INTF      ;bajamos la bandera señalizadora de INT_EXT
program
   btfss   INTCON,INTF      ;para sincronizar con el pic al iniciar el programa
   goto   program
   bcf   INTCON,INTF      ;bandera señalizadora de INT_EXT
progra1   
   call    Ret_ZC
disparo
   bsf   INTCON,GIE      ;permiso global de interrupciones
   bsf    PORTA,0      ;Disparo del triac, hasta que se produsca un cruce por zero
Zero_cross   btfss   VAR05,0      ;Espera la bandera de zero cross
   goto   Zero_cross
   bcf   VAR05,0      ;bajamos la bandera señalisadora de zero cross
   goto   progra1
;-----------------------------------------------
;la interrupcion lo tomo como flancos de subida INTE.
;El tiempo de la interrupcion del cruze por cero es de 8.31ms
;de disparo del triac varie desde el 0% hasta el 100%..idealmente pero nunca llegara al 100% ya que  tenemos un retrazo de
;1ms porque el ancho de pulso del cruce por cero es de 0.9ms, y como ahora si estamos usando la interupcion..es necesario
;-----------------------------------------------
Ret_ZC            ; retardo de aproximadamente 1ms, periodo del ancho de pulso del cruce por cero
   movlw    0x0B
   movwf    VAR01
salt
   call    usg25
   decfsz    VAR01,F
   goto   salt
   goto   Ang_Disp
usg25
   movlw    0x96      ;retardo de 91.4 us
   movwf    VAR02
sal4
   decfsz    VAR02,F
   goto    sal4
   return
Ang_Disp   
   movf   PORTB,W
   movwf   VAR06
   rrf   VAR06,F      ;corrige la falta del pin RB0
   bcf   STATUS,Z      ;ponemos en cero bit "Z"
   movf   VAR06,W      ;comprueba si RB1 a RB7 = 0x00
   xorlw   0x00
   btfsc   STATUS,Z
   return         ;si es = 0x00 retorna al disparo del triac, este es el mayor punto de iluminacion de la bonbilla
   movf    VAR06,W
   movwf    VAR03
salte
   call    usg72
   decfsz    VAR03,F
   goto   salte
   return
usg72
   movlw    0x78      ;retardo de 72.2 us
   movwf    VAR04
sal5
   decfsz    VAR04,F
   goto    sal5
   return

   END

Como para mi pic y códigos es chino básico, recurro al foro a ver si me tiran una soga, ya que no se por donde empezar.
como mi intención es aprender estoy leyendo un curso de pic y mirando el foro, así que en eso estoy, pero el problema es que no se por donde comenzar.

si me pueden ayudar se los agradeceré.

saludos
El sabio no dice todo lo que piensa, pero siempre piensa todo lo que dice. ARISTOTELES

Desconectado martincnc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 352
Re: efecto de luces desvanecente
« Respuesta #1 en: 25 de Octubre de 2010, 17:04:39 »
Hola ceneca. Disculpa mi ausencia, recién termino de rendir un parcial en la facu  :? , pero a partir de ahora tengo algunos días libres.

Con respecto al programa, voy a tratar de tener novedades para esta noche.

Saludos!
« Última modificación: 25 de Octubre de 2010, 18:06:38 por martincnc »

Desconectado ceneca

  • PIC16
  • ***
  • Mensajes: 105
Re: efecto de luces desvanecente
« Respuesta #2 en: 08 de Noviembre de 2010, 10:14:22 »
hOLA!!!!, de nuevo acá quiero mostrarles hasta donde estamos con esto.
Por ahí alguien puede ayudar, como explique arriba, el efecto es el siguiente, el circuito debe encender dos lamparas de 220 volt, de manera intermitente o sea primero una y luego la otra pero con el siguiente efecto, una de las dos se ira encendiendo primero de manera paulatina (como si se subiera la intensidad con un dimmer, alcanzar el máximo brillo  mantenerse encendida  15 segundos a máximo brillo y comenzar a apagarse, mientras se va encendiendo la segunda, hasta su máximo brillo , mantenerse 15 segundos y repetir el efecto,
los 15 segundos son fijos pero el tiempo de la secuencia se debe poder regular con un pot o sea que desde cero luz a máximo brillo se regule de 5 seg a 1 min, por ejemplo.

AHORA  quiero decir que he contado con la ayuda de un compañero del foro, MARTIN CNC, quien me ha dado una gran mano, con un empeño que me ha dejado sin palabras, como dije soy un total inexperto en pic, y quisiera compartir lo que hasta aquí tengo, la causa de este circuito es personal y no comercial , y funcionado estara a disposicion de todos .
agradecería toda ayuda posible pidiendo disculpas a todos ya que nunca he pedido que me resuelvan nada, pero aquí necesito de su ayuda ya que no tengo los conocimientos como para resolverlo , toda ayuda, sugerencia, links, paginas o lo que me puedan aportar se los voy a agradecer.

Este es el código que tengo, es una primera versión en donde con el pote debería ir seleccionando una u otra lampara y esta debería realizar el efecto, Hasta aquí no he conseguido nada ni que parpadee, este es

Código: [Seleccionar]
********************************************************************************************
; Generador de angulo de disparo de triacs con PIC12F675 - MARTINCNC
;********************************************************************************************


list p=12f675

#include "p12f675.inc"

radix hex

__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

bandera equ 0x20 ;registro de interrupciones
contador equ 0x21 ;contador de interrupciones de TMR0
periodo equ 0x22 ;contador de interrupciones de TMR0
estado equ 0x23 ;registro division de periodo

posicion_1 equ 0x28 ;registro de posicion de salida 1
posicion_2 equ 0x29 ;registro de posicion de salida 2

adc_temp equ 0x2C ;registro de byte alto de adc
auxiliar_temp equ 0x2E ;registro de proposito general

w_temp equ 0x2F ;copia de respaldo de W
status_temp equ 0x30 ;copia de respaldo de STATUS

;********************************************************************************************

org 0x00
goto _inicio
org 0x04
goto _interrupcion

;********************************************************************************************

_tabla

addwf PCL, 1

retlw 0x01 ;d'1'
retlw 0x02 ;d'2'
retlw 0x03 ;d'3'
retlw 0x04 ;d'4'
retlw 0x05 ;d'5'
retlw 0x06 ;d'6'
retlw 0x07 ;d'7'
retlw 0x08 ;d'8'
retlw 0x09 ;d'9'
retlw 0x0A ;d'10'
retlw 0x0B ;d'11'
retlw 0x0C ;d'12'
retlw 0x0D ;d'13'
retlw 0x0E ;d'14'
retlw 0x0F ;d'15'
retlw 0x10 ;d'16'
retlw 0x11 ;d'17'
retlw 0x12 ;d'18'
retlw 0x13 ;d'19'
retlw 0x14 ;d'20'
retlw 0x15 ;d'21'
retlw 0x16 ;d'22'
retlw 0x17 ;d'23'
retlw 0x18 ;d'24'
retlw 0x19 ;d'25'
retlw 0x1A ;d'26'
retlw 0x1B ;d'27'
retlw 0x1C ;d'28'
retlw 0x1D ;d'29'
retlw 0x1E ;d'30'
retlw 0x1F ;d'31'
retlw 0x20 ;d'32'

;********************************************************************************************

_interrupcion ;vector de interrupciones

movwf w_temp

movf STATUS, 0
movwf status_temp ;respaldo de W y registro STATUS

movlw 0xFF
movwf TMR0

btfsc INTCON, T0IF
call _tmr0int

btfsc PIR1, CMIF
call _changeint

; btfsc PIR1, ADIF
; call _adcint

movf status_temp, 0
movwf STATUS

movf w_temp, 0
retfie

_tmr0int

bcf INTCON, T0IF

incfsz contador, 1
nop ;seguridad contra desbordamiento de contador (FREC < 30Hz)

return

_changeint

clrf GPIO

bcf INTCON, GPIF
bsf bandera, GPIF

return

;_adcint

; bcf PIR1, ADIF
; bsf bandera, ADIF

; return

;********************************************************************************************

_inicio ;inicio del programa

bcf STATUS,RP0 ;banco 0

clrf GPIO ;inicializacion de puerto GPIO
clrf INTCON ;inicializacion de configuracion de interrupciones
clrf PIR1 ;inicializacion de banderas deinterrupciones perifericas
clrf T1CON ;desactivo interrupciones por TMR1
clrf ADCON0 ;desactivo conversiones adc; entrada AN0 <3:2>; VREF=VDD <6>
movlw b'00000111'
movwf CMCON ;desactivo comparadores analogicos, entradas digitales

bsf STATUS, RP0 ;banco 1

movlw b'00100001' ;FOSC=1/32 (1,6 us @ 20 MHz) <6:4>; GP0 entrada adc ANSEL<0>
movwf ANSEL

movlw b'00001000' ;activo la interrupcion por cambio de estado en GP3, IOC<3>
movwf IOC

movlw b'00001001'
movwf TRISIO ;configuracion de puerto GP; GP0 entrada ADC; GP3 entrada GPIE

movlw b'01000000'
movwf PIE1 ;activo interrupcion de conversor adc ADIE<6>

movlw b'10000111'
movwf OPTION_REG ;pull-ups desactivadas; pre-escalador para TMR0 en 1:256 (PS2:PS0 = 111)

bcf STATUS, RP0 ;banco 0

clrf bandera ;inicializacion de bandera
clrf contador ;inicializacion de contador

bsf INTCON, GPIE ;activo interrupciones de cambio de estado en GP3 <3>
bsf INTCON, GIE ;activo interrupciones globales <7>

_cruce_inicial

btfss bandera, GPIF
goto _cruce_inicial

bcf bandera, GPIF

bsf INTCON, T0IE ;activo interrupciones por TMR0

_cruce_siguiente

btfss bandera, GPIF
goto _cruce_siguiente

bcf bandera, GPIF

movf contador, 0
clrf contador

movwf periodo
movwf auxiliar_temp

bsf ADCON0, 0 ;activo conversiones adc <0>
bsf ADCON0, 1 ;comienzo conversion adc <1>

_conversion ;conversion adc; 1,6us @ 20MHz (11 instrucciones)

btfsc ADCON0, 1 ;ADCON0 GO/!DONE
goto _conversion

bcf ADCON0, 0 ;desactivo conversiones adc <0>

movf ADRESH, 0
clrf ADRESH

_division

sublw 0x08

btfss STATUS, C
goto _niveles

incf estado, 1
goto _division

_niveles

movf estado, 0

pagesel _tabla
call _tabla

movwf posicion_1

movf estado, 0
sublw 0x20

pagesel _tabla
call _tabla

movwf posicion_2
clrf estado

_salida

btfsc bandera, GPIF
goto _cruce_siguiente

nop
nop
nop
decfsz auxiliar_temp, 1 ;retardo de aux_temp * 8 instrucciones
goto _salida

movf periodo, 0
sublw 0x0E ;compensacion de retardo 14 * (8 * 32) instruccioness (_gpio_1 a _gpio_6 + isr_tmr0)

movwf auxiliar_temp

;********************************************************************************************

_gpio_1

btfsc GPIO, 1
goto _gpio_2

decf posicion_1, 1

btfsc STATUS, C
bsf GPIO, 1

_gpio_2

btfsc GPIO, 2
goto _gpio_salida

decf posicion_2, 1

btfsc STATUS, C
bsf GPIO, 2

_gpio_salida

movf GPIO, 0

xorlw b'00000110'

btfss STATUS, Z
goto _salida

goto _cruce_siguiente
end

les adjunto circuito y codigo en asm y .hex



GRACIAS MARTIN CNC POR TU GRAN AYUDA!!!!
Y gracias a todo el foro

un saludo!!

El sabio no dice todo lo que piensa, pero siempre piensa todo lo que dice. ARISTOTELES