Autor Tema: Duda Cruce por cero.  (Leído 8552 veces)

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

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Duda Cruce por cero.
« en: 18 de Mayo de 2011, 00:43:24 »
Hola estoy intentando hacer un cruce por 0. este el codigo que manejo en la INT0 del puerto B-

Código: [Seleccionar]
//DETECTO PASO POR 0
#INT_EXT
void CrucePor0()
{
   Tiempo = 0;
      if (j==0){
      enable_interrupts(INT_TIMER0);//Habilito Timer0
       j=1;
        salida1_off;
        ext_int_edge(H_TO_L); // Cambio la detección del flanco, para que la proxima sea de bajada
      PIN1_ON;
      PIN2_OFF;
   }
      else {
        enable_interrupts(INT_TIMER0);//Habilito Timer0
      j=0;
        salida1_off;
        ext_int_edge(L_TO_H); // La próxima interrupción será de subida     
      PIN1_OFF;
      PIN2_ON;
   }
}

En cuanto a la parte de HADWARE lo que ago es transformar de 220v a  10V luego le pongo una resistencia de 100K ... Lo que quiero saber si esta bien lo que ago. Ya que me parece que la Frecuciancia se altera.. o los Siclos del transformado estan defasados con respecto al de la linea 220. Todo va mas rapido o tengo mal calculado el tiempo en TIMER 0

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda Cruce por cero.
« Respuesta #1 en: 18 de Mayo de 2011, 10:46:41 »
Podes poner directamente la tensión de red a un optoacoplador optico, con sus respectivas resistencias, por supuesto.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #2 en: 18 de Mayo de 2011, 16:56:41 »
Para detectar el cruce por cero solo necesitas poner una resistencia que te limite la corriente que entra al pic, generalmente es del orden de 5 a 10 Megas, y con eso metes la linea de AC directamente al pic.
una duda, que es lo que quieres hacer con el timer0,no entiendo para que lo habilitas
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #3 en: 19 de Mayo de 2011, 15:57:55 »
Lo habilito para que empiese a desbordar... Yo Capto el cruce por cero, Activo el retardo q va a estar apagado antes de enceder el triac.. y despues lo desabilito... y comiensa el ciclo de nuevo pero en el otro franco.

Como calculo ra resistencia q va en el OPTOCOPLADOR??? y se la vancara a frecuencia de 50 hz?? digamos si tendra reaccion para apagar y prender cada 10ms??

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda Cruce por cero.
« Respuesta #4 en: 19 de Mayo de 2011, 17:15:26 »
Como calculo ra resistencia q va en el OPTOCOPLADOR??? y se la vancara a frecuencia de 50 hz?? digamos si tendra reaccion para apagar y prender cada 10ms??

R= 220V*1.4142/10mA.  Yo lo probé para control por triac, y funciona  ;-)

Si usas rivale, mucho cuidado, dado que no esta aislado.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #5 en: 19 de Mayo de 2011, 17:27:01 »
 

Si usas rivale, mucho cuidado, dado que no esta aislado.


como comenta suky, si lo haces como te dije hay que tener cuidado, la ventaja es que usas menos componentes, por eso la resistencia debe ser de 10M aprox para que la corriente que entra al pic sea poca y puedas detectar el cruce por cero, lo he probado y funciona!!

veo que estas habilitando la interrupcion por timer 0 pero que haces cuando esta ocurre, supongo que le das el pulso al triac para que se encienda, el pulso yo lo he hecho de 100us y es suficiente para activar el triac.

recuerda que tu timer debe durar maximo 10 ms, dependiendo de cuanta potencia quieres que deje pasar
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #6 en: 19 de Mayo de 2011, 17:41:45 »
ah que llaman rivale??

el Timer lo tengo cunfigurado a con un cristal de 20 mhz y un prescaler de 4... despues el set_timer0(207); y esto me da 39.20us q multiplicado por 255 me da 10 ms...

