- Que sont les fusibles dans AVR - Une explication détaillée
- Bits de fusible dans Arduino
- Composants nécessaires pour tester les fusibles dans l'AVR
- Schéma de test des fusibles dans AVR
- Test des fusibles dans AVR
Dans ce tutoriel, nous allons parler des fusibles. À l'époque où j'étais à l'université et que j'étais en train d'apprendre toutes les choses intéressantes en électronique, j'ai entendu le terme fusionner dans AVR pour la première fois, ma première pensée sur le sujet était, oh! il y a quelque chose à l'intérieur de l'AVR qui va souffler si je fais quelque chose de mal. À l'époque, il n'y avait pas beaucoup de ressources disponibles sur Internet. J'ai cherché un peu pour découvrir que ces fusibles faisaient référence à des bits spéciaux à l'intérieur du microcontrôleur AVR. Ces bits sont comme de minuscules commutateurs à l'intérieur de l'AVR et en les activant / désactivant, nous pouvons activer / désactiver certaines fonctionnalités spéciales de l'AVR. L'activer et le désactiver signifie le réglage et la réinitialisation.
Nous allons profiter de cette occasion pour discuter de tout ce qui existe sur les bits Fuse dans AVR. Pour simplifier, nous prendrons l'exemple d'une carte Arduino qui abrite le populaire microcontrôleur ATmega328P. Ici, vous apprendrez comment configurer ces fusibles pour activer et désactiver certaines de ces fonctionnalités, ce qui est très pratique dans les applications réelles. Alors, allons droit au but.
Dans nos articles précédents, nous avons construit de nombreux projets de microcontrôleurs AVR comme le module d'interfaçage GSM avec le microcontrôleur AVR et l'interfaçage HC-05 avec le microcontrôleur AVR. Vous pouvez les consulter si vous souhaitez en savoir plus sur ces projets.
Que sont les fusibles dans AVR - Une explication détaillée
Comme nous l'avons vu précédemment, les fusibles du microcontrôleur sont comme de petits commutateurs qui peuvent être activés et désactivés pour activer et désactiver diverses fonctionnalités du microcontrôleur AVR. C'est la partie où se pose notre prochaine question, alors comment régler ou réinitialiser ces fusibles? La réponse à cette question est simple: nous le faisons à l'aide de registres de fusibles.
Dans le circuit intégré ATmega328P, il y a un total de 19 bits de fusible et ils sont divisés en trois octets de fusible. Ceux -ci sont définis comme « Octets fusibles étendus », « High Byte fusible », et le « faible » fusible octet.
Si vous regardez le Tableau 27 de la fiche technique ATmega328 / P Rev: 7810D – AVR – 01/15, vous pouvez trouver tous les petits détails sur les embouts de fusible. Mais l'image ci-dessous vous donnera une meilleure idée de la section des bits de fusible de la fiche technique.
Maintenant que vous avez appris un peu plus sur les bits de fusible, parcourons la fiche technique et découvrons tous les détails nécessaires sur ce circuit intégré.
Les embouts fusibles étendus:
Une fois que vous avez cliqué sur l'onglet Fuse Bits et que vous faites défiler un peu vers le bas, vous trouverez le Tableau 27-5: qui montre le tableau de «Extended Fuse Byte» communément appelé « EFUSE». L'image ci-dessous montre exactement cela.
Dans ce tableau, il n'y a que trois bits utilisables, et les trois autres sont réservés. Ces trois bits traitent du niveau de détection des baisses de tension. Comme vous pouvez le voir dans la note si nous regardons le tableau 28-5, nous pouvons trouver plus de détails à ce sujet.
Comme vous pouvez le voir dans le tableau ci-dessus, nous avons le tableau pour la détection des baisses de tension. La détection des baisses de tension est une fonction qui réinitialise le microcontrôleur lorsque la tension d'alimentation tombe en dessous d'un certain niveau de tension. Dans le CI ATmega328P, nous pouvons désactiver complètement la détection de baisse de tension ou nous pouvons la régler aux niveaux indiqués dans le tableau ci-dessus.
Les octets de fusible élevé:
Comme vous pouvez le voir dans l'image ci-dessous, le tableau 27-6: de la fiche technique montre les bits de fusible supérieur de l'ATmega328P IC.
Le fusible haut s'occupe de diverses tâches à l'intérieur du microcontrôleur ATmega328. Dans cette section, nous parlerons des bits de fusible supérieurs et de leur fonctionnement. Commençons par les bits BOOTRST, BOOTSZ0 et BOOTSZ1. Ces trois bits sont responsables de la définition de la taille de démarrage; la taille de démarrage fait référence à la quantité de mémoire réservée à l'installation du chargeur de démarrage.
Un bootloader est un logiciel spécial qui s'exécute au-dessus du microcontrôleur et gère différentes tâches. Mais dans le cas de l'Arduino, le bootloader est utilisé pour télécharger le croquis Arduino à l'intérieur du microcontrôleur. Dans l'un de nos articles précédents, nous vous avons montré comment graver le chargeur de démarrage dans ATmega328P à l'aide d'Arduino. Vous pouvez vérifier cela si vous êtes intéressé par le sujet. Pour en revenir à notre sujet, les objectifs des autres bits de l'octet haut sont assez clairs, le bit EESAVE est de préserver la mémoire EEPROM pendant qu'un cycle d'effacement de puce est effectué. Le bit WDTON permet d'activer ou de désactiver le Watchdog Timer.
La minuterie de surveillance est une minuterie spéciale du circuit intégré ATmega328P qui a son horloge séparée et fonctionne indépendamment. Si le minuteur de surveillance est activé, vous devez l'effacer avec une certaine période, sinon, le minuteur de surveillance réinitialisera le microcontrôleur. C'est une fonctionnalité utile qui vient dans de nombreux microcontrôleurs si le processeur est bloqué; le chien de garde le réinitialisera pour éviter tout dommage à l'application finale.
Le bit DWEN est là pour activer le fil de débogage; il s'agit d'un protocole préparatoire intégré à leur matériel, utilisé pour programmer et déboguer les processeurs. Avec cette fonctionnalité activée, vous pouvez flasher et déboguer le processeur avec un seul fil connecté. Mais pour l'utiliser, vous aurez besoin d'un matériel spécial préparatoire à Atmel.
Les deux bits restants sont les bits que vous devez éviter à moins que vous ne sachiez exactement ce que vous faites. Il s'agit du RSTDISBL bit-7 et du SPIEN bit-5. Le RSTDISBL (External Reset Disable), comme son nom l'indique, désactive la broche de réinitialisation matérielle externe, et le bit SPIEN est utilisé pour désactiver l'interface de programmation SPI. La désactivation de l'un de ces deux bits peut complètement brique votre AVR; donc, les laisser seuls est une bonne idée.
Les octets de fusible bas:
Comme vous pouvez le voir dans l'image ci-dessous, le tableau 27-7: de la fiche technique montre les bits du fusible inférieur de l'ATmega328P IC.
Cet octet de fusible est responsable de la configuration de la source d'horloge et de certains autres paramètres de l'horloge à l'intérieur de l'AVR. Dans cette section, nous apprendrons tout cela.
Le 7ème bit ou l'indicateur CKDIV8 peut être réglé pour diviser la source d'horloge par 8, ceci est très pratique que vous savez peut-être déjà si vous avez essayé de programmer l'AVR vous-même. Le bit suivant est le bit CKOUT et c'est le 6ème bit de l'octet de fusible bas. Sa programmation produirait le signal d'horloge interne sur le PORTB0 du microcontrôleur.
Les bits-5 et bit-4 SUT1 et SUT0 contrôlent le temps de démarrage du microcontrôleur. Ceci empêche toute action de démarrage qui peut ou non avoir lieu avant que la tension d'alimentation puisse atteindre un niveau de tension seuil minimum acceptable. Et les quatre derniers bits CKSEL0 - 4 sont utilisés pour sélectionner la source d'horloge du microcontrôleur. Le tableau ci-dessous vous donne une meilleure compréhension de ces quatre bits qui sont responsables de la configuration de la source d'horloge, vous pouvez trouver ce tableau dans la section Source d'horloge de la fiche technique.
Maintenant, avant d'aller plus loin, il y a une autre chose que je devrais examiner est le tableau du délai de démarrage de l'oscillateur. Par retard de démarrage, on fait référence aux bits 4 et 5 de l'octet de fusible inférieur. Les délais doivent être définis en fonction de la condition dans laquelle le circuit fonctionnera et du type d'oscillateur que vous utilisez. Les valeurs par défaut sont définies pour une montée en puissance lente avec 6 cycles d'horloge lorsqu'une séquence de mise sous tension ou hors tension est effectuée. Ensuite, il y a un autre retard de 14 cycles d'horloge avec 65 ms de retard après le démarrage.
Phew! C'était beaucoup d'informations à digérer. Mais avant de continuer, terminons cette section par une note rapide.
Remarque:
Si vous avez regardé attentivement la fiche technique, vous avez dû le remarquer, programmer un bit de fusible signifie le mettre à un niveau bas, c'est-à-dire 0 (zéro), ce qui est le contraire de ce que l'on fait généralement pour rendre un port haut ou bas. Vous devez garder cela à l'esprit lors de la configuration de vos fusibles.
Bits de fusible dans Arduino
Nous avons beaucoup parlé des fusibles dans la section ci-dessus, mais dans cette section, parlons de comment les configurer et comment les écrire dans un microcontrôleur. Pour cela, nous aurons besoin d'un outil appelé Avrdude. C'est un outil qui peut être utilisé pour lire, écrire et modifier la mémoire des microcontrôleurs AVR. Cela fonctionne avec SPI et il a une longue liste de support pour différents types de programmeurs. vous pouvez télécharger l'outil à partir du lien ci-dessous. En outre, nous utiliserons notre microcontrôleur préféré Arduino.
- Téléchargez Avrdude Version 6.3 Windows-ming32
Maintenant que vous avez Avrdude, vous devez l'extraire et ouvrir une fenêtre de commande dans ce dossier. De plus, si vous prévoyez de l'utiliser plus tard, vous pouvez ajouter le chemin du dossier à la section des variables d'environnement Windows. Mais je vais le mettre sur mon bureau et y ouvrir une fenêtre de commande. Une fois que nous avons fait cela, nous connecterons le programmeur USBasp à notre PC et nous nous assurerons que nous avons le pilote approprié pour notre programmeur USBasp. Une fois que nous avons fait cela, nous sommes prêts à partir et nous lirons d'abord la valeur du fusible par défaut. Pour ce faire, vous devez exécuter la commande suivante.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U efuse: r: ext_fuse_val.txt: h
Si tout va bien, cette commande lira les octets de fusible et les placera dans trois fichiers texte distincts. L'image ci-dessous vous donnera une meilleure idée du processus.
Comme vous pouvez le voir, l'Avrdude a lu les bits de fusible sur l'Arduino nano et les a enregistrés dans trois fichiers texte distincts. Maintenant, nous les avons ouverts et avons obtenu trois valeurs; pour EFUSE: 0xFD, pour HFUSE: 0XDA, pour LFUSE: 0xFF. C'était la valeur de fusible par défaut que nous avons obtenue pour un Arduino nano. Maintenant, convertissons ces bits en binaire et comparons-les à leur valeur par défaut de la feuille de données. Le tableau ci-dessous montre exactement cela.
Pour plus de commodité, les bits de fusible sont écrits en valeurs hexadécimales, mais si nous les convertissons en valeurs binaires et les comparons à la feuille de données, nous saurons ce qui se passe. Commençons par l'octet de fusible inférieur. Comme vous pouvez le voir dans la chaîne ci-dessus, il est défini sur 0XFF et la valeur binaire serait 0B11111111.
Comparaison des octets de fusible inférieurs en stock avec Arduino:
Octet de fusible bas |
Bit No. |
Valeur par défaut dans AVR |
Valeur par défaut d'Arduino |
CKDIV8 |
sept |
0 (programmé) |
1 (non programmé) |
CKOUT |
6 |
1 (non programmé) |
1 (non programmé) |
SUT1 |
5 |
1 (non programmé) |
1 (non programmé) |
SUT0 |
4 |
0 (programmé) |
1 (non programmé) |
CKSEL3 |
3 |
0 (programmé) |
1 (non programmé) |
CKSEL2 |
2 |
0 (programmé) |
1 (non programmé) |
CKSEL1 |
1 |
1 (non programmé) |
1 (non programmé) |
CKSEL0 |
0 |
0 (programmé) |
1 (non programmé) |
L'octet de fusible supérieur est défini sur 0XDA en binaire, à savoir 0B11011010.
Octet de fusible supérieur en binaire:
Octet de fusible élevé |
Bit No. |
Valeur par défaut dans AVR |
Valeur par défaut d'Arduino |
RSTDISBL |
sept |
1 (non programmé) |
1 (non programmé) |
DWEN |
6 |
1 (non programmé) |
1 (non programmé) |
SPIEN |
5 |
0 (programmé) |
0 (programmé) |
WDTON |
4 |
1 (non programmé) |
1 (non programmé) |
EESAVE |
3 |
1 (non programmé) |
1 (non programmé) |
BOOTSZ1 |
2 |
0 (programmé) |
0 (programmé) |
BOOTSZ0 |
1 |
0 (programmé) |
1 (non programmé) |
BOOTRST |
0 |
1 (non programmé) |
0 (programmé)) |
Le paramètre de l'octet de fusible étendu est défini sur 0XFD, en binaire, il est 0B11111101.
Octet de fusible étendu en binaire:
Octet de fusible étendu |
Bit No. |
Valeur par défaut dans AVR |
Valeur par défaut d'Arduino |
- |
sept |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (non programmé) |
1 (non programmé) |
BODLEVEL1 |
1 |
1 (non programmé) |
0 (programmé) |
BODLEVEL0 |
0 |
1 (non programmé) |
1 (non programmé) |
Maintenant, cela marque la fin de cette section. À partir de maintenant, nous avons beaucoup appris sur le microcontrôleur AVR et ses bits fusibles. Alors, terminons cet article en mettant notre théorie à l'épreuve en modifiant et en expérimentant certains des bits de fusible de l'Arduino Nano.
Composants nécessaires pour tester les fusibles dans l'AVR
Nous avons beaucoup parlé des fusibles dans la partie ci-dessus. Mais pour aller plus loin dans l'article, nous avons besoin de quelques composants matériels et de quelques outils logiciels. Dans cette section, nous en parlerons. Une liste des composants requis avec des images est présentée ci-dessous.
- Planche à pain - 1
- Arduino Nano - 1
- Programmeur USBasp AVR - 1
- Câble USB - 1
- Convertisseur AVR 10 broches vers 6 broches - 1
- Avrdude (outil logiciel de programmation AVR)
- LED - 1
- Résistance 330R - 1
- Câbles de démarrage
Schéma de test des fusibles dans AVR
La configuration du test matériel est illustrée ci-dessous dans cette configuration. Nous avons connecté l'Arduino Nano au PC avec un câble USB, et nous avons également connecté le programmeur USBasp au PC. L'objectif de cet article est de programmer les bits fusibles dans AVR. Pour cette raison, nous avons connecté le programmeur USBasp à l'Arduino. L'image ci-dessous vous donnera une meilleure idée de la configuration.
Test des fusibles dans AVR
La configuration du test est illustrée ci-dessous. Comme vous pouvez le voir, nous avons connecté l'Arduino et le programmeur USBasp à la fois à l'USB de mon ordinateur portable.
Maintenant, ouvrons l'IDE Arduino et téléchargeons une esquisse de clignotement de base. Le contenu de l'esquisse de clignotement de base est explicite, je n'ai donc pas mis de détails à ce sujet.
Vous verrez dans la vidéo que le voyant de la broche n ° 13 clignote comme il se doit. Modifions maintenant les paramètres du fusible et définissons-le sur ses valeurs par défaut. Et comme nous l'avons vu précédemment dans la fiche technique; l' EFUSE est 0XFF; le HFUSE est D9; Le LFUSE est: 62. Maintenant, configurons-le avec Avrdude, flashons-le et voyons ce qui se passe. Le code que nous utiliserons est-
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Une fois que je fais cela, vous verrez que la LED clignotera extrêmement lentement car nous avons calculé et programmé la valeur pour une horloge 16Mhz et maintenant, après avoir brûlé les fusibles, il ne s'agit que d'un oscillateur RC interne de 1Mhz. C'est pourquoi la LED clignote si lentement. Essayons maintenant de télécharger à nouveau un croquis. Nous verrons que l'Arduino donne une erreur et le code n'est pas téléchargé. Parce qu'en modifiant les fusibles, nous avons également modifié les paramètres du chargeur de démarrage. Vous pouvez le voir dans l'image ci-dessous.
Pour résoudre ce problème et remettre l'Arduino tel qu'il était avant, nous devons simplement graver à nouveau le chargeur de démarrage pour l'Arduino. Pour ce faire, allez dans Outils -> Programmeur-USBasp , et une fois que nous avons fait cela, nous pouvons à nouveau aller dans les outils et nous pouvons cliquer sur l'option Graver le chargeur de démarrage. Cela brûlera à nouveau le chargeur de démarrage sur votre Arduino et tout redeviendra comme avant.
Une fois que le chargeur de démarrage a été renvoyé à l'Arduino, il est revenu à son état d'origine et la dernière image vous montre une LED clignotante après que le chargeur de démarrage a été brûlé à nouveau.
Et cela marque la fin de cet article. J'espère que vous avez apprécié l'article et appris quelque chose de nouveau. Si vous avez des questions concernant l'article, n'hésitez pas à mettre un commentaire ci-dessous.