Het CONFIG register

In cursus deel 1 staat vermeldt dat je met CONFIG de configuratiebits (de "fuses") kunt instellen, wat houdt dit precies in?
Met CONFIG stel je de bits in van het configuratieregister van 10F, 12F en 16F PIC's.
Deze bits kun je zien als een rij schakelaars die je in moet stellen, om de PIC te laten werken naar de wensen die je hebt voor het project waarin de PIC zit.
Configuratiebits zijn sterk afhankelijk van het PIC type en verschillen daarom van PIC tot PIC.
De 16F628A heeft maar een klein aantal configuratie instellingen (acht stuks) die allen in één word (= 16-bits) passen, deze zijn:

CP
CPD
LVP
BOREN
MCLRE
PWRTE 
WDTE
FOSC
Code Protection
Code Protection Data
Low-Voltage Programming 
Brown Out Reset ENable
Master CLeaR Enable
PoWeR-up Timer Enable
WatchDog Timer Enable
Frequency OSCillator
Kopie beveiliging in- of uitschakelen
Kopie beveiliging in- of uitschakelen van de interne EEPROM
PIC programmeren met een lage programmeerspanning
Wel of geen reset bij te lage voedingsspanning
Pin 4 gebruiken als ingang of als master reset pin
Wel of niet de opstart timer gebruiken
Watchdog timer in- of uitschakelen
Oscillatortype selecteren (intern / extern en welk type)
 

Je ziet, bits zijn net schakelaars, met bijvoorbeeld bit CP zet je de kopie beveiliging aan of uit en met MCLRE kun je de keuze maken of pin 4 gebruikt gaat worden als ingangspoort of als resetpin.
FOSC bestaat uit drie schakelaars (bits 4, 1 en 0) van het CONFIG register.
Afhankelijk van hoe deze drie schakelaars (lees bits!) zijn ingesteld, zijn er acht instellingen mogelijk (zie verderop een afbeelding van een pagina uit de datasheet van de 16F628A).

Wanneer je in Proton PIC Basic CONFIG niet opgeeft, dan zijn de default settings (= standaard instellingen) voor de 16F628A:

