da
posta10100 » 28 lug 2009, 22:35
Ciao Galaxy,
non riesco a trovare il tempo per scrivere per bene il codice, ma ti do qualche dritta, poi penso tu sia in grado di proseguire da solo.
Lo scopo è quello di generare un interrupt ogni intervallo di tempo prefissato.
Il tuo quarzo è da 16MHz, questo significa che il PIC esegue una istruzione ogni 1/16 micro secondi, in pratica la frequenza effettiva è di 4MHz.
Vediamo quale dei 2 timer presenti nel PIC è più adatto al tuo scopo.
Il Timer0 è da 8 bit, può contare quindi da 0 a 255 prima di andare in overflow e generare l'interrupt.
Ogni colpo di clock incrementa di 1, quando arriva a 255 genera l'interrupt.
E' possibile settare il PRESCALER, che altro non è che una rete di ritardo che incrementa di 1 il registro del timer ogni x colpi di clock.
Per il timer 0 (guarda a pagina 50del ds) il prescaler può essere settato da 1:2 a 1:256.
Se lo settiamo a 256 il timer andrà in overflow ogni 16.32ms.
Un interrupt ogni 16ms penso distrugga qualsiasi gioco di luci... il PIC passerebbe piu` tempo a star dietro agli interrupt che al programma vero e proprio!
Facciamo lo stesso calcolo per il Timer1 e otteniamo valori ancora una volta troppo piccoli!
Pensi sia possibile mettere un clock esterno, fatto magari con un NE555 per temporizzare gli eventi?
http://millefori.altervista.orgTool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule