|
Autore |
Messaggio |
opzioni |
murdock
postato il: 11.11.2010, alle ore 12:13 |
Fronte di salita e discesa
Ciao a tutti
Ho un problema che non riesco a risolvere
Domanda: Si puo (in Mikrobasic Pro) calcolare il tempo che intercorre tra il fronte di salita e il fronte di discesa di una quadra?
Mi potete dare uno spunto?
Grazie
Stefano |
|
harpefalcata
postato il: 11.11.2010, alle ore 12:18 |
Certo che si pu, se usi un PICmicro dotato di modulo CCP, allora la tua periferica dedicata allo scopo, altrimenti puoi usare uno qualunque dei timer del PIC stesso, altrimenti innumerevoli altri metodi differenziali.
Tu che pica USI? Io ti potrei aiutare spiegandoti il principio di funzionamento, ma mi dispiace il mikrobasic Pro non lo conosco proprio, io programmo solo assembly.
Il tempo è il miglior maestro, purtroppo uccide tutti i suoi allievi |
|
murdock
postato il: 11.11.2010, alle ore 12:28 |
Grazie harpefalcata
Io uso un 18f452
Non importa se conosci o non conosci il MKB, a me serve capire come fare usando il/i timer del pic. Poi me la sbrigo io
|
|
harpefalcata
postato il: 11.11.2010, alle ore 15:46 |
Vuoi usare un timer? Allora è semplicissimo, ti faccio un esempio usando pseudo codice assembly, e commento ogni riga:
Suppongo di mettermi nelle condizioni più complesse da calcolare:
Suppongo di voler usare ad esempio il timer 1 che è un timer a 16 bit, con un quarzo da 4 Mhz, e con un prescaler impostato a (ad esempio) 1:256, la prima cosa da fare è di calcolare quanto vale ogni singolo tick del timer:
Il periodo del quarzo sara pari a: 1/(4e6)= circa 0.25 microsecondi (0.25e-6).
Ora ogni istruzione del PIC impiega quattro cicli macchina, quindi ogni istruzione sarà di 4*(0.25e-6)=1 microsecondo (1e-6).
Ora sapiamo anche che il timer 1 ha impostato un prescaler di 1:256, quindi il vero tic del timer sara di 1 microsecondo * 256= 256 microsecondi (256e-6).
Quindi ogni tic del tuo timer durerà esattamente 256 microsecondi, la prima cosa che farai sarà di cancellare entrambi i registri di conteggio del timer che mi pare si chiamino TMR1L e TMR1H poi azzeri il bit TMR1ON e fai mettere il pic in ascolto sulla porta dove riceve la quadra in ingresso, nel momento esatto in cui leggi il fronte positivo dell'onda sul pic che stai monitorando accedi il bit TMR1ON ed il timer 1 comincia a contare, continui a restare in ascolto sulla medesima porta e quando vedi che il fronte si abbassa allora azzeri di nuovo il TMR1ON, in questo modo hai campionato la tua quadra.
Ora non ti resta che andare a leggere il registro TMR1L (ed anche TMR1H, ricorda che Timer 1 è a 16 bit!!), e metti cas che trovi il valore 0b10011011, questo corrisponde al numero decimale 155 (per il momento ti faccio il calcolo supponendo solo 8 dei 16 bit che hai a disposizione), questo numero 155 lo moltiplichi per 256 microsecondi ed ottieni 0.0397 cioè 39,7 millisecondi, quindi sai che la tua onda quadra durerà esattamente 39,7 millisecondi.
Logicamente gestendoti come vuoi il prescaler puoi aumentare o diminuire la risoluzione del conteggio.
Spero di essere stato chiaro
Ciao
Il tempo è il miglior maestro, purtroppo uccide tutti i suoi allievi |
|
harpefalcata
postato il: 11.11.2010, alle ore 15:49 |
A proposito mi sono dimenticato di dire una cosa importante, con le impostazioni prese il timer 1 è a 16 bit e quindi potrà contare fino ad un massimo di 2^16*256e-6=16.78 secondi, quindi se stimi che la tua onda quadra possa durare più di 16 secondi dovrai necessariamente modificare o il quarzo del PIC (mettendone uno più basso se vuoi conteggi più lunghi di 16 secondi), oppure usare l'ingresso dedicato del timer uno per scegliere una adeguata base dei tempi.
Il tempo è il miglior maestro, purtroppo uccide tutti i suoi allievi |
|
murdock
postato il: 11.11.2010, alle ore 16:36 |
Ti ringrazio harpefalcata
Pressapoco ho capito, dovrò fare delle prove.
Semmai se mi incasino ti posso disturbare in privato?
Grazie
Stefano
|
|
harpefalcata
postato il: 11.11.2010, alle ore 16:56 |
murdock: Ti ringrazio harpefalcata
Pressapoco ho capito, dovrò fare delle prove.
Semmai se mi incasino ti posso disturbare in privato?
Grazie
Stefano
Certo, anche se non assicuro risposte fulminee
Il tempo è il miglior maestro, purtroppo uccide tutti i suoi allievi |
|
crestus
postato il: 12.11.2010, alle ore 10:35 |
ma non bisognerebbe utilizzare il modulo capture modificando l'edgedetector?
Un pivello allo sbaraglio.... |
|
harpefalcata
postato il: 12.11.2010, alle ore 10:40 |
crestus: ma non bisognerebbe utilizzare il modulo capture modificando l'edgedetector?
L'avevo detto anche io qui:
harpefalcata: se usi un PICmicro dotato di modulo CCP, allora la tua periferica dedicata allo scopo
Solo che il nostro amico voleva usare il timer
Il tempo è il miglior maestro, purtroppo uccide tutti i suoi allievi |
|
crestus
postato il: 13.11.2010, alle ore 22:16 |
scusate... mea culpa....XD
Un pivello allo sbaraglio.... |
|
|