Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori ST626X. Sesta puntata 1/3

Corso di programmazione per microcontrollori ST626X

Dedichiamo questa puntata del Corso alla descrizione dei due temporizzatori (timer) disponibili all’interno dei nuovi microcontrollori ST626X della SGS-Thomson. Coloro che programmano con i micro della sottofamiglia ST622X sanno già quanto sia importante, per non dire indispensabile, poter disporre di almeno un timer interno. Grazie a quest’ultimo è infatti possibile realizzare, ad esempio, un orologio o, sequenziare nel tempo degli eventi o, ancora, sviluppare un qualsiasi tipo di controllo ciclico basato sempre sul tempo.

Ma non solo: i tecnici della SGS-Thomson hanno implementato nei nuovi micro ST6 oltre al temporizzatore standard, già disponibile nelle versioni ST6220 e ST6225, anche un secondo temporizzatore questa volta di tipo autoricaricabile. Imparando ad usare questo particolare timer sarà possibile creare onde quadre perfette e stabili tanto da dar luogo a delle note musicali (collegando al micro un buzzer), oppure generare dei segnali PWM (Pulse Width Modulated) per controllare, ad esempio, la velocità di un motore elettrico. In definitiva, le applicazioni che richiedono l’utilizzo della periferica timer sono moltissime e le più svariate possibili. Entriamo dunque nel vivo dell’argomento e diamo un’occhiata dapprima al timer standard presente nel micro ST6 a cui diamo il nome di “timer 1”. Per comprenderne il funzionamento osserviamo lo schema a blocchi riportato nell’articolo. Come si può notare, il timer 1 è fisicamente rappresentato da un contatore hardware ad 8 bit che viene decrementato da un secondo contatore a cui diamo il nome di “prescaler”.

Quest’ultimo viene a sua volta controllato dal clock interno del micro per realizzare la funzione di temporizzatore, oppure dal piedino del siglato “TIM1” per lavorare come contaeventi esterni. In entrambi i casi, temporizzatore o contaeventi, lo stato di overflow (decremento a zero del contenuto del contatore a 8 bit) viene rilevato automaticamente e segnalato via hardware portando a uno logico il bit “TMZ” del registro di controllo del timer stesso. Per essere più precisi, quando il contenuto del contatore passa da 1 a 0, il bit “TMZ” assume il valore 1 ed una interruzione può essere generata. Il contatore del timer 1 e il suo prescaler possono essere letti o scritti mediante istruzioni software facendo riferimento a due registri: il registro TCR1 (Timer Counter Register) che rispecchia il contenuto del contatore e il registro PSC1 (Timer Prescaler Register) che riporta invece il contenuto del prescaler.

Schema_a_blocchi_del_timer_standard

Questi due registri sono disponibili all’interno della memoria dati del micro alla locazione esadecimale D2 per il registro PSC1 ed alla D3 per il registro TCR1. Sempre nella memoria dati, all’indirizzo esadecimale D4, troviamo il registro di controllo del timer 1 a cui diamo il nome di TSCR1 (Timer 1 Status Control Register). Quest’ultimo serve per inizializzare il timer, ovvero per selezionare il modo di funzionamento desiderato e per riconoscere lo stato di overflow. Vediamo dunque il significato di ogni bit di TSCR1 iniziando dai primi tre cioè da D0, D1 e D2 a cui associamo le sigle PS0, PS1 e PS2 (Prescaler Mux Select 0, 1 e 2). In funzione del valore di questi tre bit possiamo dividere il clock da applicare al contatore per i seguenti fattori: 1, 2, 4, 8, 16, 32, 64 e 128 (vedi tabella della verità riportata nell’articolo). L’oscillatore primario, per intenderci quello che lavora con il quarzo esterno, genera un clock detto di sistema che può essere diviso per 1, per 2, oppure per quattro, in funzione dei bit del registro OSCR (Oscillator Control Register) onde generare il clock interno. Quest’ultimo viene diviso per dodici dall’hardware del micro e successivamente applicato al prescaler del timer 1 che, come sopra citato, può ulteriormente dividerlo per un fattore da 1 a 128. Bene, proseguiamo con gli altri bit del TSCR1, ovvero col quarto bit (D3) a cui associamo la sigla PSI (Prescaler Initialize Bit). Associando al PSI il valore logico 0, l’hardware carica automaticamente il prescaler al massimo valore, ovvero a 7F hex; portando il PSI a 1 il prescaler viene abilitato e il conteggio ha inizio; riportandolo a 0 il conteggio viene bloccato e il prescaler viene ricaricato. Il quinto ed il sesto bit di TSCR1, denominati rispettivamente DOUT e TOUT, selezionano il modo di funzionamento del timer 1: uscita, controllato e contaeventi. Il funzionamento come uscita si abilita portando a 1 il bit TOUT e, in questo caso, quando il contatore raggiunge il valore zero il bit DOUT viene presentato all’esterno del chip sul piedino siglato TIM1. Il funzionamento “controllato” avviene portando a 0 il bit TOUT e ad 1 il bit DOUT. In questo caso, il contatore del timer 1 è decrementato dal clock interno e lo stato del piedino TIM1 può abilitare, se a livello alto, o disabilitare, se a livello basso, il conteggio. Il pin TIM1 appartiene fisicamente alla periferica PORT C e per l’esattezza rappresenta il bit 1 di tale PORT. Agendo sul registro direzione del bit 1 del PORT C (DDRC1) è possibile attivare o fermare il conteggio del timer 1 con un segnale esterno. Infine, portando al valore logico 0 sia il bit TOUT che il DOUT attiviamo il funzionamento contaeventi. In questo caso, l’ingresso del prescaler viene scollegato dal clock interno e collegato al piedino TIM1 del chip e ogni variazione di stato del segnale in ingresso causa un decremento del valore caricato nel prescaler. Il piedino TIM1 deve ovviamente essere inizializzato come ingresso dal registro direzione DDRC1. Continuiamo la descrizione di TSCR1 e passiamo al D6 denominato ETI (Enable Timer Interrupt). Questo bit abilita, se posto a 1, o disabilita, se posto a 0, la funzione di generazione di interrupt. Nel primo caso, l’hardware del micro processa automaticamente l’istruzione contenuta nel vettore #4 qualora avviene l’overflow del contatore.

Il kit è disponibile da Futura Elettronica

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 9 utenti e 55 visitatori collegati.

Ultimi Commenti