Go Down

Topic: cambiare risoluzione del timer (Read 396 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