ELEMANIA
PIC16F690 - Configuration Word
Configuration Word

Osservando la mappa della EEPROM si noterà che esiste un'area di 127 locazioni (indirizzi 2000-207F) che non sono destinate al programma. Queste locazioni servono per memorizzare in EEPROM alcune informazioni di configurazione (cioè dati che non devono essere modificati da programma, ma che vengono scritti direttamente in EEPROM):

Di particolare interesse per il programmatore in questa area di memoria è la Configuration Word (all'indirizzo 2007h). Questa parola serve per settare la configurazione iniziale di alcuni dispositivi interni al PIC al momento dell'accensione del microcontrollore. In pratica svolge la funzione che nei vecchi apparati elettrici veniva svolta dai cosiddetti dip switch (o dai jumper o, ancora prima, dai fusibili): schiere di microinterruttori mediante i quali era possibile configurare il comportamento di una scheda al momento dell'accensione.

I diversi bit della Configuration Word sono mostrati nella figura qui sotto:

Il significato dei nomi dei bit (come riportato dal manuale) è il seguente:

Per una spiegazione dettagliata delle funzioni di ogni bit della Configuration Word rimandiamo alla lettura del manuale del componente. Nelle prossime lezioni considereremo invece solo le funzioni più importanti e più utilizzate nel normale funzionamento del PIC.

Settare la Configuration Word da MPLAB-IDE

La Configuration Word deve essere scritta al momento della programmazione del PIC, cioè quando il firmware viene scritto sulla memoria interna del PIC. Supponendo qui di usare l'ambiente di sviluppo MPLAB-IDE per la scrittura del firmware, vediamo brevemente le opzioni disponibili.

MPLAB offre diversi modi per settare i bit della Configuration Word. Il primo fa uso del menu Configure/Configuration bits di MPLAB. Per poter modificare il valore dei bit di configurazione bisogna prima togliere il segno di spunta alla voce Configuration Bits set in code e quindi, dopo aver assegnato i valori desiderati, rimetterla:

Un altro modo consiste invece nell'usare la direttiva  __CONFIG (con due underscore '_' all'inizio). Di solito questa direttiva viene posta all'inizio del programma assembly (prima della direttiva ORG) per specificare il valore dei diversi bit, per esempio in questo modo:

__CONFIG B'11000011100100'

ORG 0 ; indirizzo iniziale in memoria EPROM
... ; seguono le istruzioni del programma

Con la precedente scrittura, per esempio, viene settato l'oscillatore interno, disabilitato il timer Watchdog, abilitato il Master Clear etc., esattamente come nell'esempio precedente (che faceva uso del menu Configure).

Un modo ancora più comodo consiste nell'uso delle costanti predefinite del PIC. In pratica l'attivazione o il reset di ogni bit del registro di configurazione corrisponde a una costante letterale. Per esempio _FCMEN_ON serve per settare il bit _FCMEN, mentre _FCMEN_OFF serve per resettarlo. Il significato delle costanti predefinite è il seguente:

Nome della costante Significato
_FCMEN_ON abilita il fail safe clock
_FCMEN_OFF disabilita il fail safe clock
_IESO_ON abilita l'Internal/External Oscillator Switchover
_IESO_OFF disabilita l'Internal/External Oscillator Switchover
_BOR_ON abilita il Brown-out Reset
_BOR_NSLEEP abilita il Brown-out Reset durante il normale funzionamento e lo disabilita nello stato di Sleep
_BOR_SBODEN il Brown-out Reset è controllato dal bit SBOREN
_BOR_OFF disabilita il Brown-out Reset
_CPD_ON abilita il Data memory code protection
_CPD_OFF disabilita il Data memory code protection
_CP_ON abilita il Program memory code protection
_CP_OFF disabilita il Program memory code protection
_MCLRE_ON abilita il Master Clear Reset
_MCLRE_OFF disabilita il Master Clear Reset (pin RA3/MCLR usanto come input)
_PWRTE_OFF abilita il Power-up Timer
_PWRTE_ON disabilita il Power-up Timer
_WDT_ON abilita il Watchdog Timer
_WDT_OFF disabilita il Watchdog Timer
_LP_OSC oscillatore esterno LP
_XT_OSC oscillatore esterno XT
_HS_OSC oscillatore esterno HS
_EC_OSC oscillatore esterno EC
_INTRC_OSC_NOCLKOUT oscillatore interno senza uscita di clock (CLKOUT)
_INTRC_OSC_CLKOUT oscillatore interno con uscita di clock (CLKOUT)
_EXTRC_OSC_NOCLKOUT oscillatore esterno RC senza uscita di clock (CLKOUT)
_EXTRC_OSC_CLKOUT oscillatore esterno RC con uscita di clock (CLKOUT)
_INTOSCIO oscillatore interno con I/O sui pin RA4 e RA5
_INTOSC oscillatore interno con CLKOUT sul pin RA4 e I/O sul pin
RA5
_EXTRCIO oscillatore esterno con I/O sui pin RA4 e RA5
_EXTRC oscillatore esterno con CLKOUT sul pin RA4 e I/O sul pin
RA5

Qui sotto è mostrato un esempio di uso delle costanti predefinite, con i valori di default suggeriti nel file template del pic16f690 (bisogna concatenare i valori fra loro con l'operatore &):

INCLUDE <P16F690.INC>

__CONFIG _CP_OFF & _CPD_OFF & _BOR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _FCMEN_OFF & _IESO_OFF

ORG 0 ; indirizzo iniziale in memoria EPROM

Di solito in effetti (a meno che non si vogliano usare funzioni particolari) questo è il modo normalmente utilizzato. Infatti è anche il più pratico, in quanto è sufficiente copiare la stringa precedente all'inizio del proprio programma per settare i bit di configurazione.

 

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it