Interrupt timer0 su pic12f675

Buongiorno a tutti, tempo fa ho aperto una discussione http://www.electroyou.it/forum/viewtopic.php?f=17&t=59980 sul rilevamento dello zero crossing con un pic12f675. La routine in questione funziona perfettamente. Ora vorrei implementare la routine con un innesco ritardato da Timer0.
Sto provando questa routine ma purtroppo c'è qualcosa che non mi quadra. La routine non mi crea un impulso unico, ma una serie infinita di impulsi. Dove sto sbagliando??
Dopo varie prove con questa routine mi è venuta in mente una cosa, correggetemi se sbaglio il ragionamento.
Se invece di spostare il tempo di innesco, io contassi gli impulsi??? Mi spiego meglio.
Ogni passaggio per lo zero vengono creati degl'impulsi ogni 500us, io voglio che l'innesco del triac sia eseguito dopo 4ms, basta contare 8 impulsi e dò l'innesco. Sono sulla giusta strada?
- Codice: Seleziona tutto
void interrupt (void){
if (INTCON.GPIF){
if((gpio.f3==0)&&(stato==1))
{
INTCON.T0IE=1;
TMR0=6;
stato=0;
}
if((gpio.f3==1)&&(stato==0))
{
INTCON.T0IE=1;
TMR0=6;
stato=1;
}
}
if(INTCON.T0IF)
{
gpio.f4=1;
delay_us(100);
gpio.f4=0;
}
INTCON.GPIF=0;
INTCON.T0IF=0;
}
Sto provando questa routine ma purtroppo c'è qualcosa che non mi quadra. La routine non mi crea un impulso unico, ma una serie infinita di impulsi. Dove sto sbagliando??
Dopo varie prove con questa routine mi è venuta in mente una cosa, correggetemi se sbaglio il ragionamento.
Se invece di spostare il tempo di innesco, io contassi gli impulsi??? Mi spiego meglio.
Ogni passaggio per lo zero vengono creati degl'impulsi ogni 500us, io voglio che l'innesco del triac sia eseguito dopo 4ms, basta contare 8 impulsi e dò l'innesco. Sono sulla giusta strada?