Les Fuses
par Serge VE2HLS
Nous allons dans ce document essayer de démystifier la section des Fuses que tous utilisent dans l’écriture d’un programme avec un microcontrôleur de modèle PIC!
Voici le choix de fuses que Claude VE2APS a utilisé pour son programme
"Horloge Calendrier"
XT_OSC,WDT_OFF,MCLR_OFF,PWRT_ON,BOD_ON,LVP_OFF,CPD_OFF,PROTECT_OFF
Après avoir compilé le programme"Horloge Calendrier"
nous obtenonsplusieurs fichiers dont le fichier HEX
"Horloge et calendrier.HEX "
Voici quelques trucs pour mieux comprendre ce fameux fichier " HEX "
Premièrement le fichier HEX est de formatINTEL sa définition complète est disponible
sur WIKIPIDIA à cette adresse :
http://en.wikipedia.org/wiki/.hex
Il est facile d’ouvrir le fichier HEX avec Bloc-notes
La section qui nous intéresse se situecomplètement dans la bas
de ce fichier "HEX "
Cette ligne représente nos fuses en format "INTEL«
:02400E00413F30
Il faut lire cette ligne en partant de la droite02400E00413F30
mais en regroupant deux nombres à la fois : 02 40 0E 00 41 3F 30
02 40 0E 00 41 3F 3030 est le checksum de la ligne
3F41 défini les fuses qui sont utilisées
Voici un façon simple de comprendre ce que nous indique 3F41
Ce 3F41 représente en hexadécimale :3 = 0011F = 11114 = 01001 = 0001
La séquence 3F41 format Intel représente
0011 1111 0100 0001 en format Hexadécimale
0011 1111 0100 0001 est le"Configuration Word"
de 14 bits qui sera envoyé au Pic pour lui indiquer le choix des fuses que le
programmeur a choisit dans son programme
Dans la prochaine positive vous avez toutesles possibilités de configurations pour les fuses
du Pic 16F628 choisit par Claude lors del’écriture de son programme, le tableau est
disponible dans le data sheet
Prenons la première fuse XT_OSC dans la séquence choisit par Claude dans la liste :
XT_OSC,WDT_OFF,MCLR_OFF,PWRT_ON,BOD_ON,LVP_OFF,CPD_OFF,PROTECT_OFF
La fuse XT_OSC se sert des Bits 4, 1 et 0dans la séquence 0110 1111 0100 0001
bit 4, 1-0: FOSC2:FOSC0: Oscillator Selection bits(4)111 = ER oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN110 = ER oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN101 = INTRC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN100 = INTRC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN011 = EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN010 = HS oscillator: High speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN001 = XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN000 = LP oscillator: Low power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
Si on revient à notre "Configuration Word" 0011 1111 0100 0001 nous avons trois bits de trouvés :
0011 1111 0100 0001
XT_OSC equ 3FEC0001h ; XX XXXX XXX0 XX01
Par la suite on refait la même séquence pour la fuse suivante : WDT_OFF
WDT_OFF equ 3FFB0000h ; XX XXXX XXXX X0XX
nous avons maintenant quatre bits de trouvés : 0011 1111 0100 0001
Il est par la suite facile de compléter la séquencepour chacune des autres fuses :
MCLR_OFF,PWRT_ON,BOD_ON,LVP_OFF,CPD_OFF,PROTECT_OFF
C’est ainsi que nous obtenons notre"Configuration Word" de 0011 1111 0100 0001
Voici comment le compilateurPICBASICPRO construit le
"Configuration Word"ce fichier se trouve dans votre
compilateur PicBasicProdans le dans le dossier
C:\PBP\INC et ouvrez "M16F62XA.INC"
; *** DEVICE Fuses DefinitionsRC_OSC_CLKOUT equ 3FEC0013h ; XX XXXX XXX1 XX11ER_OSC_CLKOUT equ 3FEC0013h ; XX XXXX XXX1 XX11RC_OSC_NOCLKOUT equ 3FEC0012h ; XX XXXX XXX1 XX10ER_OSC_NOCLKOUT equ 3FEC0012h ; XX XXXX XXX1 XX10RC_OSC equ 3FEC0012h ; XX XXXX XXX1 XX10INTRC_OSC_CLKOUT equ FEC0011h ; XX XXXX XXX1 XX01INTOSC_OSC_CLKOUT equ 3FEC0011h ; XX XXXX XXX1 XX01INTRC_OSC_NOCLKOUT equ 3FEC0010h ; XX XXXX XXX1 XX00INTOSC_OSC_NOCLKOUT equ 3FEC0010h ; XX XXXX XXX1 XX00INTRC_OSC equ 3FEC0010h ; XX XXXX XXX1 XX00EXTCLK_OSC equ 3FEC0003h ; XX XXXX XXX0 XX11EC_OSC equ 3FEC0003h ; XX XXXX XXX0 XX11HS_OSC equ 3FEC0002h ; XX XXXX XXX0 XX10
XT_OSC equ 3FEC0001h ; XX XXXX XXX0 XX01LP_OSC equ 3FEC0000h ; XX XXXX XXX0 XX00WDT_ON equ 3FFB0004h ; XX XXXX XXXX X1XX
WDT_OFF equ 3FFB0000h ; XX XXXX XXXX X0XX
PWRT_ON equ 3FF70000h ; XX XXXX XXXX 0XXXPWRT_OFF equ 3FF70008h ; XX XXXX XXXX 1XXXMCLR_ON equ 3FDF0020h ; XX XXXX XX1X XXXX
MCLR_OFF equ 3FDF0000h ; XX XXXX XX0X XXXX
BOD_ON equ 3FBF0040h ; XX XXXX X1XX XXXXBOD_OFF equ 3FBF0000h ; XX XXXX X0XX XXXXLVP_ON equ 3F7F0080h ; XX XXXX 1XXX XXXX
LVP_OFF equ 3F7F0000h ; XX XXXX 0XXX XXXXCPD_ON equ 3EFF0000h ; XX XXX0 XXXX XXXX
CPD_OFF equ 3EFF0100h ; XX XXX1 XXXX XXXXPROTECT_ON equ 1FFF0000h ; 0X XXXX XXXX XXXX
PROTECT_OFF equ 1FFF2000h ; 1X XXXX XXXX XXXX
Ceci termine l’explication des fuses utiliséespour le programme "Horloge Calendrier"
avec le PIC 16F628
Pour les prochains ateliers, nous utiliseronsun nouveau PIC, le 16F690, si le programmeavait été écrit avec ce PIC, voici les quelques
changements aux fuses nécessaires aufonctionnement du programme
Premièrement comparons les deux "Configuration Word"
Le 16F628
Le 16F690
Le 16F690 possède deux nouvelles fonctions
"FCMEN" bit 11 et "IESO" bit 10
FCMENFail-Safe Clock Monitor Enabled
Le "Fail-Safe Clock Monitor" permet au microcontrôleur 16F690 de continuer l'opération en cas d'un échec externe de l'oscillateur en commutantautomatiquement l'horloge du dispositif au bloc interne d'oscillateurPar défaut, le "Fail-Safe Clock Monitor" est désactivé.
bit 11 FCMEN: Fail-Safe Clock Monitor Enabled bit1 = Fail-Safe Clock Monitor is enabled0 = Fail-Safe Clock Monitor is disabled
IESOInternal External Switchover
Two speed start-up /Internal External switchoverLe mode de démarrage à deux vitesses réduit au minimum la latence entre ledémarrage de l’oscillateur et l'exécution externe du code. Le codecommence à s'exécuter à partir des oscillateurs internes tandis quel'oscillateur externe se stabilise. Quand l'oscillateur externe est stable, ledispositif commute automatiquement à la source extérieure réduisant lespériphériques du programme (program overhead).
bit 10 IESO: Internal External Switchover bit1 = Internal External Switchover mode is enabled0 = Internal External Switchover mode is disabled
Claude n’utilise pas ces deux nouvelles fonctions
nous allons donc désactiver ces deux fuses!
Voici la nouvelle ligne des fuses pour le 16F690 :
XT_OSC,WDT_OFF,MCLR_OFF,PWRT_ON,BOD_ON,CPD_OFF,PROTECT_OFF,IESO_OFF, FCMEN_OFF
Note : Le 16F690 ne possède pas la fonction LVP, Low Voltage Programming
Après compilation avec le nouveau 16F690 du programme "Horloge Calendrier"
nous obtenons dans le fichier HEX les fuses 33C1en hexadécimale 0011 0011 1100 0001
Le "Configuration Word" du 16F690 utilise seulement 12 bits pour programmer le registre
33C1 ou 0011 0011 1100 0001
J’espère que ce document vous a aidé à mieuxcomprendre la section des Fuses
dans un programme!
Serge VE2HLS Février 2009