Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Timer 1: non incrementa

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Timer 1: non incrementa

Messaggioda Foto Utenteramboluis » 3 gen 2014, 21:35

sto smanettando con un timer, precisamente una finta bomba in pieno stile ''cavo blu o cavo rosso'' :mrgreen:
il PIC e un 16f887 .utilizzo un quarzo da 32768 Hz che e solo per timer 1 mentre il resto del programma lavora con l oscillatore interno settato a 8 MHz
ho fatto varie prove e ho notato che se uso il timer con l' oscillatore interno il timer funziona (naturalmente e troppo veloce) mentre invece se setto il il tutto per utilizzare il timer esterno non funziona e il tempo sul display resta fermo posto le parti di codice interessate
Codice: Seleziona tutto
//*****************************************************
// sx = secondi         dx= minuti          hx= ore     
//*****************************************************
void interrupt ISR(void)
{
  if(TMR1IF) // interrupt su overflow timer1: è passato un secondo
  {
    TMR1H=0x80; // ricarico il timer dal valore 0x8000, non vado a scomodare anche TMR1L che già si trova a zero

    sx--;

    RD0=1;              //bip ogni secondo
    __delay_ms (50);

    RD0=0;
    if (sx==-1)
    {
      sx=59;                                     
      dx--;
    }
   
    if (dx==-1)
    {
      dx=59;
      hx--;
    }

    TMR1IF=0; // azzero il flag di interrupt
  }
}

mentre qui come e settato ora (settato per oscillatore esterno)
Codice: Seleziona tutto
CM2CON1=0b00000000;
INTCON=0b11000000;
T1CON=0b00000111;
PIR1=0b00000001;
PIE1=0b00000001;


premetto che il circuito e su breadbord e che i condensatori a massa non sono quelli giusti ho provato con 100nf e con 15 pf e anche senza e magari questa la causa ?
Avatar utente
Foto Utenteramboluis
80 1 7
Stabilizzato
Stabilizzato
 
Messaggi: 314
Iscritto il: 28 giu 2012, 18:39

0
voti

[2] Re: timer 1 non incrementa

Messaggioda Foto Utentesimo85 » 4 gen 2014, 0:01

Ti ho aggiustato l' indentazione perché era quasi illeggibile.

