Visualizza messaggio singolo
Vecchio 22 febbraio 09, 23:04   #4 (permalink)  Top
ElNonino
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
piccola aggiunta od alternativa a quanto suggerito da g.mosfet:

Il TMR0 deve essere settato in free-running con clock di 1...5us, (in modalità a 16 bit se possibile), a seconda della risoluzione che vuoi ottenere nel misurare la durata dell'impulso (da 250 a 1000 step).

L'ingresso degli impulsi va messo sulla porta RB0 e va abilitato l'interrupt sul fronte di salita della stessa.

Appena arriva un impulso, nella routine di interrupt della RB0 leggi il valore del timer e lo salvi in una variabile, poi inverti il fronte dell'interrupt.

Quando arriva il fronte di discesa sottrai al nuovo valore del timer il vecchio salvato e così hai direttamente la durata dell'impulso, poi ricommuti l'interrupt sul fronte di salita

Ora hai circa 18 ms liberi per far fare tutto quello che vuoi al PIC.

Usando sempre il TMR0 potresti creare impulsi in uscita a Ton variabile sincroni con quello di ingresso.

Un consiglio, le routine di interrupt scrivile in assembler o se il compilatore lo permette scrivendo direttamente nei registri del PIC senza usare librerie che talune volte sono di dubbia efficienza.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando