Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Interrupt timer0 su pic12f675

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Interrupt timer0 su pic12f675

Messaggioda Foto Utentesorecaro » 18 set 2015, 15:21

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.
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?
Avatar utente
Foto Utentesorecaro
36 3 7
Frequentatore
Frequentatore
 
Messaggi: 233
Iscritto il: 26 feb 2013, 19:30

0
voti

[2] Re: Interrupt timer0 su pic12f675

Messaggioda Foto UtenteWALTERmwp » 18 set 2015, 16:13

Ciao Foto Utentesorecaro,
sorecaro ha scritto:(...) La routine non mi crea un impulso unico, ma una serie infinita di impulsi.(...)
quando, in quale circostanza, e per quanto, secondo te ?

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
22,1k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6371
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: Interrupt timer0 su pic12f675

Messaggioda Foto Utentesorecaro » 18 set 2015, 16:33

WALTERmwp

forse perché non resetto l'interrupt, ma resetto solo il flag :-| :-| :-|
Per quanto riguarda il ragionamento di contare gl'impulsi sono sulla strada giusta???
Avatar utente
Foto Utentesorecaro
36 3 7
Frequentatore
Frequentatore
 
Messaggi: 233
Iscritto il: 26 feb 2013, 19:30

0
voti

[4] Re: Interrupt timer0 su pic12f675

Messaggioda Foto Utentesorecaro » 18 set 2015, 16:39

Sto cercando di contare gl'impulsi ma non capisco come mai l'uscita gpio.f4 è sempre alta.
Codice: Seleziona tutto
void interrupt (void){
if (INTCON.GPIF){

    if((gpio.f3==0)&&(stato==1))
    {
       INTCON.T0IE=1;
       tmr0=255;
      stato=0;
      zero_crossing=0;
       INTCON.GPIF=0;
     }
if((gpio.f3==1)&&(stato==0))
    {
      tmr0=255;
      INTCON.T0IE=1;
      stato=1;
      zero_crossing=0;
           INTCON.GPIF=0;
          }

          }

    if(INTCON.T0IF)
    {
   
    zero_crossing++;
     tmr0=6;
     INTCON.T0IF=0;
     }
    if(zero_crossing>=5) {
     gpio.f4=0;
     Delay_us(50);
     gpio.f4=1;
     INTCON.T0IE=0;
      }


     }
Avatar utente
Foto Utentesorecaro
36 3 7
Frequentatore
Frequentatore
 
Messaggi: 233
Iscritto il: 26 feb 2013, 19:30

0
voti

[5] Re: Interrupt timer0 su pic12f675

Messaggioda Foto Utentesorecaro » 18 set 2015, 17:59

stavo sbagliando io, non avevo notato che la variabile zero_crossing era impostata su bit, scusate
Avatar utente
Foto Utentesorecaro
36 3 7
Frequentatore
Frequentatore
 
Messaggi: 233
Iscritto il: 26 feb 2013, 19:30

2
voti

[6] Re: Interrupt timer0 su pic12f675

Messaggioda Foto UtenteWALTERmwp » 18 set 2015, 21:34

sorecaro ha scritto:(...) la variabile zero_crossing era impostata su bit, scusate
non e' il caso di scusarsi, non e' un problema.
Se funziona meglio cosi, anche se io non ho compreso su cosa avrei potuto indagare.
In questo caso, l'errore, dal mio punto di vista e' di carattere "espositivo"; scrivo cosi' con proposito costruttivo.
Se non si sa qual'e' il problema non si dovrebbe stabilire a priori la porzione di codice da sottoporre alla visione degli altri: e' un po una contraddizione.
Anche la descrizione dello stato dell'arte dovrebbe essere piu' "esaustiva".
Il mio e' solo un suggerimento, nulla di piu', ma ho notato che molti compiono queste distrazioni.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
22,1k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6371
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[7] Re: Interrupt timer0 su pic12f675

Messaggioda Foto Utentesorecaro » 18 set 2015, 23:34

WALTERmwp
hai ragione, d'ora in poi cercherò di essere più preciso
Avatar utente
Foto Utentesorecaro
36 3 7
Frequentatore
Frequentatore
 
Messaggi: 233
Iscritto il: 26 feb 2013, 19:30

0
voti

[8] Re: Interrupt timer0 su pic12f675

Messaggioda Foto UtentePaolino » 19 set 2015, 14:27

sorecaro ha scritto:...Ogni passaggio per lo zero vengono creatidegl'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?


Sì, Foto Utentesorecaro. Se il timer 0 è impostato per avere overflow ogni 500us, sei sulla strada giusta.
Ma nel codice conti 6 impulsi non 8, quindi 3000us (3ms e non 4ms).

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
31,9k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4179
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[9] Re: Interrupt timer0 su pic12f675

Messaggioda Foto Utentesorecaro » 19 set 2015, 17:30

Paolino
grazie. L'idea é quella di far accendere e spegnere la lampada in modo graduale ed automatico, regolando questo " tempo" con un potenziometro.
Avatar utente
Foto Utentesorecaro
36 3 7
Frequentatore
Frequentatore
 
Messaggi: 233
Iscritto il: 26 feb 2013, 19:30

0
voti

[10] Re: Interrupt timer0 su pic12f675

Messaggioda Foto UtentePaolino » 20 set 2015, 8:22

Ok, un varialuce (volgarmente detto).
Mi sembra di capire che ora funziona tutto. O sbaglio?

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
31,9k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4179
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite