Risorse per il Lab. Elettronica |
|
Home Page
CAD/CAE • LTspice • PSpice Sistemi • Arduino • AVR • Raspberry Pi • National Instruments Risorse • Datasheet • Link • Hardware e Software • Misc |
*** IL DOWNLOAD DEI SEGUENTI FILE COMPORTA L'IMPLICITA ACCETTAZIONE DELLE SEGUENTI CONDIZIONI **** I seguenti Documenti, ove non diversamente specificato, sono distribuiti con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. E' dunque escluso l'utilizzo per scopi di lucro . Il materiale viene fornito AS-IS senza alcuna garanzia di assenza di errori e/o imprecisioni e senza alcuna forma di supporto. L'Autore è sollevato da ogni responsabilità per qualsiasi utilizzo dei seguenti file. Autore: Francesco Parisi fparisi gmail com « IndiceAVR ATmega8 con libC - Introduzione ai timer AV Ultima revisione: 27/03/2016 +Risoluzione di un timer Un timer è fondamentalmente un registro a n bit, il cui dato viene incrementato di un'unità a ogni impulso di clock. Il timer inizia così a incrementare il suo contenuto di un'unità fino a un numero massimo 2n-1, per poi ricominciare da zero e così via di nuovo fino al massimo numero (tutti bit a 1), continuamente. Ad esempio, un elementare timer da 2-bit conterà continuamente, in sequenza, quattro numeri: ossia in codice binario: La direzione del conteggio può anche essere verso il "basso", cioè dal numero più grande al numero più piccolo. Nei timer dei micro ATmega8, un numero resta memorizzato nel registro per una durata di tempo pari a quella di un periodo di clock (Tc). Tale quantità di tempo rappresenta la risoluzione del timer ossia la quantità di tempo più piccola che il timer è in grado di distinguere. Per esempio, se Tc=0,25s, partendo dal primo zero e finquando il registro del timer conterrà il primo numero 3 sarà trascorso un tempo pari a 4 * Tc sec ossia 1s. Dal successivo zero e fino a tutto il secondo numero tre verrà di nuovo impiegato 1s e così via, per il terzo tre...il comportamento è dunque periodico di periodo T Il timer va in overflow, quando passa dal massimo numero rappresentable (registro con tutti bit a 1) allo zero. Una possibile raffigurazione dell'esempio è riportata di seguito, nella quale ogni cella rappresenta il valore dell'ipotetico registro dati del timer che memorizza il numero: In generale, il numero N al quale corrisponde un intervallo di tempo T, dato il tempo di clock Tc è dato da: N.B. si aggiunge 1, perché anche lo zero "impegna" un ciclo di clock. Un timer può essere usato per contare quando l'impulso di clock proviene dall'esterno del micro ed è associato a eventi d'ingresso : quante volte è stato premuto un pulsante, quante automobili hanno attraversato una barriera ottica, la frequenza di un segnale ecc. oppure per misurare tempi: quanto tempo è trascorso tra due fototraguardi, la durata di un segnale rettangolare ecc. Viceversa, può essere usato per generare tempi: generatore di segnali rettangolari ovvero temporizzatore di eventi, come accendere un LED oppure realizzare un orologio, ricorrendo a un interrupt che si attiva alla scadenza del tempo prefissato. Esempio: Ogni sec: { Accendi il LED sul pin PortB.2 se è spento, viceversa spegnilo se è acceso } oppure: Ogni sec: { secondi = secondi + 1; se (secondi==60) allora: { minuti = minuti + 1; secondi = 0; } se (minuti==60) allora: { ora = ora + 1; minuti = 0; secondi = 0; } se (ore==24) allora: { ore=0; minuti=0; secondi=0; } } Perciò, nella letteratura si parla indistintamente di timer/contatore a secondo del particolare contesto d'utilizzo: timer se usato per generare tempi/temporizzare eventi (in uscita), contatore se impiegato per contare eventi/misurare tempi (in ingresso)
La risoluzione di un timer
La quantità di tempo più piccola che un timer è in grado di distinguere rappresenta la sua risoluzione. Nell'esempio fatto precedentemente la risoluzione del timer è quindi di 0,25s. Purtuttavia, lo stesso termine è usato nei data-sheet per indicare anche il numero di bit del timer. Quindi, per lo stesso esempio, si può anche dire che la risoluzione del timer è di 2-bit.
I registri dell'AVR ATmega168
Un AVR ATmegax8 (48, 88, 168, 328) contiene tre timer: Timer0, da 8-bit Timer1, da 16-bit Timer2, da 8-bit Il registro dati del timer a 16-bit è costituito dall'unione di due registri a 8-bit: il primo che memorizza il byte inferiore e il secondo quello superiore. Quindi il registro dati (che contiene il numero) del Timer1 sarà composto da due registri: TNCT1L e TCNT1H. L'intero registro dati, in alcuni linguaggi, può comunque essere direttamente accessibile mediante l'etichetta TCNT1:
Una descrizione grafica molto usata per i timer è quella di rappresentare l'andamento nel tempo del numero contenuto nel registro dati
Nel caso del timer1 (TCNT1), che conti da 0 fino al suo valore massimo, il grafico assume un andamento "a rampa crescente":
Conclusioni
La modalità di funzionamento appena vista è in effetti poco flessibile in quanto "rigidamente" legata al numero di bit e alla frequenza di clock;
esistono invece diverse modalità e tecniche che consentono di superare questo limite, modulando in modo preciso i tempi generati,
come si vedrà più avanti, attraverso due tecniche:
|
|
Informativa estesa sui Cookie
|
|
Realizzazione a cura di Francesco Parisi (2002 ÷ 2024) | Contatti