Per ottenere una temporizzazione precisa è necessario utilizzare un timer con comparatore annesso che faccia immediatamente il reset del contatore stesso. E' l' unico sistema per avere la certezza matematica di non incorrere nei problemi legati all' utilizzo di un time che chiama l' interrupt quando va in overflow.
Usare l' interrupt sull' overflow vuol dire inserire necessariamente delle compensazioni, con il comparatore che resetta il timer questo problema non c'è.
Valore quarzo
Moderatori:
carloc,
g.schgor,
BrunoValente,
IsidoroKZ
0
voti
[51] Re: Valore quarzo
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
[52] Re: Valore quarzo
Appunto per questi motivi (e perché l'ingegneria mi fa passare la voglia di imparare anche l'assembler) non uso alcun preset del timer2, esso è lasciato libero di correre. Una volta raggiunto l'overflow questo torna in un ciclo macchina a 0 (infatti PR2, che è il registro che una volta raggiunto dal timer lo fa resettare, ne tiene conto essendo a 199 al posto che a 200).
In alcuni tentativi precedenti dediti alla realizzazione di altri "congegni" mi sono accorto che reimpostare il timer durante l'esecuzione delle istruzioni di interrupt crea una valanga di operazioni non considerabili in C, come appunto il restart del prescaler e i vari cicli per eseguire ogni operazione.
Seguendo il datasheet (e con conferma datami dalla realtà) il timer corre da 0x00 a 0xC7 ritornando a 0x00 in un ciclo macchina, indisturbato da qualsiasi operazione che non sia la sua "presettazione" manuale (che non avviene).
Ps: aggiungo che proprio in questa realizzazione di un orologio non avevo considerato il ciclo macchina di ritorno del timer a 0, infatti mi ritrovavo uno sfasamento considerevole dopo solo alcuni secondi. Ripensandoci e correggendolo la tempistica adesso è impeccabile.
In alcuni tentativi precedenti dediti alla realizzazione di altri "congegni" mi sono accorto che reimpostare il timer durante l'esecuzione delle istruzioni di interrupt crea una valanga di operazioni non considerabili in C, come appunto il restart del prescaler e i vari cicli per eseguire ogni operazione.
Seguendo il datasheet (e con conferma datami dalla realtà) il timer corre da 0x00 a 0xC7 ritornando a 0x00 in un ciclo macchina, indisturbato da qualsiasi operazione che non sia la sua "presettazione" manuale (che non avviene).
Ps: aggiungo che proprio in questa realizzazione di un orologio non avevo considerato il ciclo macchina di ritorno del timer a 0, infatti mi ritrovavo uno sfasamento considerevole dopo solo alcuni secondi. Ripensandoci e correggendolo la tempistica adesso è impeccabile.
-

marioursino
5.687 3 9 13 - G.Master EY

- Messaggi: 1598
- Iscritto il: 5 dic 2009, 4:32
Chi c’è in linea
Visitano il forum: Nessuno e 216 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)