haci tengo 255 puntos para controlar la intencidad...

esta bien calculado el tiempo??

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #7 en: 19 de Mayo de 2011, 17:56:33 »
ah que llaman rivale??

suky se refiere a que si hacias lo que yo te decia de poner una resistencia para conectar tu señal de alterna directamente al tu pic(yo soy rivale)
 me parece que estas configurando mal tu timer, cuando le pones "set_timer0(207)" , significa que tu timer empezara a contar a partir del 207, y solo llega  hasta 255.

lo que puedes hacer es ponerle un preescaler de 256, de esta manera el tiempo maximo de tu timer seria

4*256/20000000= 0.0512 ms, si multiplicas esto por 256, entonces te da un tiempo de 13.1072ms, no es exacto pero es cercano a los 10ms que necesitas.

con esto tu timer lo debes iniciar en 60 para que llegue a desbordarse(255) en 10 ms, y asi tienes 256-60=195 diferentes intensidades de luz
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #8 en: 19 de Mayo de 2011, 18:45:00 »
no seria mas lindo 3 x 256 = 0.0384 x 256 = 9.8304 eso es mas cera todabia!!
« Última modificación: 19 de Mayo de 2011, 19:01:14 por kaki »

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #9 en: 19 de Mayo de 2011, 20:39:17 »
no seria mas lindo 3 x 256 = 0.0384 x 256 = 9.8304 eso es mas cera todabia!!

pero de donde sacas el 3?, recuerda que el incremento del timer0 esta dado por la frecuencia de tu oscilador, el tiempo maximo esta dado por:

4*PRE*256/OSC

tu oscilador es de 20M, el preescalador es el unico que puedes variar, entonces el mas cercano es si le pones 256
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #10 en: 19 de Mayo de 2011, 21:22:01 »
y el 4 que es entonceS??? 256 es el prescaler??

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #11 en: 19 de Mayo de 2011, 21:52:55 »
Ha, lo puedes ver en la hoja de especificaciones para mas detalle, pero te comento, cada instruccion del  pic tarda 4 veces el periodo del oscilador, entonces cada incremento del timer es 4/osc
el preescalador de multiplica el tiempo de cada incremento: entonces es 4*PRE/osc

con esto sabes cada cuanto tiempo se incrementa en 1 el timer0, pero como es de 8 bits, se incrementa 256 veces


entonces queda:

4*PRE*256/osc; el PRE que te recomende es de 256, pero no tiene nada que ver con el 256 que es el tamaño del timer0.
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #12 en: 19 de Mayo de 2011, 22:38:59 »
entonces el set_timer0(256 - ALGUNVALOR); y ahi es la de donde arranca el para llegar adesvoerdar.. mientra mas grande la variable mas tiempo va a tardar en desbordar?? o nada q ver??

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda Cruce por cero.
« Respuesta #13 en: 19 de Mayo de 2011, 22:41:30 »
y el 4 que es entonceS??? 256 es el prescaler??

Amigo, hay que estudiar un pocos mas el datasheet, sino estas inventando cosas. Busca en el foro, hay informacion igual, porque sino parece un chiste.


Saludos
No contesto mensajes privados, las consultas en el foro

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #14 en: 19 de Mayo de 2011, 22:43:31 »
el set_timer0 te sirve para darle un valor inicial al timer, al contrario de lo que dices, entre mayor sea el valor, mas rapido se desborda el timer

por ejemplo, si le das el valor de cero, al timer le quedan 255-0 incrementos para desbordarse

si le das valor de 100, al timer le quedan 255-100=155 incrementos para que se desborde y genere la interrupcion.

si quieres calcular el tiempo que el falta al timer para desbordarse usa esta ec

tiempo= 4*PRE*(256-X)/20000000

donde X es el valor que le diste en set_timer0(X)
"Nada es imposible, no si puedes imaginarlo"