Tutorials - PIC18 by Data Sheet

 

Pagina 22-25

 


 

Il REGISTRO OSCCON e l' OSCILLATORE SECONDARIO

Esiste una ulteriore possibilità per generare il clock ed è quella di utilizzare i due pin programmabili come accessi al TIMER1.
Questo secondo oscillatore va configurato con componenti esterni in modo del tutto simile alla modalità LP-XS dell' oscillatore principale, ovvero condensatori, cristallo o risonatore e resistenza serie.. Questo oscillatore è stato previsto appositamente per impiegare quarzi del genere utilizzato in orologeria (valore tipico 32768 Hz). 
In apparenza, nulla sulle specifiche vieterebbe di utilizzare altre frequenze, però questo oscillatore secondario viene sempre presentato con valori molto più bassi di quelli dei cristalli applicabili all' oscillatore primario.  Il fatto che l' uso di un quarzo low power come quelli da orologio richieda forzatamente una resistenza Rs del valore di qualche centinaio di kohm (typ. 220 k) indicherebbe peraltro che l' oscillatore può fornire una certa corrente e quindi operare anche con quarzi o risonatori più "duri" o con frequenza maggiore.
Può essere un campo per lo sperimentatore.

Per disporre di questo oscillatore occorre programmare i pin di accesso a Timer1 (T1OSCEN in T1CON) come oscillatore e collegare i necessari elementi esterni, ma la prima cosa da fare per utilizzarlo è quella di predisporlo nella fase di configurazione, abilitando il bit  OSCS del registro  _CONFIG1H. 
Con la sintassi stile PIC16, sarebbe necessario aggiungere alla riga  __CONFIG gli elementi _CONFIG1H, _OSCS_ON, mentre con la sintassi applicabile ai PIC18 a partire dal MPASM7 basterà aggiungere la riga: CONFIG OSCS = ON.

Una particolarità sensibile è quella di poter far passare il processore sotto controller software dall' oscillatore primario a questo oscillatore ausiliario e viceversa, ottenendo la possibilità di un funzionamento a piena velocità quando necessario, mentre una frequenza notevolmente inferiore servirà a mantenere attivo, ma a basso consumo, il processore stesso.

La commutazione tra le diverse sorgenti è effettuata con i bit SCS1:0 del registro OSCCON (OSCillator CONtrol register).

Prima di commutare da una sorgente di clock all' altra occorre considerare che l' operazione richiede un certo tempo per la stabilizzazione. Questo tempo è calcolabile come due cicli del clock precedente più tre cicli del nuovo clock.

 

OSCCON

bit

IDLEN

IRCF2

IRCF1

IRCF0

OSTS

IOFS

SCS1

SCS0

funzione

R/W

R/W

R/W

R/W

R

R

R/W

R/W

default

0

1

0

0

 

0

0

0

  • bit 7       IDLEN : Idle Enable bit
                 1 = il dispositivo va in modalità IDLE a seguito di una istruzione SLEEP
                 0 = il dispositivo va in SLEEP a seguito di una istruzione SLEEP (valore di default al RESET)

  • bit 6-4   IRCF2:0 Selezione della frequenza dell' oscillatore interno INTOSC
                 111 =  8MHz
                 110 = 4 MHz
                 101 = 2 MHz
                 100 = 1 MHz  (valore di default al RESET)
                 011 = 500 kHz
                 010 = 250 kHz
                 001 = 125 kHz
                 000 = 31 kHz

  • bit 3      OSTS : Oscillator Start up Time Status
                 1 =  Tempo di start up esaurito - l' oscillatore sta operando
                 0 =  Tempo di start up in corso - l' oscillatore non è al valore nominale

  • bit 2      IOFS :  INTOSC Frequency stable
                 1 =  la frequenza prodotta da INTOSC è stabile
                 0 =  la frequenza prodotta da INTOSC non è stabile

  • bit 1-0 SCS1:0 :  System Clock Selected bit
                 1x = Oscillatore interno
                 01 = Oscillatore del Timer 1
                 00 = Oscillatore primario

I bit SCS1:0 permettono di selezionare la sorgente del clock da attivare, ovvero l' oscillatore primario, quello interno o quello ausiliario.
L' oscillatore primario è quello definito dai bit CSS1:0 del registro CONFIG1H. In conseguenza di qualsiasi RESET, i bit SCS sono posti a 0, quindi il default di partenza è sempre l' oscillatore primario.

I bit IRFC2:0 selezionano il divisore della frequenza dell' oscillatore INTOSC. Se l' oscillatore generale in uso è INTOSC, l' azione su questi bit è immediata e non ci sono tempi di attesa per il cambio di valore del clock. Va ricordato che per default dopo il RESET il valore impostato è 100, ovvero è selezionata la frequenza di 1MHz.

Se viene selezionata la frequenza di 31 kHz, si può scegliere attraverso OSCTUNE<7> se inviare questa frequenza o quella generata da INTRC al clock principale.. Questo disabilita INTOSC e riduce il consumo del processore. (in ogni caso INTRC è sempre attivo per alimentare watchdog, fail safe timer, ecc).

I bit OSTS, IOFS e T1RUN(T1CON<6>) indicano quale sorgente sta fornendo il clock. OSTS indica che il tempo di assestamento dell' oscillatore ed eventuale PLL è completato. IOFS ha la stessa funzione in relazione all' INTOSC. 
T1RUN indica che il clock sta arrivando dall' oscillatore secondario. 
Nelle modalità di funzionamento a gestione del risparmio energetico, solo uno di questi tre bit è a livello 1. Se nessuno lo è, allora il clock del processore è fornito da INTRC oppure l' oscillatore interno INTOSC si è appena avviato e non ha ancora esaurito il tempo di assestamento.

Il bit IDLEN controlla in che modo verrà eseguita l' istruzione SLEEP , potendo scegliere tra uno sleep completo e un modo idle a basso consumo.

 


Commutazione tra due sorgenti di Clock

Per fare un esempio pratico, supponiamo di avere un clock primario con un  quarzo da 10 MHz e un clock secondario con un quarzo da 32768 Hz :

; configurazione per abilitare lo switch tra le sorgenti di clock
 CONFIG IESO = ON

; configurazione per abilitare l' oscillatore principale in modo HS
 CONFIG OSC = HS       ; Oscillatore principale

........

; il sistema si avvia per default con l' oscillatore primario
....
; passaggio dal funzionamento a 10 MHz
; a quello a 32 kHz
  bsf T1CON,T1OSCEN    ; avvio oscillatore secondario
  ....                 ; attesa per il tempo di stabilizzazione
  bsf OSCCON,SCS0      ; scambio sull’oscillatore secondario
  ...
  ...
; rientro all' oscillatore primario
  bcf OSCCON,SCS0     ; scambio sull’oscillatore principale
  ...                 ; attesa per il tempo di stabilizzazione

 


 

 

 

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