Go Down

Topic: cambiare risoluzione del timer (Read 458 times) previous topic - next topic

ale16289

ciao  a tutti, vorrei saper come sia possibile cambiare la risoluzione del timer di arduino ,nel mio caso la uno.
Ho calcolato che il massimo tempo osservabile e T pari a 16 ms, calcolato come 256/fc, con fc pari a 16 MHz, se io volessi portare T aper esempio 150 ms come si potrebbe fare?...o meglio devo usare un prescaler pero guardando i vari esempi su internet non ci ho capito molto.
grazie mille in anticipo..

PaoloP

L'esperto di timer sul forum è sicuramente Leo72.
Però spiega meglio cosa vorresti fare perché sinceramente non ho capito granché.  :smiley-roll:

leo72

Stai parlando di un timer ad 8 bit visto che vuoi dividere Fc per 256?
Sbagli i calcoli perché con prescaler ad 1 e clock di 16 MHz, con un timer con registro ad 8 bit hai una risoluzione di 0,000016 secondi, quindi 16 us, non ms.

Ricordati che i timer hanno 4 parametri fondamentali:
1) il clock sorgente, che corrisponde al clock di sistema (16 MHz per l'Arduino) - vero in parte perché il timer 2 può lavorare anche in modalità asincrona ma per ora lasciamo perdere
2) il prescaler, ossia il fattore di divisione del clock sorgente, che puoi metter su determinati valori preimpostati e che dipendono dal timer in uso
3) la dimensione del registro del timer, che può essere a 8 o 16 bit
4) la modalità che usi, che ti permette poi alcune manipolazioni.


ale16289

si scusa volevo scrivere 16 microsecondi e non millisecondi...mi spiego meglio quello che voglio fare e inviare via wfi ,con  lo shield wifi ufficiale di arduino, un vettore di byte che in posizione i contenga quanto tempo in microsecondi ci ha messo ad inviare quello in posizione i-1, il problema che usando per inviare la funzione write ho una dinamica di 8 bit ( 256 livelli).
io ho calcolato che il tempo medio di trasmissione e 12 millisecondi pero il probela che un livello corrisponde a 16/256 microsecondi.
io vorrei fare un timer che conta il tempo di trasmissione, che venga resettato una volta che il singolo bit in posizione i viene trasmesso e che abbia una dinamica di circa 160 ms. e possibile?
grazie mille   

leo72

I timer una volta avviati non si fermano per eventi.
Devi leggere tu il valore del loro registro. Potresti fare così:
1) imposti il timer con il tempo che ti serve fra un overflow ed il successivo in modo da avere la risoluzione che vuoi ottenere;
2) prima dell'invio del dato, azzeri il contatore del timer
3) spedisci i dati
4) subito dopo leggi il contatore. Sapendo la risoluzione, hai subito il tempo impiegato.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy