290 likes | 441 Views
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"
E N D
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 obtenons plusieurs 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 format INTEL sa définition complète est disponible sur WIKIPIDIA à cette adresse : http://en.wikipedia.org/wiki/.hex
La section qui nous intéresse se situe complè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 droite 02400E00413F30 mais en regroupant deux nombres à la fois : 02 40 0E 00 41 3F 30 02 40 0E 0041 3F 30 30 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 = 0011 F = 1111 4 = 0100 1 = 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 toutes les possibilités de configurations pour les fuses du Pic 16F628 choisit par Claude lors de l’é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 0 dans 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/CLKIN 110 = ER oscillator: I/O function on RA6/OSC2/CLKOUT pin, Resistor on RA7/OSC1/CLKIN 101 = INTRC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN 100 = INTRC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN 011 = EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN 010 = HS oscillator: High speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN 001 = XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN 000 = 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équence pour 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 compilateur PICBASICPRO construit le "Configuration Word" ce fichier se trouve dans votre compilateur PicBasicPro dans le dans le dossier C:\PBP\INC et ouvrez "M16F62XA.INC"
; *** DEVICE Fuses Definitions RC_OSC_CLKOUT equ 3FEC0013h ; XX XXXX XXX1 XX11 ER_OSC_CLKOUT equ 3FEC0013h ; XX XXXX XXX1 XX11 RC_OSC_NOCLKOUT equ 3FEC0012h ; XX XXXX XXX1 XX10 ER_OSC_NOCLKOUT equ 3FEC0012h ; XX XXXX XXX1 XX10 RC_OSC equ 3FEC0012h ; XX XXXX XXX1 XX10 INTRC_OSC_CLKOUT equ FEC0011h ; XX XXXX XXX1 XX01 INTOSC_OSC_CLKOUT equ 3FEC0011h ; XX XXXX XXX1 XX01 INTRC_OSC_NOCLKOUT equ 3FEC0010h ; XX XXXX XXX1 XX00 INTOSC_OSC_NOCLKOUT equ 3FEC0010h ; XX XXXX XXX1 XX00 INTRC_OSC equ 3FEC0010h ; XX XXXX XXX1 XX00 EXTCLK_OSC equ 3FEC0003h ; XX XXXX XXX0 XX11 EC_OSC equ 3FEC0003h ; XX XXXX XXX0 XX11 HS_OSC equ 3FEC0002h ; XX XXXX XXX0 XX10 XT_OSC equ 3FEC0001h ; XX XXXX XXX0 XX01 LP_OSC equ 3FEC0000h ; XX XXXX XXX0 XX00 WDT_ON equ 3FFB0004h ; XX XXXX XXXX X1XX WDT_OFF equ 3FFB0000h ; XX XXXX XXXX X0XX PWRT_ON equ 3FF70000h ; XX XXXX XXXX 0XXX PWRT_OFF equ 3FF70008h ; XX XXXX XXXX 1XXX MCLR_ON equ 3FDF0020h ; XX XXXX XX1X XXXX MCLR_OFF equ 3FDF0000h ; XX XXXX XX0X XXXX BOD_ON equ 3FBF0040h ; XX XXXX X1XX XXXX BOD_OFF equ 3FBF0000h ; XX XXXX X0XX XXXX LVP_ON equ 3F7F0080h ; XX XXXX 1XXX XXXX LVP_OFF equ 3F7F0000h ; XX XXXX 0XXX XXXX CPD_ON equ 3EFF0000h ; XX XXX0 XXXX XXXX CPD_OFF equ 3EFF0100h ; XX XXX1 XXXX XXXX PROTECT_ON equ 1FFF0000h ; 0X XXXX XXXX XXXX PROTECT_OFF equ 1FFF2000h ; 1X XXXX XXXX XXXX
Ceci termine l’explication des fuses utilisées pour le programme "Horloge Calendrier" avec le PIC 16F628 Pour les prochains ateliers, nous utiliserons un nouveau PIC, le 16F690, si le programme avait été écrit avec ce PIC, voici les quelques changements aux fuses nécessaires au fonctionnement 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
FCMEN Fail-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 commutant automatiquement l'horloge du dispositif au bloc interne d'oscillateur Par défaut, le "Fail-Safe Clock Monitor" est désactivé. bit 11 FCMEN: Fail-Safe Clock Monitor Enabled bit 1 = Fail-Safe Clock Monitor is enabled 0 = Fail-Safe Clock Monitor is disabled
IESO Internal External Switchover Two speed start-up /Internal External switchover Le mode de démarrage à deux vitesses réduit au minimum la latence entre le démarrage de l’oscillateur et l'exécution externe du code. Le code commence à s'exécuter à partir des oscillateurs internes tandis que l'oscillateur externe se stabilise. Quand l'oscillateur externe est stable, le dispositif commute automatiquement à la source extérieure réduisant les périphériques du programme (program overhead). bit 10 IESO: Internal External Switchover bit 1 = Internal External Switchover mode is enabled 0 = 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 0001Le "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é à mieux comprendre la section des Fuses dans un programme! Serge VE2HLS Février 2009