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

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #30 en: 08 de Junio de 2011, 23:35:45 »
lo trabajo a 50 hz!!

si yo uso un prescaler de 256, Cristal de 20 Mhz y cargo el timer en 255 entonces tengo 52.20 microsegundos...

El siclo teoricamente tiene q volver a pasar por 0 una ves que el timer 197 ... variando el 197 es la intencidad de la luz.. a mas chico ese numero mayor intencidad por q va a estar mas tiempo sebado el triac...

Entiendes??

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #31 en: 08 de Junio de 2011, 23:47:54 »
entre mayor sea el numero que le cargues al timer va a tardar menos en prenderse, por lo tanto es mayor la intensidad de luz
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #32 en: 09 de Junio de 2011, 00:37:48 »
No no  estamos entendiendo.. hablamos de cosas distintas... ahi te doy un ejemplo con codigo.
Código: [Seleccionar]
#INT_TIMER0
void Desbordamiento()
{  
set_timer0(Periodo); //51.2us --> esta siempre en 255 no cambia
    PasosDimer++;  // Incrementa la veces  q pasa el contador
Intencidad = 5;
if (PasosDimer == Intencidad){ //Si las veces q desbordo el Timer es igual a la q setien en la Variable INTENCIDAD prende el tric(Mas grande la bariable menos intencidad)
triac_on; //Enciendo Triac
LED3_ON; //Enciendo Led de estado .. al pedo
}
if (PasosDimer == Intencidad + 2 ){  //pasan 100Us para que alcanse a sevar el triac
triac_off;//Apago Trian
LED3_OFF;// Apago led de estado
}
}


Bueno el problema es que no prende nunca el Triac o LED solo prende cuando intencidad es 2 o 1... la Variable  PasosDimer vuelve a 0  antes de lo normal.


Este es el codigo para detectar paso por 0

Código: [Seleccionar]
#INT_EXT
void CrucePor0()
{

//Regulo la intencidad manual mente por ahora variando esta variable y compilando (de 1 a 195)
PasosDimer=0;
if (j==0){
j=1;
LED1_OFF;
                LED2_OFF;
ext_int_edge(H_TO_L); // Cambio la detección del flanco, para que la proxima sea de bajada

} else {
     j=0;
LED2_ON;
                LED1_ON;
ext_int_edge(L_TO_H); // La próxima interrupción será de subida  
}

}

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #33 en: 09 de Junio de 2011, 01:31:33 »
dentro de tu interrupcion externa es donde debes darle el valor al timer0, ya que a partir de ese momento empezaras a contar el tiempo para encender el triac
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #34 en: 09 de Junio de 2011, 02:18:40 »
Y en el MAIN no es lo mismo que ponerlo en la Interupsion Externa?? Si o si tiene q ir ahi??

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #35 en: 09 de Junio de 2011, 02:26:28 »
no es lo mismo, lo que pasa es que cuando detectas el cruce, es donde debes empezar a contar para activar el triac. si lo haces en el main, como sabes que empieza a contar al mismo tiempo que el el cruce por cero.

mi idea es asi:


#int_ext
void ext()
{

///detectas el cruce y haces el cambio de flanco

set_timer0(xx)



}


#int_timer0
void int_t0()
{
//aca es cuando ya paso tu tiempo de espera para prender el triac
prendes el triac
retardo de 100 us aprox
apagas el triac

}


con esto prendes el triac, y se quedara prendido hasta el proximo cruce por cero, entonces vuelves a empezar a contar con tu timer para volverlo a prender
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #36 en: 09 de Junio de 2011, 02:54:52 »
okey voy a probar

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #37 en: 09 de Junio de 2011, 12:32:50 »
Bueno probe toda la noche y estoy 100% seguro que el codigo esta bien!!! no se por que no me nada....

Code:
Timer0:
Código: [Seleccionar]
#INT_TIMER0
void Desbordamiento()

    PasosDimer++;
