premesso che probabilmente lo sfasato sono io ;) : devo realizzare due conteggi di tempo con un PIC 18F4620:
per fare ciò sto utilizzando con profitto il TIMER0 e il TIMER2: riesco ad effettuare il conteggio con buona precisione e ripetibilità; l'anomalia sta nella differenza del calcolo teorico rispetto al riscontro pratico
TIMER 0 Obiettivo:un conteggio ogni secondo
- f osc=20MHz -> 5 MIPS -> 1 conteggio ogni 0,2 us
- prescaler 1:16 -> conteggio ogni 3,2 us
- conteggio 8 bit (255) -> interrupt di fondo scala ogni 816 us
- ogni 1225,5 interrupt dovrei contare 1 secondo (tralasciamo lo 0,5 e lo accettiamo come errore: 1225)
Invece per ottenere il valore più viciono a 1 secondo (1,006 s) devo contare 1208 interrupt.. ?_?
TIMER 2 Obiettivo:un conteggio ogni 18 ms
- f osc=20MHz -> 5 MIPS -> 1 conteggio ogni 0,2 us
- prescaler=1
- postscale=1
per ottenere un conteggio ogni 18 ms devo ottenere un fattore 90000 che ottengo imponendo il valore di compare PR2 del timer a 200 e contando 450 interrupt di fondo scala.
Anche in questo caso per ottenere circa 18 ms devo mettere PR2=140, valore che differisce di molto dal valore calcolato.
Dove sbaglio? Ecco il code..

- Codice: Seleziona tutto
sub procedure interrupt
if(INTCON.TMR0IF)then 'è un INTERRUPT di TIMER 0
TMR0L=0
INTCON.TMR0IF=0 'set T0IE, clear T0IF
Inc(cnt) 'increment value of cnt on every interrupt
if(cnt>=1208)then '1,006 sec
cnt=0
inc(sec)
end if
TMR0L=0
INTCON.TMR0IF=0 'set T0IE, clear T0IF
end if
if(PIR1.TMR2IF)then
TMR2=0
PIR1.TMR2IF=0
Inc(cnt2)
if(cnt2>=450)then 'è un INTERRUPT di TIMER 2
cnt2=0 '450+140PR2=28 Hz
end if 'circa 1 km/h (27 Hz)
TMR2 =0
PIR1.TMR2IF=0
end if
end sub
main:
'TIMER 2 -----------------------------------------------------------------------
T2CON=%00000100 'postscale=1 , acceso, prescaler 1
TMR2=0
PIE1.TMR2IE=1
PIR1.TMR2IF=0
PR2=140
'TIMER 0------------------------------------------------------------------------
T0CON=%11000011 'TIMER 0, 8 bit, gli assegno il PRESCALER, prescaler 16
TMR0L=0 'Valore iniziale
TMR0H=0
'-------------------------------------------------------------------------------
INTCON=%11100000 'Abilito interrupt timer0 e timer2
while(1)
wend
end.

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)





