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..
L'esperto di timer sul forum è sicuramente Leo72.
Però spiega meglio cosa vorresti fare perché sinceramente non ho capito granché.
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:
- 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
- il prescaler, ossia il fattore di divisione del clock sorgente, che puoi metter su determinati valori preimpostati e che dipendono dal timer in uso
- la dimensione del registro del timer, che può essere a 8 o 16 bit
- la modalità che usi, che ti permette poi alcune manipolazioni.
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
I timer una volta avviati non si fermano per eventi.
Devi leggere tu il valore del loro registro. Potresti fare così:
- imposti il timer con il tempo che ti serve fra un overflow ed il successivo in modo da avere la risoluzione che vuoi ottenere;
- prima dell'invio del dato, azzeri il contatore del timer
- spedisci i dati
- subito dopo leggi il contatore. Sapendo la risoluzione, hai subito il tempo impiegato.