Visualizza messaggio singolo
Vecchio 13 gennaio 10, 20:22   #1 (permalink)  Top
illez
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
problema su int2 pic18f

Sarà che sono nel divano con la febbre da un paio di giorni e quindi non proprio lucidissimo ma non mi riesce di far andare questo benedetto interrupt come dico io (e come dice il datasheet, credo ).
Come da manuale (il pic in oggetto è il pic18f2455) :
l'int2 è un registro a 8 bit e viene incrementato alla frequenza di Fosc:4

Avendo io un quarzo a 4Mhz con PLL attivato ho un clock interno a 96Mhz che con la divisione minima per 2 porta ad un clock per il pic di 48Mhz.
Il timer2 viene quindi incrementato alla frequenza di 12Mhz (48:4, appunto), cioè ogni 0,0833 uSec.
Se imposto il prescaler a 16 si incrementa ogni 1,333 uSec

Il timer2 viene ad ogni ciclo confrontato con un registro di periodo: se sono uguali viene resettato il timer2 e generato un output di match verso il postscaler. Il postscaler non è altro che un contatore che ad una soglia prefissata (da 1 a 16) genera (finalmente!) l'interrupt.
Sembra complicato, ma non lo è.

Bene, detto tutto ciò e tornando alle mie impostazioni: l'incremento avviene ogni 1,333 uSec. Se imposto il registro di periodo a 124 ottengo un match ogni 166,6 uSec.
Se setto il postscaler a 6, ottengo finalmente un INT ogni millisecondo circa.

Giusto?

Sbagliato; facendo un semplice bip ogni 1000 interruzioni la frequenza ottenuta è molto più bassa, di circa 1/3.
PORCACCIA LA MISERIA, PERCHE???????

PS: per sicurezza, ho fatto una cosa simile con l'int0 e la frequenza è corretta...
__________________
.......
illez non è collegato   Rispondi citando