Autor Tema: especie de dimer automatico  (Leído 5731 veces)

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

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
especie de dimer automatico
« en: 17 de Septiembre de 2007, 13:03:03 »
Hola amigos
estuve haciendo un efecto para luces ..algo asi como un dimer pero en automatico...( me explico mejor: el efecto que quiero lograr es algo como si tuviera un dimer  a la mano y me pusiera a jugar con el potenciometro lentamete le subo la intensidad y luego lentamente le bajo la intensidad y asi sucesibamente,. pero claro esos es solo el efecto en realida el pic deberia hacer todo el efecto automaticamente)
hice un codigo en asm. pero no me satisface el efecto logrado como que no es progresivo, ademas no llega a apagarse por completo y es demasiado rapido.
mas abajo les dejo el codigo aber si me dan una manito, o alguna otra idea de como hacer el codigo.

el codigo esta basado integramente en la teoria del disparo del triac para lograr el efecto del dimer

Código: [Seleccionar]

;Control de la intensidad lumínica de la lámpara mediante el sistema de recorte de fase. Cada 8.33 ms.
;tenemos el paso de la señal rectificada en doble onda porcero. A partir de hay introducimos temporizaciones que al
;acabar nos indicará el instante para disparar el triac, siempre antes de que llegue otro impulso de paso por cero.
;
;Condiciones de funcionamiento según se empiece a transcurrir el tiempo:
;* Al conectarse el montaje la lámpara está apagada.
;* irá aumentado progresivamente de 0% al 100% de la intensidad de luz.
;* Al llegar al 100% ira disminuyendo progresivamente hasta llegar al 0% y nuevamente ira en aumento

LIST P=16f628A
INCLUDE "P16f628A.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 señalizador para saber si sube o baja
VAR06 ;equ 0x25 determina la velocidad con que aumenta o disminuye el brillo
ENDC

org 0x00 ;inicio de programa y direccion de interrupcion
goto Inicio
org 0x05
Inicio
org 0x20
call banco1 ;Configurar el puerto B (RB4 salida).
bcf TRISB,4 ;El Puerto RB4 como salida
call banco0
bcf PORTB,4 ;pongo a cero el Puerto RB4
call banco1
bcf OPTION_REG,INTEDG ;Configurar la INT, flanco de bajada de la INT
call banco0
programa
movlw 0xF1
movwf VAR01
clrf VAR05
progra1
btfss INTCON,INTF ;salta si el bit INTF=1 (señalizador de interupcion RB0/INT)
goto progra1
incf VAR06,F
bcf INTCON,INTF ;bajamos la bandera señalisadora INTF
call varia
call disparo
call Sube_Baja
goto progra1
;--------------------------------------------------
;Subrutinas para incrementar y decrementar el brillo
;--------------------------------------------------
Sube_Baja
btfsc VAR05,0 ;testeo del bit 0 del registro VAR05
goto Baja ;si es = 1 baja
goto Sube ;si es = 0 sube
Baja
btfss VAR06,4 ;testeo del bit 4 y si vale uno salto
goto saltu1
clrf VAR06
incf VAR01,1 ;incrementa el registro VAR01

bcf STATUS,C ;corrección para no llegar a 0xFF, solo llego hasta 0xF1
movlw 0x0F
addwf VAR01,W
btfss STATUS,C
goto saltu1

movlw 0xF1
movwf VAR01
bcf VAR05,0 ;bandera abajo =0, indica si sube=0 o baja=1
saltu1
return
Sube
btfss VAR06,4 ;testeo del bit 4 y si vale uno salto
goto saltu3
clrf VAR06
decf VAR01,F ;decrementa el registro VAR01

bcf STATUS,C ;corrección para no llegar a 0x00, sólo llego hasta 0x0F
movlw 0xF1
addwf VAR01,W
btfss STATUS,C
goto saltu2
return
saltu2
movlw 0x0F
movwf VAR01
bsf VAR05,0 ;bandera arriba =1, indica si sube=0 o baja=1
saltu3
return
;------------------------------------
;Disparo del triac: 225 useg. necesarios para activar el triac
;------------------------------------
disparo
bsf PORTB,4
call usg225
bcf PORTB,4
return
usg225
movlw 0x4B
movwf VAR04
sal4
decfsz VAR04,F
goto sal4
return

