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 - Timer1) Modo CTC per generare forme dond
A questo punto prendiamo in considerazione solo fattori di prescaler per i quali abbiamo numeri N rappresentabili dal timer a 16 bit (numeri interi e non superiori a 65535), quindi scartiamo da subito k=64, k=256 e k=1024. Rimangono infine k=1 e k=8, dei due preferiamo il più piccolo (nessun prescaler) in corrispondenza del quale N=1999. Scriviamo il pseudocodice:
Vediamo le istruzioni, passo passo:
1. Imposta modo CTC (con confronto sul registro OCR1A) sul Timer1
E' la stessa configurazione già vista per il modo CTC con interrupt; bisogna attivare il solo bit WGM12 che si trova nel registro TCCR1B: TCCR1B |= (1 << WGM12); // imposta il Timer1 in modo CTC (su OCR1A)
2. Carica N nel registro OCR1A;
L'istruzione di caricamento è immediata: OCR1A = N;ove N è la solita etichetta simbolica, che va definita all'inizio, con il consueto commento esplicativo sul tempo generato in corrispondenza del numero N: #define N 1999 // T=0,5ms @4MHz :1
3. Imposta la commutazione hardware del pin OC1A successivamente all'azzeramento del timer
L'impostazione della commutazione hardware, avviene impostando i bit COM1A1 e COM1A0 del registro TCCR1A, che definiscono "cosa fare" sull'azzeramento del timer: 1) commutare l'uscita (toogling), 2) azzerare l'uscita, 3) settare l'uscita, come riportato nella tabella successiva: che in codice avr-libc si traduce come: TCCR1A |= (1 << COM1A0); // Imposta toogle su OC1A
4. Imposta prescaler a 1 (nessun prescaler);
Dalla tabella 16-5 riportata nel datasheet dell'Atmega168, ricaviamo che bisogna attivare il solo bit CS10 del registro TCCR1B: TCCR1B |= (1 << CS10) ; // nessun prescaling (k=1) Combinando i vari frammenti di codice, siamo ora in grado di scrivere il software definitivo: #include <avr/io.h> #define N 1999 // T=0,5ms @4MHz :1 int main (void) { DDRB |= (1 << PB1); // Imposta il pin PB1(OC1A) come di uscita TCCR1B |= (1 << WGM12); // imposta il Timer1 in modo CTC (su OCR1A) OCR1A = N; // carica N nel registro OCR1A TCCR1A |= (1 << COM1A0); // Imposta funzione di commutazione su OC1A TCCR1B |= (1 << CS10) ; // nessun prescaling (k=1) // Da questo punto in poi il timer è avviato! while(1) { /* non fa niente...*/ /* sul reset del timer (dopo il numero 1999) */ /* avverrà la commutazione hardware del pin OC1A */ } } Simuliamo il nostro software con vmlab (come già spiegato precedentemente) e il risultato è appunto un'onda quadra di 1kHz. Per misurare la frequenza, cliccare sulla traccia e quindi sul pulsante Analyze. Nello zip allegato, oltre al sorgente, c'è anche il file progetto (QUADRA.PRJ) per VMLAB. ---- Nota 1) E' possibile utilizzare, in alternativa al registro OCR1A, il registro ICR1 (v. datasheet per la diversa configurazione) I contenuti di questo documento, sono stati resi possibili grazie ai seguenti strumenti gratuiti: - LaTex online equation editor - FidoCADJ (disegno grafici) - Google Code Prettify (sorgenti con sintassi evidenziata) - gEDA (disegno schemi elettrici)
|
|
Informativa estesa sui Cookie
|
|
Realizzazione a cura di Francesco Parisi (2002 ÷ 2024) | Contatti |