- kopie beveiligingen niet ingeschakeld.
- LVP uitgeschakeld (programmeren van de PIC met 13V programmeerspanning (Wisp648 / Galva Wisp).
- brown-out reset uitgeschakeld.
- pin 4 ingesteld als resetpin (master clear).
- power-up timer ingeschakeld.
- watchdog timer ingeschakeld.
- HS_OSC externe oscillator (er is dan een kristal of resonator van 4MHz of sneller nodig).

 

DEVICE 16F628A                ;We gebruiken een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF 
ALL_DIGITAL TRUE              ;Alle ingangen digitaal

WHILE 1 = 1                   ;Zolang 1 gelijk is aan 1...
  TOGGLE PORTA.1              ;Aan moet uit, uit moet aan
  DELAYMS 500                 ;500 milliseconden = 0,5 seconde
WEND                          ;...deze lus uitvoeren

Je hoeft ook niet álle fuses op te geven, alleen de fuses opgeven die in jouw geval anders moeten zijn dan de defaultwaarde (= standaardinstelling) is voldoende.
In de CONFIG regel van de cursusvoorbeelden (zie hierboven) staan de fuses CP_OFF en DATA_CP_OFF bijvoorbeeld nooit vermeldt, omdat deze toch al standaard uitgeschakeld staan.

Toch is het beter om alle configuraties in je programma op te geven, dan van de default settings uit te gaan.
Het zijn namelijk de default settings van de compiler, en als Crownhill (van de Proton compiler) bij een update ineens besluit om een bepaalde instelling te wijzigen (het zal wel niet gebeuren, maar tóch...), dan is het voor jou een raadsel waarom een PIC programma na het updaten van de compiler ineens niet meer werkt.
Ik geef toe dat ook ik niet alle config settings in de cursus voorbeelden heb opgesteld (zo heb ik dus nergens de CP en CP_DATA van Copy Protect opgegeven).
In mijn eigen programma's plaats ik altijd alle config-settings in de config lijst, dit kan ook schelen met fout zoeken.
 

CP
De te gebruiken namen in PIC Basic zijn: CP_ON en CP_OFF.
Met deze fuse kun je je programma die in de PIC is geprogrammeerd beveiligen tegen kopiëren.
Door CP in te schakelen is je PIC programma zelf beveiligd, uitlezen met een PIC programmer zal resulteren in allemaal nullen.

CPD
De te gebruiken namen in PIC Basic zijn: DATA_CP_ON en DATA_CP_OFF.
Met CPD kun je de data, die is opgeslagen in de interne EEPROM, beveiligen tegen kopiëren.

LVP
De te gebruiken namen in PIC Basic zijn: LVP_ON en LVP_OFF.
Door deze fuse in te schakelen is de PIC te programmeren zonder de hoge 13V programmeer spanning, 5V is voldoende.
PORTB.4 is dan echter niet te gebruiken als I/O (In/Out) pin, omdat deze dan de functie PGM heeft.
In de cursus wordt altijd geprogrammeerd met de hogere programmeerspanning (LVP is dus niet ingeschakeld).
De Wisp648 en Galva-Wisp PIC programmers programmeren de PIC met de hogere 13Vpp spanning, welke door de Wisp programmers zelf uit de 5V voedingsspanning wordt opgewekt.
PORTB.4 is hierdoor gewoon vrij te gebruiken als in- of uitgang.

BOREN
De te gebruiken namen in PIC Basic zijn: BODEN_ON, BODEN_OFF, BOREN_ON en BOREN_OFF.
Als de brown-out reset is ingeschakeld zal de PIC zichzelf resetten als de voedingsspanning onder een bepaalde spanning komt.
De naam BODEN komt van Brown Out Detection ENabling en stamt af van de 16F628 (zonder 'A') maar heeft hier dezelfde functie.
In de 16F628 was brown-out alleen te detecteren (een status bit).
Vanwege backwards compatibiliteit zijn beide namen (BODEN en BOREN) in PIC Basic toegestaan.

MCLRE
De te gebruiken namen in PIC Basic zijn: MCLRE_ON en MCLRE_OFF.
Als de master clear is ingeschakeld (= enabled) dan fungeert pin 4 van de 16F628A als MCLR pin.
Door het LAAG maken van deze pin zal de PIC zich resetten (het programma begint van voren af aan als de pin weer HOOG wordt gemaakt), dit houdt dus in dat deze pin een HOOG niveau moet hebben gedurende de tijd dat de PIC zijn programma afdraait, en moet er daarom bijvoorbeeld een pull-up weerstand (33k) aan deze pin zitten.
De pin los laten hangen resulteert anders in een PIC die zich op willekeurige momenten reset.
In de cursus is de MCLR pin daarom altijd uitgeschakeld (= disabled).
Dit is gedaan door achter CONFIG de fuse-setting MCLRE_OFF te plaatsen.
Pin 4 is hierdoor geen master reset pin, maar een normale PORTA.5 ingang (deze pin kan overigens niet ingesteld worden als uitgang).

PWRTE
De te gebruiken namen in PIC Basic zijn: PWRTE_ON en PWRTE_OFF.
Als de power-up timer is ingeschakeld, dan blijft de PIC na inschakelen van zijn voedingsspanning nog 72mSec in reset, en zal dan pas met het PIC programma van start gaan.
Hierdoor heeft de inschakelende voedingsspanning de tijd om op een acceptabel niveau (normaal +5V) te komen.

WDTE
De te gebruiken namen in PIC Basic zijn: WDT_ON en WDT_OFF.
Als de watchdog timer is ingeschakeld, zal de PIC zichzelf resetten bij een watchdog time out.
Het is dus noodzakelijk dat tijdens het uitvoeren van het (PIC Basic) programma steeds de watchdog timer op tijd gereset wordt (met CLRWDT), anders dan zal de watchdog timer de PIC gaan resetten.
De watchdog timer kan worden gebruikt om te voorkomen dat een PIC vastloopt.
Als het resetten van de watchdog bijvoorbeeld steeds in de hoofdlus gebeurt, maar het programma zich door een storing niet meer (op tijd) in de hoofdlus bevindt, dan zal de watchdog timer de PIC resetten en zal de PIC met een frisse start beginnen.
In de cursus wordt geen gebruik gemaakt van de watchdog timer en is deze altijd uitgeschakeld met WDT_OFF.

FOSC
De te gebruiken namen in PIC Basic zijn:
RC_OSC_CLKOUT en RC_OSC_NOCLKOUT,
ER_OSC_CLKOUT en ER_OSC_NOCLKOUT,
INTOSC_OSC_CLKOUT en INTOSC_OSC_NOCLKOUT
INTRC_OSC_CLKOUT en INTRC_OSC_NOCLKOUT
EXTCLK_OSC
HS_OSC, XT_OSC en LP_OSC

Vrijwel de hele PIC Basic cursus werkt met de interne oscillator, achter CONFIG staat er hierom INTRC_OSC_NOCLKOUT.
Zie ook cursus deel 3
 

De hierboven getoonde fuse namen die achter CONFIG kunnen worden opgegeven zijn normaal te vinden in de map Program Files\Crownhill\PDS\Includes\PPI
Zoek het bestand P16F628A.PPI en open deze met bijvoorbeeld kladblok.
Wijzig echter niets aan deze bestanden als je niet weet wat het inhoudt.
Onderaan in het bestand staan de te gebruiken fuse namen.

Veel meer informatie over deze "fuses" is te vinden in de datasheet van de 16F628A.


 


Een pagina uit de datasheet van de 16F628A.
 

Let op, het is niet altijd zo dat een '1' betekent dat de fuse ingeschakeld is en een '0' uitgeschakeld.
In het stukje datasheet hierboven zie je dat de watchdog timer WDTE is ingeschakeld als de fuse '1' is.
Maar de power-up timer PWRTE is ingeschakeld als de fuse juist '0' is.
Een fuse met omgekeerde instelling is ook te herkennen aan het streepje dat boven de naam van de fuse staat.
PWRTE heeft dus een streepje boven zijn naam en WDTE niet.
Gelukkig maakt PIC Basic met CONFIG het instellen eenvoudiger, je hoeft er nu niet op te letten of een fuse ingeschakeld is bij een '1' of juist bij een '0', dat regelt PIC Basic voor je.

Het config register is niet in te stellen (of te wijzigen) tijdens uitvoering van het PIC programma.
Als er spanning op de PIC wordt gezet start de PIC op zoals ingesteld in de configuratie instellingen.
(Voor instellen van registers zie ook de extra info bij het PCON register).


PIC18Fxxxx
De configuratie instellingen voor de 18Fxxxx PIC's zijn zo uitgebreid dat het instellen van de configuratiebits op een andere manier gaat:

DEVICE 18F452                 ;We gebruiken een 18F452 type
CONFIG_START
    OSC     = HS              ;Oscillator Selection HS (= High Speed)
    OSCS    = OFF             ;Oscillator Switch Enable uitgeschakeld
    PWRT    = ON              ;Power-up Timer ingeschakeld
    BOR     = OFF             ;Brown-out Reset uitgeschakeld
    BORV    = 25              ;Brown-out Voltage 2.5V
    WDT     = ON              ;Watchdog Timer ingeschakeld
    WDTPS   = 128             ;Watchdog Postscaler 1:128
    CCP2MUX = ON              ;CCP2 MUX Enable (RC1)
    STVR    = OFF             ;Stack Overflow Reset uitgeschakeld
    LVP     = OFF             ;Low Voltage ICSP uitgeschakeld
    DEBUG   = OFF             ;Background Debugger Enable uitgeschakeld
    CP0     = OFF             ;Code Protection Block 0 uitgeschakeld
    CP1     = OFF             ;Code Protection Block 1 uitgeschakeld
    CP2     = OFF             ;Code Protection Block 2 uitgeschakeld
    CP3     = OFF             ;Code Protection Block 3 uitgeschakeld
    CPB     = OFF             ;Boot Block Code Protection uitgeschakeld
    CPD     = OFF             ;Data EEPROM Code Protection uitgeschakeld
    WRT0    = OFF             ;Write Protection Block 0 uitgeschakeld
    WRT1    = OFF             ;Write Protection Block 1 uitgeschakeld
    WRT2    = OFF             ;Write Protection Block 2 uitgeschakeld
    WRT3    = OFF             ;Write Protection Block 3 uitgeschakeld
    WRTB    = OFF             ;Boot Block Write Protection uitgeschakeld
    WRTC    = OFF             ;Configuration Register Write Protection uitgeschakeld 
    WRTD    = OFF             ;Data EEPROM Write Protection uitgeschakeld
    EBTR0   = OFF             ;Table Read Protection Block 0 uitgeschakeld
    EBTR1   = OFF             ;Table Read Protection Block 1 uitgeschakeld
    EBTR2   = OFF             ;Table Read Protection Block 2 uitgeschakeld
    EBTR3   = OFF             ;Table Read Protection Block 3 uitgeschakeld
    EBTRB   = OFF             ;Boot Block Table Read Protection uitgeschakeld
CONFIG_END

ALL_DIGITAL      = TRUE       ;Alle analoge delen uitschakelen
XTAL             = 16         ;Kristal 16MHz

enz...

De diverse configuratiesettings worden bij 18Fxxxx PIC's tussen de keywords CONFIG_START en CONFIG_END geplaatst.
Voor het instellen van de configuratiebits ontkom je niet aan het lezen van de datasheet van de gebruikte PIC.
De gebruikte fuse benamingen voor de 18Fxxxx PIC's (dus namen als OSC, PWRT, LVP, enz.) komen dan ook rechtstreeks uit de datasheet. 


Fuse configurator
In de volledige versie van PIC Basic is het mogelijk om gebruik te maken van een plug-in genaamd Fuse Configurator, die het instellen van de configuratiebits alweer een stuk eenvoudiger maakt.


De Fuse Configurator hier geplaatst in de plug-in toolbar.
In de PIC Basic IDE is een muisklik voldoende om de Fuse Configurator op te starten.

 


Te zien is dat de 16F628A maar acht configuratie instellingen heeft.
Door te klikken op een fuse instelling worden de instelmogelijkheden van de fuses weergegeven.
De Fuse Configurator kiest automatisch het PIC type dat je al in je PIC Basic programma achter DEVICE hebt opgegeven.
Maar het blijft ook mogelijk om een ander PIC type te kiezen.

 


Zijn in de tab Fuse Settings de instellingen eenmaal gemaakt, dan is onder de tab Config Code de CONFIG regel zichtbaar.
Door op Finish te klikken wordt de config regel in je PIC Basic programma geplaatst op de plaats waar je cursor zich op dat moment in je PIC Basic programma bevindt.
Maar het kan natuurlijk ook op de Windows selecteer, kopie en plak manier.

 
Het zal duidelijk zijn dat de Fuse Configurator, vooral bij de grotere PIC's met hun vele configuratiebits, een aangenaam hulpmiddel is.
De Fuse Configurator werkt niet met de LITE versie, alleen met de volledige, nieuwste versie van Proton PIC Basic.
Download de Fuse Configurator vanaf de Wiki pagina van Proton PIC Basic.
 

De Fuse Configurator is te vinden in de lijst met Plugins op de Wiki pagina