;-----------------------------------------------
;Retardo variable después de la INT.
;El tiempo de la interrupcion de cruze por cero INTF es de 8.33ms (8333 microsegundos)
;Si un registro (VAR02) lo cargo con un valor comprendido entre 01h y FFh y lo voy decrementando
;hasta llegar a cero con un retardo fijo de unos 25 microsegundos entre medias puedo conseguir
;unos pocos microsegundos o los 8.3 milisegundos
;-----------------------------------------------
varia
movf VAR01,W
movwf VAR02
salte
call usg25
decfsz VAR02,F
goto salte
return
usg25
movlw 0x08 ;retardo de 25 us
movwf VAR03
sal5
decfsz VAR03,F
goto sal5
return
;------------------------------------------
;Subrutinas de cambios de bancos.
;------------------------------------------
banco0
bcf STATUS,RP0
return
banco1
bsf STATUS,RP0
return

END
« Última modificación: 28 de Septiembre de 2007, 15:24:46 por johnnybravo »
Atte.
Johnny Bravo

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: especie de dimer automatico
« Respuesta #1 en: 18 de Septiembre de 2007, 17:36:14 »
Hola johnnybravo, veo que usas el flag de la interrupción, pero no usas la interrupción, Por que no la usas?

Leo pero no llego a entender a que corresponde el 8.33ms, ¿es uno dividido por el doble de la frecuencia de la red?

Recuerda que por cada semiciclo el triac se dispara solo una ves, y el solo se desconecta si en el gate no hay tensión!!! por otro lado el triac debería trabajar con alterna y no continua pulsante, para continua pulsante están los tiristores que son más aptos, esto lo aclaro por las dudas.

A partir del cruce por cero (momento que comienzas a contar XX tiempo) cuanto más largo sea ese tiempo menos luminosidad tendrá la lámpara

Recuerda que la forma de onda es una sinusoidal, por lo que su potencia RMS no es directamente proporcional al "retardo" de disparo del triac, por lo que para que el encendido sea "aparentemente" progresivo y lineal deberás hacer una "corrección" de la rampa de encendido por medio de la correspondiente tabla.

Espero te sea de ayuda.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: especie de dimer automatico
« Respuesta #2 en: 20 de Septiembre de 2007, 03:46:13 »
hola charly si  asi es 8.33 ms es el periodo de un semiciclo.. ya que por aqui la frecuencia de la tension AC es de 60HZ
entonces esto queda asi:
f=60Hz
T=16.66ms
T/2= 8.33ms (tiempo que demora un semiciclo, ya sea negativo o positivo)
y si el triac trabaja en alterna
ahora estoy usando la interrupcion solo par saber que se produjo el cruce por cero atraves de la bandera de INT..pero no funciona.... como que quiere pero solo veo parpadeos aveces baj pero con muchos destellos..
hice algunas modificaciones pa usar la totalidda de la interrupcion pero se puso peor... no se uqe estoy haciendo mal......
ahora le puse 225us para exitar el triac ..¡seran suficientes?.. o tal ves sea mucho............. no se que voy hacer  ya me estoy volviendo loco... .... pero no me va a ganar seguire intentando.... :mrgreen:
Atte.
Johnny Bravo

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: especie de dimer automatico
« Respuesta #3 en: 20 de Septiembre de 2007, 08:40:11 »
Hola johnnybravo, primero que nada el circuito de detección de cruce por cero estás seguro que funciona de manera correcta?

Lo segundo, pasado el tiempo de demora para realizar el control de fase correspondiente, el triac no recibe un pulso, si no que se coloca la salida correspondiente a nivel alto hasta que llegue el proximo cruce por cero, solo ahí pasa a bajo para volver a comenzar a contar el tiempo correspondiente.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: especie de dimer automatico
« Respuesta #4 en: 20 de Septiembre de 2007, 08:53:54 »
No sé si te he entendido bien, Chaly: ¿quieres decir que no basta con un pulso para activar el triac?

