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






Licenza Creative Commons
*** 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


« Indice

AVR ATmega8 con libC - Introduzione ai timer AV



Ultima revisione: 27/03/2016 
+Risoluzione di un timer




Il timer di un microcontrollore è una periferica hardware interna impiegata per la generazione, la misura, di tempi ed eventi, che, lavorando separatamente dall'esecuzione del programma, consente di ottenere una notevole efficienza e precisione rispetto alle tecniche software basate su cicli di ritardo.




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:





0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3....


ossia in codice binario:




00, 01, 10, 11, 00, 01, 10, 11, 00, 01, 10, 11....


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:
  1. Prescaling: facendo in modo che il timer "veda" un periodo di clock più grande e quindi ottenere tempi T più grandi
  2. Risoluzione regolabile: facendo in modo che si abbassi il numero massimo N e quindi ottenere tempi T più piccoli



    I contenuti di questo documento, sono stati resi possibili grazie ai seguenti strumenti gratuiti:
    - LaTeX equation editor
    - FidoCADJ (disegno grafici)
    - Google Code Prettify (sorgenti con sintassi evidenziata)



Informativa estesa sui Cookie | Web Statistics

Clicky

| Realizzazione a cura di Francesco Parisi (2002 ÷ 2024) | Contatti