home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


Fronte di salita e discesa
     
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




una ogni 10 livelli


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




una ogni 10 livelli


postato il:
13.11.2010, alle ore 22:16
scusate... mea culpa....XD


Un pivello allo sbaraglio....
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale