Étape 2: Brèves de compréhension fusible de feuille de données
Les microcontrôleurs AVR AtmegaXXX est livré avec un oscillateur interne de 1 MHz par défaut. Dans ce instructable je vais vous montrer comment changer les fusibles de Atmega328P-PU travailler à oscillateur interne de 8MHz. L’emplacement du fusible spécifique bits se distingue parmi tous les fusible trois octets (faibles, élevés et famille élargies fusibles) fonction AVR puce utilisée. Donc n’oubliez pas de les écrire avant leur mise.
Fusibles de l’octet de poids faible
Le fusible de l’octet de poids faible traite l’horloge source, à quelle vitesse la puce s’exécutera et combien de temps il attend au démarrage. 1 octet est égal à 8 bits. Donc, il y a 8 bits dans l’octet bas fusible. Ces 8 bits sont expliquées ici :
- Bit-7: CKDIV8 : quelle série divise la vitesse d’horloge par 8
- Bit 6: CKOUT : lorsque les impulsions de réglage de l’horloge sont sortie sur PB0 (14 broches)
- Bit-5: SUT1 : temporisation de démarrage
- Bit-4: SUT0 : temporisation de démarrage
- Bit-3: CKSEL3 : définissez la source de l’horloge
- Bit-2: CKSEL2 : définissez la source de l’horloge
- 1-bit : CKSEL1 : définissez la source de l’horloge
- Bit-0: CKSEL0 : définissez la source de l’horloge
Les puces de ATmega peuvent rouler à des vitesses différentes ou des fréquences et la fréquence est déterminée par la source d’horloge qui est utilisée. La source d’horloge est définie en utilisant la CKSEL3... bits 0 fusible. Travailler avec la source d’horloge interne nous devons définir CLSEL3 = 0, CKSEL2 = 0, CKSEL1 = 1 and CKSEL0 = 0. Vous devez trouver cette valeur dans la fiche technique du microcontrôleur. Dans la fiche technique il y a un chapitre « horloge système et options de l’horloge ». Il y a un sous-thème dans ce chapitre "Sources d’horloge". Vous y trouverez une table où la valeur de CKSEL3... 0 peut être la source. J’ai joint une capture d’écran de la feuille de données.
Pour l’heure de démarrage, il y a un autre sous-thème "calibré interne RC oscillateur". Vous y trouverez une autre table pour la SUT0... 1. je vais utiliser l’option de puissance montante lente. Si SUT1 = 1 and SUT0 = 0.
Maintenant, nous nous retrouvons avec deux plus de bits pour définir : CKOUT et CKDIV8. Je n’ai aucune sortie d’impulsion horloge sur PB0. Donc je vais mettre cela à 1 (non programmé).
La fréquence maximale d’interne oscillateur RC pour Atmega328P-PU est de 8 MHz. Ceci est réalisé lorsque CKDIV8 est 1 (ou non programmé). Si vous définissez à 0 (ou par programmation) alors votre puce sera avorton à 1 MHz. Afin de lancer la puce à 8 MHz, il faut donc définir CKDIV8 = 1.
Maintenant, combinant tous les 8 bits, notre octet de fusible faible requis est 11100010.
Fusibles de l’octet haut
Le fusible de l’octet haut est expliqué ci-dessous. Vous pouvez simplement ignorer cette partie. Ici, j’ai expliqué seulement les bits de fusible haute. Nous n’avez pas besoin de changer les bits de fusible haute afin de changer la source d’horloge et la fréquence de fonctionnement. Mais si vous êtes intéressé à connaître l’octet haut fusibles puis passez par le sous paragraphe.
Il y a 8 bits dans le fusible de l’octet haut aussi. Ce sont :
- Bit-7: RSTDISBL : disable Reset externe
- Bit 6: DWEN : enable Debug Wire
- Bit-5: SPIEN : activer la série de programmation et de téléchargement de données
- Bit-4: WDTON : temporisateur toujours allumé
- Bit-3: EESAVE : effacer de la mémoire EEPROM préserver grâce à puce
- Bit-2: BOOTSZ1 : définit la taille de mémoire de programme d’amorçage
- 1-bit : BOOTSZ0 : définit la taille de momory bootloader
- Bit-0: BOOTRST : sélectionnez le vecteur réinitialisation
Maintenant, je vais vous expliquer chaque bit :
RSTDISBL (réarmement externe désactiver)
PC6 de Atmega328 est une broche de reset, tenez-le faible (au sol) et la puce se réinitialise. Voilà comment fonctionne le commutateur sur l’Arduino. Lorsque vous appuyez sur le bouton de réinitialisation, il relie PC6 à terre et réinitialise la puce. PC6 est utilisable aussi comme une broche ordinaire de IO, mais cela signifie que la désactivation de la fonction de réinitialisation qui, à son tour, signifie que la puce ne peut plus être inline programmé (en ligne programmation nécessite un redémarrage). C’est une des options qu'il est préférable de ne pas changer. J’imagine que RSTDISBL est mis en œuvre pour des raisons de sécurité arrêter la puce étant reprogrammé ou le firmware téléchargé. Lorsque RSTDISBL est programmé démarrage du temps (SUT1 SUT0) est porté à 14CK + 4.1ms pour assurer le mode de programmation peuvent être saisis.
Par défaut, le paramètre est RSTDISBL = 1 (non programmé).
DWEN (fil activer le débogage)
ATmega puces ont construit au débogage des outils qui sont par défaut désactivé. Le fusible DWEN est utilisé pour les allumer. DWEN utilise le même NIP comme reset (PC6) et quand DWEN est activé (et les bits de verrouillage ne sont pas définis) la broche de remise à zéro devient un axe de communication normale réinitialiser n’est plus fonctionne. Par exemple, si vous activez DWEN sur un Arduino le bouton reset ne fonctionne plus. Pour utiliser le débogage sur puce dont vous avez besoin d’un programmeur compatible tel que le Dragon d’AVR. Étant donné que je n’ai pas un programmeur adapté j’ai jamais utilisé et ne sais pas comment faire pour utiliser le débogage. Si vous souhaitez en savoir plus, alors il est un bon article pour vous aider à démarrer.
C’est l’un des fusibles avec que vous devez prendre soin. Si vous activez DWEN et permettent également les bits de verrouillage, que vous ne pouvez plus programmer la puce de la manière habituelle.
Si vous êtes débutant puis laissez DWEN 1 (non programmé). Après tout, la remise à zéro est très utile.
SPIEN (programmation série activer et le téléchargement de données)
ATmega puces peuvent être programmés à l’aide de la programmation de la série. Programmation série sert à bord de la programmation à l’aide d’un protocole série via un FAI (inline programmeur série) ou l’UART (universal asynchronous récepteur / émetteur). La méthode normale de programmer les puces ATmega est via l’interface SPI à l’aide de la SCK (horloge), les MOSI (entrée) et les goupilles MISO (sortie). Si vous désactivez la série programmation puis vous pouvez ne plus utiliser le SPI pour programmer la puce. Vous pouvez également désactiver série utilisant les pointes de verrouillage de la programmation. Pour une utilisation normale et le développement laisser SPIEN activé, cependant, si vous avez un périphérique qui est définitif et sans davantage de programmation est nécessaire, alors vous pouvez utiliser cette option pour empêcher les gens d’accéder à la puce par le biais de communication série.
Le paramètre par défaut est SPIEN activé, SPIEN = 0 (programmé).
WDTON (Watchdog Timer toujours activée)
Le chien de garde est fondamentalement une minuterie qui provoquera la puce réinitialiser si elle ne reçoit pas un OK signal à des moments précis. Cela peut être utile lorsque vous avez code instable ou un système qui ne doit pas se bloquer en permanence. Lorsque le temporisateur est activé, doit planter d’un croquis ou gel puis la minuterie expirera et réinitialiser la puce provoquant un redémarrage similaire à appuyer sur le bouton de réinitialisation un un Arduino en cours d’exécution. Le temporisateur est activable dans le logiciel, donc les paramètres fusible ne devrait vraiment être utilisé. Par défaut, le temporisateur est éteint, WDTON = 1 (non programmé).
EESAVE (mémoire EEPROM préserver)
Lorsque la puce ATmega est programmée la mémoire est effacée, juste avant que le nouveau code est téléchargé. Dans des circonstances normales, la mémoire EEPROM est effacée ainsi que la mémoire de programme. Le fusible EESAVE peut être utilisé pour dire la puce ne pas d’effacer la mémoire EEPROM. Ceci est utile lorsque vous souhaitez mettre à niveau le code mais conserver les paramètres utilisateur stockés dans l’EEPROM.
J’ai pris l’habitude de mettre ce fusible ; EEPROM a un cycle de vie limité alors moins vous y écrire mieux. Effacement de la mémoire eeprom n’a aucun effet sur le nouveau code de téléchargement et la plupart de mes projets n’utilisez pas la mémoire eeprom donc pas effacer il n’est pas un problème. Le dropController stocke les paramètres et goutte fois en eeprom et donc j’ai mis EESAVE pour conserver les données lorsque j’ai télécharger les nouvelles versions du code.
La valeur par défaut est EESAVE = 1 (non programmé), et EEPROM mémoire est effacée lors de l’effacement de la puce lors de la programmation du cycle.
BOOTSZ1 & BOOTSZ0 (Boot loader taille)
Les puces de ATmega ont la possibilité d’utiliser un chargeur de démarrage, il s’agit d’un petit programme qui s’exécute lorsque la puce est tout d’abord commencée ou lorsqu’il est remis à zéro. Chargeurs de démarrage sont normalement utilisés pour initialiser le périphérique et vérifier pour la communication externe. L’Arduino utilise un chargeur d’amorçage pour parler à un ordinateur connecté pour voir si il y a un nouveau programme à télécharger. C’est la raison pour laquelle que l’Arduino réinitialise lorsque vous téléchargez le nouveau code, la réinitialisation s’exécute le programme d’amorçage, le boot loader vérifie si vous avez un code nouveau.
Le chargeur de démarrage est stocké dans la mémoire de programme, la même mémoire utilisée pour l’application de l’utilisateur, et étant donné que le programme d’amorçage peut être de différentes tailles, vous pouvez dire la puce ATmega combien d’espace à réserver. Le bootloader Arduino (plus âgé) régulière est 2 kilo-octets (Ko), mais la plus récente Optiboot (utilisé sur la UNO) est seulement 0,5 Ko (512 octets). Si à l’aide de Optiboot et de définir la taille de chargeur de démarrage en conséquence, vous gagnez un 1,5 Ko supplémentaire pour votre propre programme. 5 1. KB peut être beaucoup d’espace, manquer d’espace de programme est la raison pour laquelle j’ai commencé à programmer des stand-alone ATmega puces en premier lieu. Le code pour la chute de contrôleur est devenu trop grand pour l’Arduino régulière alors j’ai enlevé le chargeur de démarrage.
Si vous avez un chargeur d’amorçage puis BOOTSZ doit être utilisé en conjonction avec BOOTRST. BOOTRST dit la puce ATmega l’adresse mémoire où démarre le programme d’amorçage. Si BOOTRST n’est pas définie, l’application utilisateur pouvez utiliser toute la mémoire quels que soient les paramètres de BOOTSZ.
La valeur par défaut pour les nouvelles puces est BOOTSZ1 = 0 (programmé) et BOOTSZ0 = 0 (programmé) ce qui signifie qu’ils ont maximum mémoire réservée pour un chargeur de démarrage.
BOOTRST (sélectionnez reset vector)
ATmega puces peuvent utiliser un chargeur de démarrage, il s’agit d’un petit programme qui s’exécute lorsque la puce est réinitialisée. Si vous avez un chargeur d’amorçage, vous devez informer le MCU et c’est en utilisant le BOOTRST fusible de réglage. Lorsque le fusible BOOTRST est défini, sur Réinitialiser l’appareil passera à l’adresse Bootloader. Si ce n’est pas le cas, ensemble, la puce va sauter à l’adresse de départ du programme à 0 x 0000.
La valeur par défaut est BOOTRST = 1 (non programmé).
Si BOOTRST n’est pas définie (pas de chargeur de démarrage) puis les fusibles BOOTSZ ne sont pas utilisés indépendamment de la valeur.
Avertissement : Les fusibles RSTDISBL, SPIEN et DWEN ont le potentiel de la puce ATmega en brique, ou au moins faire la puce très très difficile à utiliser à nouveau. Pour un usage général et surtout si vous êtes débutant avec des puces autonomes de programmation, vous ne devez pas modifier ces paramètres de fusible. Vous devriez également vérifier que vous ne modifiez pas les lorsque vous ré-écrivez les autres paramètres de fusible.
Donc notre notre octets requis fusible haute est 11011011.
Fusible étendue Bits
Les fusibles étendues servent uniquement pour définir le niveau de détection brown-out (DBO). Les puces de ATmega peuvent devenir instable ou peu fiable lorsqu’il est utilisé avec une tension insuffisante. Par exemple, l’Atmega328/328p peut exécuter en toute sécurité à 16 MHz si elle a au moins 4 V alimentation. Quoi que ce soit inférieure à 4 v signifie que la puce est susceptible de se conduisent mal. Cela serait un problème si le périphérique servaient avec capteurs d’effectuer des mesures ou s’est appuyé sur des horaires précis.
Pour s’assurer que la puce a un voltage suffisant d’entrée un niveau de tension minimale peut être définie. Si la tension chute en dessous de ce niveau puis la puce se remet en marche. C’est ce qu’on appelle le niveau détecteur brown-out. Fondamentalement, si la tension fournie est inférieure à la DBO de la puce maintient reset bas.
Je ne vais pas à travers chaque morceaux de fusible étendu octet. Par défaut, tous les bits dans cet octet est défini comme 1 (non programmé).
Et voici que notre fusible étendu octet est 11111111.