è possibile portare variabili nella funzione di interrupt per farle comparare ?

8 Anni 8 Mesi fa #11 da Elby
Gli errori commessi erano esattamente quelli evidenziati. Le variabili che "passavano" per l'interrupt andavano tutte inizializzate come volatile unsigned e non come unsigned semplice ed i simboli << e >> di shift effettivamente non permettevano di far analizzare le condizioni di if.
Ora la funzione viene eseguita correttamente...ma impiega diversi minuti (tra 5 e 10 :ohmy: ) per essere eseguita e sinceramente mi sembra troppo. Ho provato a sostituire il ==255 con il compreso tra 253 e 255 per avere un minimo di tolleranza ma la situazione non cambia.

intervallo_tra__due_ZC=0;
while (intervallo_tra__due_ZC!=1){};
intervallo_tra__due_ZC=0;
variabile_di_test_cicli=0; //azzera la variabile di conteggio (può essere anche superiore a 255 quindi è un INT)
INTCONbits.TMR0IE=1; //riabilita l'interrupt di TMR0
TMR0=TIMER0_preset; //aggiorna il preset al valore impostato
while (intervallo_tra__due_ZC!=1){};
INTCONbits.TMR0IE=0; //il timer 0 prosegue ma bloccando l'interrupt la variabile resta congelata
intervallo_tra__due_ZC=0;
if (variabile_di_test_cicli < 255) //se i periodi contati sono meno di 255 aumenta il preset per diminuire il delay
{TIMER0_preset++;}
if (variabile_di_test_cicli > 255) //se i periodi contati sono più di 255 diminuisci il preset per aumentare il delay
{TIMER0_preset--;}
if ((variabile_di_test_cicli > 253)&&(variabile_di_test_cicli < 255))
{test_risolto=1;
}


NOTA:
volatile unsigned int variabile_di_test_cicli=0; //si incrementa ad ogni overflow di TMR0 a partire da uno zero crossing
volatile unsigned char intervallo_tra__due_ZC=0; //diventa "1" nell'interrupt di zero crossing

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Elby
  • Senior Member
  • Senior Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login