if (PasosDimer == Intencidad){ //Ensiende el Trian
triac_on;
LED3_ON;
}
if (PasosDimer == Intencidad + 2 ){ //Espera 100 Us para apagar el Triac
triac_off;
LED3_OFF;
}
}


Interrupcion:
Código: [Seleccionar]
#INT_EXT
void CrucePor0()
{
set_timer0(Periodo);
PasosDimer=0;
Intencidad = 197; //Regulo la intencidad manual mente por ahora variando esta variable y compilando (de 1 a 195)

        if (j==0){
j=1;
LED1_OFF;
                LED2_OFF;
ext_int_edge(H_TO_L); // Cambio la detección del flanco, para que la proxima sea de bajada

} else {
    j=0;
LED2_ON;
        LED1_ON;
ext_int_edge(L_TO_H); // La próxima interrupción será de subida    
}
}

Variables y Definiciones:
Código: [Seleccionar]
#define  triac_on       OUTPUT_BIT(pin_a1,1)
#define  triac_off      OUTPUT_BIT(pin_a1,0)

#define  LED1_ON        OUTPUT_BIT(pin_c0,1)
#define  LED1_OFF      OUTPUT_BIT(pin_c0,0)
#define  LED2_ON        OUTPUT_BIT(pin_c1,1)
#define  LED2_OFF      OUTPUT_BIT(pin_C1,0)

#define  LED3_ON        OUTPUT_BIT(pin_c2,1)
#define  LED3_OFF      OUTPUT_BIT(pin_c2,0)

//CONSTANTE
const int Periodo=255; //255; //Tiempo total q demora cada medio ciclo

//VARIABLES
int PasosDimer;        // se incrementa en 1 cada X vueltas del timer, coincidendo con la captura de bits del mando
int Intencidad;  //Variable de
int j=0;          // Identifica Cruce por 0 si es alto o bajo

No se fijate que el codigo hace lo correcto pero el pic no entra nunca al maldito IF q prende el Triac

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #38 en: 11 de Junio de 2011, 19:24:20 »
tu variable paso_dimer la haces 0 en esta parte, aunque la incrementes en la int_timer0 nunca va a llegar al valor que quieres para entrar en el if


   set_timer0(Periodo);
   PasosDimer=0;
   Intencidad = 197;   //Regulo la intencidad manual mente por ahora variando esta variable y compilando (de 1 a 195)
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #39 en: 13 de Junio de 2011, 12:41:22 »
y entonces donde va  "PasosDimer=0;"  ??? en todos los codigo que vi esta ahi.. y es logico!!

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Duda Cruce por cero.
« Respuesta #40 en: 13 de Junio de 2011, 18:06:57 »
el paso_dimer lo haces igual a cero pero despues de que entre a la condicion del if

es decir, primero deja que se incremente, y cuando sea igual a "intensidad" entonces lo borras
"Nada es imposible, no si puedes imaginarlo"

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #41 en: 14 de Junio de 2011, 12:06:31 »
no tiene logica lo q dices!! entonces la INT_EXT esta al pedo!! para que lo sincronisamos con 0 si ago 0 la variable en el IF del Timer0!!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Duda Cruce por cero.
« Respuesta #42 en: 14 de Junio de 2011, 12:32:21 »
Hola.

Has cero la variable de conteo después de apagar el TRIAC, pero en la rutina del Timer0, no en la rutina de detección del cruce por cero y des-habilita el timer mejor; es mejor que inicie a contar desde que detecta el cruce por cero y se desactive después de apagar el TRIAC.

Saludos
El papel lo aguanta todo

Desconectado kaki

  • PIC18
  • ****
  • Mensajes: 260
Re: Duda Cruce por cero.
« Respuesta #43 en: 16 de Junio de 2011, 16:53:18 »
No anda Probe desactivando el Timer poniendolo como dicen ustedes y no anda... Saludos


 

anything