Tutorials - PIC 

 

PIC16F526


Il clock

Fino ad ora abbiamo citato un clock, ma non abbiamo ancora specificato da dove deriva.

In questo PIC, con un limitato numero di pin, è possibile sia attivare il generatore del clock integrato che utilizzare un oscillatore esterno. Nel primo caso non è necessario alcun componente esterno, come quarzi, condensatori, ecc.

Il modulo oscillatore interno consente di generare un clock a 4 / 8MHz, selezionabili dalla configurazione, corrispondenti rispettivamente ad un ciclo di istruzione di 1us e di 500ns.

Con componenti esterni sono attivabili varie tipologie di oscillatore; nella tabella sono indicate le opzioni da introdurre nella linea di __config:

Oscillatore esterno Frequenza DRT
_FOSC_LP    osc. esterno LP 
_LP_OSC     alias
typ. 32kHz 18ms
_FOSC_XT    osc. esterno XP 
_XT_OSC     alias
200k-4MHz 18ms
_FOSC_HS    osc. esterno HS 
_HS_OSC     alias
>4MHz 18ms
_FOSC_EC    oscillatore EC - RB4 I/O
_EC_OSC     alias
  1.125ms
_FOSC_ExtRC_CLKOUT  EXTRC - Clockout su RB4
_ExtRC_OSC_CLKOUT   alias
  1.125ms

L' oscillatore esterno prevede l' uso di cristalli o RC; il limite è massimo è in funzione della tensione di alimentazione:

Vdd Fosc
ext
Intosc 
o RC
5.5-4.5 20 8
4.5-3 10 8
3-2 4 8

Applicazioni di questa possibilità sono RTC, misure di frequenza e periodo, misure di tempo, generazione di segnali e clock in cui la precisione richiesta è quella di un cristallo o necessità di aumentare le performances oltre gli 8MHz del clock interno.
E' da notare la possibilità di utilizzare il pin RB4 come uscita del clock, che può essere utilizzato per sincronizzazione ad altri circuiti.

Per l' oscillatore interno sono previste pure due modalità:

Oscillatore interno

Frequenza DRT
_FOSC_INTRC_RB4     osc. interno - RB4 I/O
_IntRC_OSC_RB4      alias
4 / 8MHz 1.125ms
_FOSC_INTRC_CLKOUT  osc int. - Clockout su RB4
_IntRC_OSC_CLKOUT   alias
4 / 8MHz 1.125ms

Anche in questo caso è possibile indirizzare l' uscita del clock su RB4.

Per tutte le modalità è previsto, in mancanza di modulo PWRT (PoWeR on Timer), un tempo di stabilizzazione generato da un modulo DRT interno. Di questo potrebbe essere necessario tenere conto in applicazione in cui i tempi di avviamento sono critici. Maggiori dettagli su questa funzione sono ricavabili dal foglio dati del componente, nel paragrafo 8.5-Device Time Reset.

La precisione del generatore interno, che è un RC, è comunque sufficientemente elevata per moltissimi casi; essa viene determinata dal costruttore e il valore generato può essere ancora aggiustato agendo su un opportuno registro. Questo registro prende il nome di OSCCAL. Questa è la sua struttura:

OSCCAL

bit

7 6 5 4 3 2 1 0

nome

CAL6

CAL5

CAL4

CAL3

CAL2

CAL1

CAL0

-

funzione

R/W

R/W

R/W

R/W

R/W

R/W

R/W

-

default

1 1 1 1 1 1 1

0

  • bit 7:1 CAL6:0 valore di calibrazione
                   0111111 = frequenza massima
                   ...
                   0000001
                   0000000 = valore centrale
                   1111111
                   ...
                   1000000 = frequenza minima

  • bit 0   non usato - lettura = 0 
                        scrittura senza effetto  

In sostanza, i primi sette bit del registro si applicano come fattore correttivo della frequenza generata dal clock interno. Rispetto ad un valore ideale centrale di 0000000, variando questi bit si potrà ottenere una frequenza maggiore o minore, in range non ben definito, ma che si può supporre di un 10% circa rispetto al valore nominale.

Se osserviamo ancora i default, possiamo vedere che al reset viene applicato un valore binario di 11111110 al registro OSCCAL . Questo non è detto sia il valore di calibrazione ideale.   

Microchip calibra in fabbrica ogni chip per avere la frequenza di clock più precisa possibile ed ha realizzato un sistema per fa si che l' utente possa effettuare questa calibrazione, se lo ritiene necessario. Il meccanismo è singolare:

  • il valore di calibrazione di fabbrica è salvato nell' ultima cella della memoria programma, che è in tecnologia flash, quindi scrivibile e cancellabile, pur potendo mantenere i dati per lungo tempo (>100 anni).
  • questo valore è nel formato di una istruzione movlw valore
  • il vettore di reset, ovvero il punto da cui comincia la scansione delle istruzioni è spostato dall' indirizzo 00 a quello di questa cella.

Ne risulta che al reset il processore inizia con l' istruzione  e il Program Counter (PC) avanza portandosi a 00 dove l' utente piazza le sue istruzioni. Quindi, volendo calibrare l' oscillatore con il valore "ufficiale", la prima istruzione al reset sarà una scrittura di OSCCAL con il contenuto di W, che è il valore di calibrazione.
ovviamente, se non interessa la precisione dell' oscillatore, questa fase iniziale può essere evitata.

Il valore di calibrazione in uscita dalla fabbrica è scritto in una locazione di Flash, quindi sovra scrivibile o cancellabile.

   
Nel programmare il componente occorre avere cura di NON cancellare la calibrazione dell' oscillatore impostata dalla fabbrica. 
Se il dispositivo di programmazione non permette una esclusione di questa locazione, occorre leggerla e salvarne il valore PRIMA di avviare la programmazione e riscriverla durante la programmazione.

I tools di programmazione di Microchip (Pickit, ICD, RealIce) dispongono dell' opzione di non cancellazione del valore di calibrazione di fabbrica.

La scelta della frequenza dell' oscillatore interno viene effettuata sempre nel config con le opzioni:

_IOSCFS_4MHz 4 MHz 
_IOSCFS_8MHz 8 MHz

Se non viene inserita una opzione, il default del bit di configurazione non programmato è a 1, ovvero il clock interno è a 8MHz.


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 18/10/13.