Yo lo hago así en mi minidimmer, envío un pulso en el momento que toca (por cierto, no espero nada, envío el 1 y a continuación el 0) y el triac permanece encendido hasta el siguiente cruce por 0.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: especie de dimer automatico
« Respuesta #5 en: 20 de Septiembre de 2007, 12:41:27 »
Hola Manolo, tienes toda la razón, en teoría un pulso debería de alcanzar y bueno, tu ya lo haz comprobado, pero como cuesta lo mismo a nivel programación y aumenta la seguridad de trabajo es mejor una ves activado el pulso dejarlo en alto hasta que el semi-ciclo termine.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: especie de dimer automatico
« Respuesta #6 en: 28 de Septiembre de 2007, 15:22:44 »
hola amigos veo que aun causa debate este tema..
pues si .. el cruce por cero al parecer funciona muy bien ..pero lo cambiare por otro que me parece esta mejor.. ademas le hice unas pruebitas con el osciloscopio..y em bota una señal mas clara de cruce por zero.... ademas tambien estoy teniendo en cuenta lo que me comentas de dejar el pin de activacion del triac en alto y hacer que al interupcion por zero cross lo regrese a cero y de esta manera tanto la puerta del pic como el triac se desactivaran al mismo tiempo...
ademas de todo eso estoy cambiando la frecuencia del pic a una mayor 20MHz.... para asegurarme que ese cambio es veloz

pero acabo de hacerle las modificaciones al programita y recien lo probare.. ademas hice otras modificaciones para hacer pruebas mas rapido.. le voy a poner interuptores  en los puertos RB1 a RB7.. y de esta manera ire variando la luminocidad ( a manera de entradas digitales).. bueno con esto ya espero que me funcione

a otro dato mas como ya dije hice algunas pruebas del detector de cruce por zero en el osciloscopio
y el pude sacar el ancho de pulso del detector 0.9ms la frecuencia a la que trabaja la tencion alterna por aqui es 60Hz por lo que me quedo un dibujito mas o menos asi:
                              8.31ms
             ----------------------------------------
              0.9ms
             -----
                                     7.44ms
                     ----------------------------------
_______/-----\________________________/------\______

ahora que el ancho de pulso es 0.9ms.. yo en el programa le dare siempre un retardo de 1ms y eso se reflejara en el maximo valor de intencidad de la bombilla, y de ahi podre ir aumentado mas retardo del disparo del triac para poder disminuir la intencidad..... es la idea que trate de plasmar en el nuevo codigo,
el programita lo pongo mas abajo aber que sale:
ayudenme a probarlo :-/ porfa.. quiero que funcione primero esto para regresar luego a los del automatico
Atte.
Johnny Bravo

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: especie de dimer automatico
« Respuesta #7 en: 28 de Septiembre de 2007, 15:58:36 »
aqui van las modificaciones que les comente.. ojala funcionen .. las voy aprobar mas tarde :-/

   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
Atte.
Johnny Bravo

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: especie de dimer automatico
« Respuesta #8 en: 28 de Septiembre de 2007, 20:19:04 »
porfin funciona ala perfeccion.. se apaga por completo.. y llega casi al 100% de su intencidad luminosa...bueno ahora quiero darle un efecto mas lineal al moneto de subir y bajar el brillo de la lampar.. alguien tiene una idea de como podria calcular los tiempos .. o alguna manera de hacer esto...
Atte.
Johnny Bravo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: especie de dimer automatico
« Respuesta #9 en: 29 de Septiembre de 2007, 01:49:15 »
¿A qué le llamas un efecto más lineal?

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
Re: especie de dimer automatico
« Respuesta #10 en: 29 de Septiembre de 2007, 13:24:05 »
bueno..  me refiero a que como la tension es una onda senoidal, pues el incremento o decremeto de la intensidad luminosa no es una funcion lineal si no que seria algo logaritmica... o bueno eso es lo que yo dedusco al estar trabajando con una onda senoidal.... o me estare equivocando  :mrgreen:

cuando hice algunas pruebas ... metiendole convinaciones binarias ..pues al principio con los cuatro primeros bits la variacion  era como a paso pequeños pero de ahi para adelante con los otro cuatro bits de mas peso pues el incremento fue mas rapido.... y por eso es que digo que no es lineal.... bueno... espero haberme dejado entender.. no soy bueno explicando pero hago el intento..jajajaj .. por el moento ya estoy contento, ya que por fin lo hice funcionar.... :-/
Atte.
Johnny Bravo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: especie de dimer automatico
« Respuesta #11 en: 29 de Septiembre de 2007, 13:41:15 »
Sí, eso es cierto, aunque hay que ser muy fino para darse cuenta. Yo desde luego cuando subo el mío paso a paso no soy capaz de percibir que los micropasos sean más rápidos en una zona que en otra.

Desconectado juany_279

  • PIC10
  • *
  • Mensajes: 3
Re: especie de dimer automatico
« Respuesta #12 en: 01 de Agosto de 2008, 00:20:20 »
Hola a todos pregunta de donde puedo sacar el circuito de este proyecto asi lo pruebo gracias saludos  :-/
JU@NY®


 

anything