Toglierei qualle __delay_ms dalla funzione di interrupt. È proprio brutta messa li. :(
Poi confronterei sx con 0 e non con -1.

ramboluis ha scritto:ho fatto varie prove e ho notato che se uso il timer con l' oscillatore interno il timer funziona (naturalmente e troppo veloce)

Non ho guardato il DS però non capisco. Se è troppo veloce non puoi contare le interruzioni o usare un prescaler?
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[3] Re: timer 1 non incrementa

Messaggioda Foto Utenteramboluis » 4 gen 2014, 0:09

simo85 ha scritto:Non ho guardato il DS però non capisco. Se è troppo veloce non puoi contare le interruzioni o usare un prescaler?

il problema non e la velocita ho usato il quarzo interno solo per provare , io vorrei utilizzare il quarzo esterno che ho messo per il timer 1
cioe usando il quarzo interno da 8 MHz,cioe lo stesso usato dal PIC per far girare il programma , il conteggio e molto veloce pero non e questo il problema perche io vorrei usare quello esterno , ho solo provato quello interno nel tentativo di isolare il problema e a questo punto direi che il problema sta o nel quarzo che non oscilla oppure qualche registro settato male , solo che non riesco proprio a venirne a capo


p.s. ho notato che se confronto sx con 0 mi salta lo 0 cioe passa da 1 a 59
per il delay sono d accordo ma non so come fare, se no ,a far suonare il buzzer ad ogni interrupt
Avatar utente
Foto Utenteramboluis
80 1 7
Stabilizzato
Stabilizzato
 
Messaggi: 314
Iscritto il: 28 giu 2012, 18:39

0
voti

[4] Re: Timer 1: non incrementa

Messaggioda Foto Utentec1b8 » 4 gen 2014, 2:25

Io proverei una configurazione diversa:
Codice: Seleziona tutto
TRISC|=3;
T1CON=0b00001110;

attesa di 2/3 ms

T1CON|=1;
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[5] Re: Timer 1: non incrementa

Messaggioda Foto Utentesimo85 » 4 gen 2014, 5:11

ramboluis ha scritto:e a questo punto direi che il problema sta o nel quarzo che non oscilla oppure qualche registro settato male , solo che non riesco proprio a venirne a capo


Se hai un oscilloscopio, ovviamente vedi subito se il quarzo non oscilla. Molte volte mi sono trovato in situazioni simili ed anche per questo ho comprato un oscilloscopio. :mrgreen:

Se non hai un oscilloscopio e vuoi verificare che l' oscillatore funziona, scrivi un piccolo firmware minimale a parte, in modo tale che un LED cambi di stato ON/OFF in base ai tempi del timer in questione.
Dopo aver letto attentamente la/e sezione/i di interesse del datasheet ed esserti assicurato che il circuito sia montato correttamente e che i registri siano configurati altrettanto correttamente, non funziona .. Allora direi che è l' oscillatore che non funziona. :(

Ad ogni modo non è tempo sprecato. :D

Il problema dei registri settati male può capitare per non aver letto bene qualche sezione del datasheet, anche quelle scritte in piccolo che non sempre si ha voglia di leggere. Beh vanno lette, e non solo nei datasheet.

:mrgreen:
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[6] Re: Timer 1: non incrementa

Messaggioda Foto Utentec1b8 » 4 gen 2014, 10:28

Una bella controllata all'oscillatore conviene sicuramente farla, come ho in dicato nel mio precedente post penso però che ca configurazione utilizzata sia errata.
In particolare mi sembra che l'oscillatore esterno non venga acceso.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[7] Re: Timer 1: non incrementa

Messaggioda Foto Utenteramboluis » 4 gen 2014, 17:35

c1b8 ha scritto:Io proverei una configurazione diversa:
Codice: Seleziona tutto
TRISC|=3;
T1CON=0b00001110;

attesa di 2/3 ms

T1CON|=1;



direi che scrivendo cosi funziona tutto :ok:
pero ora mi devi spiegare perche :mrgreen:
Avatar utente
Foto Utenteramboluis
80 1 7
Stabilizzato
Stabilizzato
 
Messaggi: 314
Iscritto il: 28 giu 2012, 18:39

0
voti

[8] Re: Timer 1: non incrementa

Messaggioda Foto Utentec1b8 » 4 gen 2014, 18:39

Molto semplice:
- i pin RC0 e RC1 devono essere settati come ingressi per utilizzare l'oscillatore (TRISC|=3;)
- bit 3 di T1CON deve essere impostato a 1 prima di attivare il timer.
- tra il settaggio del bit 3 ed l'avvio del timer si deve dare tempo all'oscillatore di attivarsi e raggiungere la frequenza di regime.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[9] Re: Timer 1: non incrementa

Messaggioda Foto Utenteramboluis » 4 gen 2014, 18:44

grazie mille :ok:
sto facendo varie prove confrontandolo con il timer del cellulare e direi che in 2 ore non sbaglia di 1 secondo e per l'uso che devo farne 2 ore bastano e avanzano
c1b8 ha scritto:i pin RC0 e RC1 devono essere settati come ingressi per utilizzare l'oscillatore (TRISC|=3;)

credo che questa e stata la parte che mi ha fregato di piu :mrgreen:
Avatar utente
Foto Utenteramboluis
80 1 7
Stabilizzato
Stabilizzato
 
Messaggi: 314
Iscritto il: 28 giu 2012, 18:39

0
voti

[10] Re: Timer 1: non incrementa

Messaggioda Foto Utenteramboluis » 14 gen 2014, 21:13

eccomi di nuovo qui :ok:
ho quasi concluso il progetto , ho portato il circuito su millefori.
nel frattempo avevo aggiunto un transistor npn per pilotare la retroilluminazone via software su breadbord il tutto funzionava, ma sulla millefori no , ho controlato piu volte se fosse un problema hardware ,ma anche se non posso escluderlo con certezza ,direi che e un problema software , ce da premettere che durante il trasferimento del circuito da breadbord a millefori ho cambiato alcuni piedini per questioni di layout , ho scelto il piedino RA1. cercando di venirne a capo sono giunto alla conclusione che una possibile causa potrebbe essere la presenza del comparatore su quel piedino , ho letto il datasheet ma non riesco proprio ad orientarmi .
in pratica il piedino sta sempre a 1 a prescindere da come lo setto
qualcuno potrebbe suggerirmi una possibile soluzione?
Avatar utente
Foto Utenteramboluis
80 1 7
Stabilizzato
Stabilizzato
 
Messaggi: 314
Iscritto il: 28 giu 2012, 18:39

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti