Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema grave in interrupt

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

1
voti

[11] Re: Problema grave in interrupt

Messaggioda Foto UtentePaolino » 8 nov 2014, 10:04

Con quale versione di XC8 stai lavorando?
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

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

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

0
voti

[12] Re: Problema grave in interrupt

Messaggioda Foto Utenteivanpascolo » 8 nov 2014, 10:07

Ho provato a compilare con tutte le ultime versioni 1.30, 1.31, 1.32 e 1.33 ma niente.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

2
voti

[13] Re: Problema grave in interrupt

Messaggioda Foto UtentePaolino » 8 nov 2014, 10:11

Un altro paio di considerazioni:
1. hai provato senza WDT a vedere cosa accade?
2. stai usando il simulatore o sei diretto sulla scheda?
3. ai fini della gestione dell'interrupt, quando si scatena a causa di TMR0IF == 1, non è necessario specificare la condizione di verifica se TMR0IE == 1. Il codce funziona anche così:

Codice: Seleziona tutto
void interrupt ISR (void){     
    if(INTCONbits.TMR0IF == 1)
    {       
        INTCONbits.TMR0IF = 0;
        sys_tick ++;
    }
}


Se proprio vuoi metterla, però, userei le parentesi in questo modo:

Codice: Seleziona tutto
void interrupt ISR (void){     
    if((INTCONbits.TMR0IE == 1) && (INTCONbits.TMR0IF == 1))
    {       
        INTCONbits.TMR0IF = 0;
        sys_tick ++;
    }
}


Ciao.

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

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

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

0
voti

[14] Re: Problema grave in interrupt

Messaggioda Foto Utenteivanpascolo » 8 nov 2014, 10:19

Adesso provo a disabilitare il WDT, per il reso sto provando direttamente sulla scheda.
Per quanto riguarda l'impostazione dei registri è quello che genera il code generator di Microchip e nella mia applicazione utilizzo anche altri interrupt che via via ho eliminato per stringere il firmware.
Comunque le tempistiche del interrupt sono perfette.
Adesso provo la questione del WDT.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

1
voti

[15] Re: Problema grave in interrupt

Messaggioda Foto UtentePaolino » 8 nov 2014, 10:25

Intanto, per vedere se ho capito bene, prova a fare così: lasci l'interrupt a 1ms, e ne conti 100. Quando sono passati 100 interrupt, sono trascorsi anche 100ms. Usi un flag per settare l'evento:

Codice: Seleziona tutto
unsigned char flag 100ms;

void interrupt ISR (void){     
    if(INTCONbits.TMR0IF == 1)
    {       
        INTCONbits.TMR0IF = 0;
        sys_tick ++;
        if (sys_tick >100)
        {
           sys_tick  = 0;
           flag100ms = 1;
        }
       
    }
}

void main (void)
{
....................
....................
....................
    flag100ms = 0;
    while (1)
    {
        if (flag100ms == 1)
        {
             flag100ms = 0;
             FaccioQualcosa();
        }
    }
}



Così mi sembra più pulito.

Ciao.

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

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

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

0
voti

[16] Re: Problema grave in interrupt

Messaggioda Foto Utenteivanpascolo » 8 nov 2014, 10:25

Provato a togliere WDT, non funziona ancora.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

0
voti

[17] Re: Problema grave in interrupt

Messaggioda Foto Utenteivanpascolo » 8 nov 2014, 10:31

La soluzione che mi proponi è comunque quella di bypassare il problema, cosa che farò se non ne vengo a capo.
In pratica ho una base tempi di 1ms e la uso in questo modo:

carico sys_tick in una variabile timer

Timer = sys_tick;

Poi ad un certo punto verifico se è passato il tempo che mi interessa:

if ((sys_tick - Timer)>100){
......
}

Quindi al trascorrere del tempo sys_tick e Timer hanno valori via via crescendo
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

1
voti

[18] Re: Problema grave in interrupt

Messaggioda Foto UtentePaolino » 8 nov 2014, 10:34

Devo caricare il progetto nel simulatore e vedere cosa succede.
Vorrei capire per bene cosa fa questo compilatore.
Mi sembra però che la mia soluzione sia non tanto una scorciatoia, quanto quella notoriamente impiegata per contare il tempo mediante interrupt.

Ciao.

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

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

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

2
voti

[19] Re: Problema grave in interrupt

Messaggioda Foto Utenteivanpascolo » 8 nov 2014, 10:48

Hai ragione, quello che ho utilizzato è un sistema poco in uso e lo utilizzava un ex collaboratore dell'azienda presso cui lavoro.
Ho importato alcune parti dei sui programmi e ho mantenuto pertanto questo sistema, lui però utilizzava un ARM dove tutto è a 32 bit... e forse per questo motivo è filato sempre tutto liscio.
Attenzione però, non so se l'interrupt funziona con il simulatore.

Scusami tanto ma adesso devo andare... la famiglia si è alzata e sai...

Tra una pausa e l'altra continuerò a provare e ti terrò aggiornato.
Grazie mille della tua disponibilità.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

1
voti

[20] Re: Problema grave in interrupt

Messaggioda Foto UtentePaolino » 8 nov 2014, 10:49

Di nulla :ok:

Ciao.

Paolo.

P.S. Sì, l'interrupt funziona con il simulatore
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

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

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

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti