Schéma avr rapide. Restauration de la configuration des fusibles-bits des microcontrôleurs Tiny AVR (HVSP). Connexion des broches du microcontrôleur en mode de programmation série haute tension

La carte de développement universelle FastAVR pour débutants en programmation MK ATMEL a été développée sur la base d'une analyse d'une douzaine de conceptions similaires. La carte est un compromis raisonnable entre la fonctionnalité redondante de la plupart d'entre elles ou les fonctionnalités trop primitives des autres. Ayant une certaine expérience de travail avec différents systèmes de microprocesseurs, je commenterai ci-dessous mes réflexions - comment tel ou tel nœud de carte a été conçu. A vous d'être d'accord ou non avec eux, mais peut-être seront-ils en partie utiles à ceux qui maîtrisent l'AVR à l'avenir...

La conception est basée sur les développements et les notes d'application de Microelectronics (http://www.mikroe.com/ru/). Mais les cartes EasyAVR (et pas seulement) contiennent trop de composants qui attirent les nouveaux arrivants vers la technologie des microprocesseurs par leur diversité et leur qualité de fabrication ; en fait, la moitié d'entre eux deviennent inutiles après avoir compilé avec succès 5 à 6 exemples de programmes et acquis de l'expérience. Jugez par vous-même - pourquoi avez-vous besoin d'un tas de LED et de boutons connectés à chaque port de la carte ? Tout cela est pertinent jusqu'à ce que vous appreniez à contrôler les broches du port et à faire clignoter les voyants, mais cela arrivera très vite ;-) .

Ainsi, les capacités de la carte de débogage :

  • ensemble de base de périphériques pour prendre en charge ATmega : convertisseur RS-232, beeper, SPI EEPROM, indicateurs LCD et LED, générateur d'horloge intégré + quartz, clavier PS-2, testeur ADC, testeurs logiques ;
  • possibilité de répétition à la maison, carte de circuit imprimé simple face optimisée pour la technologie de repassage au laser, petite taille;
  • l'utilisation de tous les composants uniquement dans les boîtiers DIP - vous permet de les remplacer facilement pendant les expériences ou de programmer le processeur lui-même pour d'autres circuits (par exemple, pour JTAG);
  • pleine suffisance fonctionnelle pour créer des prototypes simples d'appareils et leur débogage ;
  • connecteur du programmeur SPI standard STK-200 avec alimentation sélective du programmeur, possibilité de connexion JTAG externe;
  • la possibilité d'allumer la carte en mode JTAG ICE par simple re-commutation ;
  • la possibilité de commutation indépendante des périphériques embarqués dans n'importe quelle combinaison grâce à la technologie linéaire de l'emplacement de tous les ports du MC ;
  • la possibilité de connecter facilement n'importe quel périphérique externe et d'utiliser 100% des ressources ATmega dans le DIP-40, tous les ports sont accessibles peu à peu, de plus, tous les périphériques internes de la carte peuvent être utilisés pour des périphériques externes (par exemple, un générateur d'horloge ou indicateurs LED;

Tout cela ne nécessite pas de modifications de la carte ni de soudure. Cette. au stade initial de la maîtrise de MK, les capacités de FastAVR sont tout à fait suffisantes. Ceux qui décident de passer à autre chose, après avoir créé leur propre logiciel, pourront décider indépendamment de ce dont ils ont besoin spécifiquement et créer un prototype de conception avec leur propre ensemble de périphériques. Je le répète encore une fois - le conseil a été créé pour commencer à étudier MK AVR, aucun autre objectif n'a été poursuivi. L'apparition de la documentation elle-même est associée à l'intérêt manifesté par de nombreux débutants pour maîtriser ce type de contrôleurs ou se demandent encore par où commencer. Et bien sûr, il faut commencer par la planche de test ;-)

Contrôleurs MK AVR autonomes, mais le processeur n'est pas l'ensemble du système. Les « cubes » qui la desservent ou qu'elle contrôle, à eux seuls, peuvent être considérés comme des blocs distincts de futures structures. En les combinant tous ensemble sur le tableau principal, vous pouvez les combiner pour obtenir les résultats souhaités. Au départ, la carte a été conçue sur la base de l'ATmega8, puisque il est bon marché et possède presque toutes les fonctionnalités d'un AVR. Cependant, après avoir suivi les conseils, j'ai décidé de ne pas économiser d'argent et de mettre le microcontrôleur le plus abordable dans un boîtier DIP - ATmega16 ou 32. Le brochage des deux MC est identique. Le coût d'une telle solution est remboursé au centuple par le nombre de ports d'E/S auxquels vous pouvez vous connecter au moins pendant la durée du débogage. La compatibilité ascendante pour toutes les générations d'AVR vous permet d'écrire et de déboguer des programmes à l'aide d'une puce plus puissante, puis de les compiler pour la puce cible. Une ressource flash suffisante permet de ne pas "s'accrocher" aux limitations des capacités de reprogrammation du Mega, d'autant plus que vous pouvez, avec suffisamment d'exercice, envoyer le MK vers une structure de travail, en le flashant pour la dernière fois (JTAG ICE est le premier concurrent)

Pour fabriquer la carte, vous aurez besoin d'un petit "junk" informatique non rare, ce qui suffit dans les placards de tout ingénieur en électronique. La plupart des composants sont utilisés à partir de cartes mères IBM PC anciennes ou défaillantes ou de la technologie informatique proche, récemment, ce type de fer est de plus en plus inutilisable et jeté ou traînant sans utilisation. Parce que Avec des petites choses SMD, on ne peut pratiquement rien faire (régler le problème, et le temps...), je soude entièrement de tels appareils soit avec un sèche-cheveux de chantier soit sur une cuisinière électrique.

La description principale de FastAVR est par blocs ci-dessous :

Nutrition. Le régulateur 78 (M) 05 intégré permet à la carte d'être alimentée à partir d'adaptateurs 9-12 V répandus provenant d'autres équipements, qui sont généralement inactifs. Dans une connexion normale, cela suffit (Mega-16/32 + LCD + RS232 + TXO), lors de l'utilisation d'une LED 7 segments embarquée, ou d'un périphérique externe très vorace (programmateur complexe), le stabilisateur est déjà très chaud . La connexion d'une tension stabilisée externe + 5V est possible via la broche 3 X1 (un connecteur des refroidisseurs de la carte mère est utilisé). Vous devez d'abord désactiver les cavaliers JP1-JP2 du groupe VCC_SEL. X1 de ce type a été choisi pour plusieurs raisons, la principale est qu'il faut presque toujours fabriquer un adaptateur pour alimenter la carte à partir des différents adaptateurs disponibles ou d'un bloc d'alimentation de laboratoire. Inductances de ferrite de passage (balun) FB1, FB2 filtrent le bruit impulsif et le captage haute fréquence. Les diodes VD1, VD2 sont protégées contre "l'inversion de polarité". Les cavaliers VCC_EXT et GND_EXT sont installés à plusieurs endroits sur la carte. Grâce à eux, il est assez facile de supprimer la tension d'alimentation et la "terre" commune lors de la connexion des périphériques.

La mémoire externe est implémentée sur une EEPROM I2C standard 24cXXX. Bien que l'AVR lui-même contienne sa propre mémoire non volatile, cependant, dans de nombreux modèles, une puce externe peut être préférable en raison de la taille ou des ressources. Le circuit de commutation est standard, l'adresse du cristal est 0x01.

Les indicateurs LED linéaires de l'état des ports HL2-HL5 sont réalisés sur 4 LED discrètes. C'est suffisant pour commencer à expérimenter avec AVR, je considère plus d'entre eux injustifiés et plutôt embellissement. Les LED s'allument lors de l'écriture sur le port de journal "1", donc. l'état du port est affiché sans inversion de signal, ce qui est pratique et clair.

La connexion à la carte d'indicateur LCD se fait via 2 connecteurs, il est possible d'utiliser les modes 8 bits et 4 bits. Le premier d'entre eux - 34 broches X2 (à partir de lecteurs 3,5 ") vous permet d'utiliser des câbles standard refoulés à partir de lecteurs de la longueur requise, respectivement, sur l'indicateur lui-même, il est préférable de dessouder la bande de cavalier (bloc de broches), ce vous permet de changer rapidement les différents indicateurs sans crainte La connexion aux ports de l'ABRA s'effectue via le pin-block X10, ainsi, en plus du mode de connexion LCD lui-même, vous pouvez sélectionner de manière flexible les broches MK.Cette conception vous permet pour s'adapter facilement aux ports libres du contrôleur, même les "composer" un par un à partir de ports de groupes différents, ce qui peut être nécessaire pour faire correspondre un prototype spécifique en cours de débogage, ou une carte de circuit imprimé nouvellement conçue s'avère plus pratique dans câblage.


Dans de nombreux cas, l'utilisation d'un indicateur LCD peut ne pas être justifiée en termes de prix, de taille ou de fiabilité. Par exemple, dans le chargeur ou la minuterie le plus simple, un indicateur LED à 2 chiffres peut très bien fonctionner. Les doubles afficheurs 7 segments de type commun que j'ai en ma possession avec une hauteur d'enseigne de 14 mm se sont avérés être à la fois à anode commune et à cathode commune (caisses hors service et blocs système de 486 ordinateurs). J'ai dû utiliser des touches à 2 temps sur VT1-VT4 pour connecter des indicateurs de tout type et, par conséquent, une prise pour l'indicateur lui-même, afin de ne pas me creuser la tête avec des circuits à l'avenir.

Toutes les connexions périphériques aux ports ATmega, comme indiqué précédemment, se font via des blocs de broches de ligne X3-X6. En gros, sur les cartes déboguées, j'ai observé l'utilisation de connecteurs IDC-10 (2x5). Leur seul avantage dans ce cas est la présence d'une "clé" afin de ne pas confondre la boucle par endroits lors de la connexion. C'est là que s'arrêtent les avantages de cette méthode et que commencent les inconvénients - il est même visuellement gênant de travailler avec des ports 8 bits, tk. les broches ne sont pas disposées en rangée, il est impossible de connecter les périphériques intégrés à l'exception d'une boucle. L'utilisation de blocs à broches donne exactement le résultat inverse, de plus, grâce à un cavalier standard, il est facile de contrôler tous les signaux d'en haut, par exemple, avec une sonde logique ou un oscilloscope, vous n'avez pas besoin de fouiller et comptez sur les pattes de bâbord de peur de "court-circuiter" accidentellement les sorties. Ajoutez à cela la rentabilité maximale et la réutilisation de cette connexion, car il est beaucoup plus facile de remplacer un câble ou un cavalier qu'un connecteur soudé à la carte. De plus, maintenant en vente, même dans notre outback, vous pouvez trouver de telles pièces d'accouplement de connecteurs (ou utiliser d'anciennes unités système), ce qui permet de combiner facilement et rapidement des connecteurs (Fig) :


Pour le son, un beeper commun avec une résistance d'environ 80 ohms de la carte mère est utilisé. Le signal n'est pas très fort, mais suffisant pour le monitoring (R23 est déjà sélectionné à la limite). Je n'ai pas installé de clé séparée, ceux qui le souhaitent peuvent la dessouder dans les emplacements pour prototypage, désignés comme TEMP. Un petit conseil - lorsque vous travaillez avec du son, n'oubliez pas de mettre une commande à la fin de la procédure de génération de signal, ce qui réinitialise la sortie PD7 sur le journal "0", sinon, après l'arrêt de la génération, il peut y avoir "1" gauche et le courant à travers le haut-parleur continuera à circuler, ce qui n'est pas bon mais serait pour des raisons de consommation générale AVR.

Sur le DIP-switch 4 bits SW4, le maître des signaux logiques pour les ports est assemblé. Ici, la situation avec le nombre est similaire à celle des LED. Parce que les entrées avr ont des résistances de pool de plug-in internes, il n'est donc pas nécessaire de définir des "pullups" sur l'alimentation. Sur les résistances R18-R21, une protection contre les erreurs d'enclenchement accidentel des ports MC vers la sortie est assemblée. Dans la révision de la carte 1.03 et supérieure, le dip-switch peut être remplacé par des cavaliers s'il est manquant. Récemment, j'avais besoin de fabriquer rapidement un JTAG ICE à partir d'une planche. À cet égard, dans la version 1.4, la matrice de résistances RN1 a été introduite, qui permet au matériel de former un « 1 » logique sur plusieurs entrées de contrôleur. Si vous n'en avez pas besoin, vous pouvez ignorer l'installation de RN1.

L'horloge MC est sélectionnée par le groupe de broches CL_SEL et peut être réalisée à partir d'un résonateur à cristal externe Z1 (seuls JP37, JP38 sont installés), d'un oscillateur à cristal intégré G1 (16 MHz), ou d'un diviseur par : 2 et : 4 . Cette. en plus du quartz, le processeur peut être cadencé à des fréquences de 16, 8, 4 MHz. Vous pouvez facilement estimer la vitesse du programme en cours de débogage ou obtenir une fréquence d'horloge standard avec un spécial soudé. quartz. En principe, en l'absence de TXO, tout autre générateur jusqu'à 16 MHz peut être utilisé à cette fréquence. Le générateur peut également vous être utile lors de la "montée" du MK en raison de fusibles mal cousus du microcontrôleur, dans ce cas la fréquence d'horloge n'a pas d'importance.

Un convertisseur de niveau série RS-232 vers UART est une caractéristique invariable de la plupart des systèmes basés sur AVR. Pas besoin de "réinventer la roue" ici, le MAX232 standard suffit. Seuls les signaux RX-TX sont impliqués, ce qui est suffisant pour la plupart des applications. Il est pratiquement possible de connecter CTS-RTS pour le contrôle de flux matériel sans retravailler la carte, en utilisant des fils flexibles sur le JP31-JP32 du côté piste. Le circuit testé m / c Maxim MAX232, TI MAX232 et SIPEX SP3232 - mettez tous les analogues compatibles en brochage.

Un clavier matriciel externe peut être fabriqué sur une carte séparée et connecté avec des boucles au MK (j'ai décidé d'utiliser une "souris" des manipulateurs, en règle générale, 2 mikriks y travaillent toujours). La carte de débogage elle-même a un double bloc de connexion PS-2. Un clavier IBM PC standard peut être connecté sans aucune modification matérielle, naturellement avec le support logiciel approprié de l'AVR. Le deuxième connecteur est gratuit, à utiliser à votre guise. En règle générale, le clavier est une chose très spécifique, en fonction du prototype en cours de débogage, donc après réflexion, j'ai décidé de ne pas mettre même les boutons les plus simples sur la carte. Je posterai mes options de carte après les avoir câblées et testées.

L'indicateur HL7 est configuré pour des expériences avec le contrôleur PWM matériel intégré.

Le connecteur pour la programmation série en circuit X7 est fabriqué conformément à STK-200. L'alimentation du programmateur peut être sélectionnée de manière sélective via JP43. Dans mon cas, le programmeur le plus simple de PonyProg est utilisé sur le tampon 74ALS (LS, F) 244 avec une connexion LPT. Tout a été testé sur un chipset Core2Duo + i965 sous XP SP2, aucun problème n'est survenu. Le programmeur est alimenté via le connecteur de la carte de débogage et est facile à utiliser, car les tampons en mode normal "passent" à l'état Z et n'interfèrent pas du tout avec le fonctionnement du FastAVR. La connexion d'un adaptateur JTAG pour la programmation en circuit et le débogage en temps réel est également possible sans modifier la carte via le bloc de broches linéaire correspondant du port C.

Il reste à mentionner quelques autres éléments nécessaires :

Le circuit de réinitialisation externe, qui est assez simple pour l'AVR. Il peut être désactivé via JP42, bien que le fonctionnement en conjonction avec le programmateur n'interfère pas du tout. L'entrée reset peut être reprogrammée via le fusible comme un port I/O standard et utilisée pour les périphériques, cependant, rappelez-vous que dans ce cas il n'est plus possible de reprogrammer le cristal via X7.

La résistance variable R27, activée par un potentiomètre, est un réglage de tension pour les expériences avec un CAN intégré, la sortie de celui-ci peut être envoyée à l'une des entrées analogiques du MK. Une petite remarque - attention, si vous n'installez pas cette résistance pour quelque raison que ce soit, veillez à mettre un cavalier (ligne pointillée sur la figure) pour le passage normal du bus GND commun !

Un peu sur le PCB lui-même et sa conception. Comme déjà noté, le tableau est unilatéral. Jusqu'à présent, j'ai vérifié 2 copies réalisées à l'aide de la technologie de repassage au laser (une lors de l'impression sur papier photographique à partir de jet d'encre, l'autre à base d'auto-adhésif), donc. si vous le souhaitez, tout devrait s'arranger ;-) Si vous pensez utiliser une méthode photographique, tant mieux ! Les bandes de cavaliers sont séparées en tenant compte des "zones interdites" et de l'utilisation de boucles standards à 16 broches (straps de GAME-PORT), même lorsqu'elles sont connectées avec une rangée extrême. En l'absence de selfs en ferrite (j'utilise d'anciennes cartes mères 286 ou de moniteurs brûlés), vous pouvez mettre des cavaliers en toute sécurité. Je recommande de mettre des panneaux sous toutes les puces à la fois afin de ne pas avoir à pucer la planche plus tard. N'oubliez pas les 2 cavaliers des touches vers l'indicateur HL6.

Et voici à quoi ressemble l'interface de vérification de la logique TTL / CMOS, dans la mesure du possible je vais essayer de vous dire ce qu'il en est advenu.

En général, le temporisateur a un registre de comparaison ROC ** et lorsque la valeur dans le temporisateur correspond à la valeur du registre de comparaison ROC ** 2 choses peuvent arriver :

  • Interrompre
  • Modification de l'état d'une broche de comparaison externe CO **

Nous pouvons maintenant personnaliser PWM quand le compteur compte jusqu'à la valeur ROC ** tension sur la jambe que nous avons choisie CO **passer de 5 à 0. Lorsque la minuterie compte jusqu'à la fin et commence à compter, nous modifions d'abord la tension de 0 à 5, à la sortie nous aurons des impulsions rectangulaires

Il existe 3 modes de fonctionnementPWM

STS(remise à zéro sur match) - Cela peut être appelé CHIM un signal simulé à fréquence d'impulsion lorsque le temporisateur compte jusqu'à une valeur ROC ** il réinitialise et modifie la valeur CO **à l'opposé. Ainsi, le cycle de service PWM toujours les mêmes.

Ceci est utilisé lorsque vous devez compter des périodes exactes ou générer des interruptions après un certain temps.

PWM rapide(PWM rapide) - le compteur compte de 0 à 255, après quoi il est remis à 0.

Lorsque la valeur de la minuterie est la même que ROC ** la sortie correspondante est remise à 0, lorsqu'elle est mise à zéro, 1 est mis.

Le plus souvent utilisé normalement PWM.

PWM à correction de phase(PWM avec phase précise) - dans ce mode, le compteur compte de 0 à 255, puis recompte jusqu'à zéro. Au premier match avec ROC ** la sortie est remise à 0, en cas de 2 correspondances (lorsque le compteur remonte), 1 est mis à 1.

Ils sont utilisés pour que la phase ne s'égare pas lorsque le rapport cyclique change.



Si nous voulons travailler avec la sortie OC1A mettre les battements dedans COM1A1 COM1A0
Généralement "/" signifie OU. TCNT1= OCR1A pour PWM au retrait OC1A

Mode de fonctionnement de la minuterie/compteur- mode de fonctionnement temporisateur/compteur.

Haut- Valeur TCNT1 à laquelle la valeur de sortie est commutée CO**.

Drapeau TOV1 activé- à quelles valeurs le bit de registre GFR est défini

Nous sélectionnons le mode dont nous avons besoin dans le dernier tableau, ne regardons pas Haut. Dans les 2 tableaux, sélectionnez l'une des 2 dernières options. Il ne reste plus qu'à ranger les bits nécessaires dans les registres.

#define F_CPU 8000000UL #include #inclure int main () (DDRD = 0xFF ; OCR1A = 0xC0 ; // Comparer avec cette valeur OCR1B = 0x40 ; // Paramètres PWM et de la minuterie TCCR1A | = (1<CS10 set 1, il compte avec la fréquence du MK sur la façon de régler la fréquence de la minuterie

L'un des meilleurs compilateurs de langage de type Basic pour la série de microcontrôleurs AVR 8 bits.

L'environnement de développement FastAVR se caractérise par une interface pratique et bien pensée et comprend un éditeur, un assembleur, un compilateur et un programmeur de microcontrôleur. L'application dispose de la mise en évidence des commandes, d'une interface conviviale et de nombreuses autres solutions conçues pour faciliter le processus de création et de débogage des programmes. FastAVR utilise un adressage sur huit bits plutôt que sur seize bits et se compare avantageusement aux autres compilateurs en créant un code extrêmement compact (en particulier pour les contrôleurs avec moins de 256 octets de RAM). En outre, le programme intègre des fonctions supplémentaires d'un générateur de caractères pour écran LCD, d'un calculateur de minuteries, d'un terminal. La liste des microcontrôleurs pris en charge par AVR comprend les séries : 2313, 2323, 2333, 4433, 8515, 8535, ATiny13, ATiny26, ATmega163, Atmega8, Atmega16, Atmega32, ATmega64, ATmega128 et bien d'autres.

Le langage utilisé dans FastAVR se compose de commandes de base familières, considérablement étendues avec des fonctions utiles supplémentaires (I2C, 1-Wire, LCD et quelques autres). Le compilateur prend en charge la programmation structurée pour améliorer la lisibilité des programmes. Cette application compile le programme situé dans la fenêtre de l'éditeur actif en code d'assemblage AVR standard à l'aide de l'assembleur gratuit Atmel (inclus dans la suite de programmes). À la suite de la compilation et s'il n'y a pas d'erreurs dans le texte source, un fichier avec l'extension * .asm est créé. L'environnement de programmation génère le code généré en langage assembleur, ce qui est utile pour les développeurs expérimentés.

FastAVR peut utiliser pratiquement tous les programmateurs en circuit existants pour les contrôleurs AVR connectés à un port série ou parallèle. Le code source du programme est tapé comme du texte ordinaire sous forme de symboles dans l'éditeur intégré de ce logiciel. En plus d'afficher le texte source, l'éditeur FastAVR corrige indépendamment le programme, met en évidence les commandes, les variables et autres données avec des couleurs. Il prend également en charge une capacité commutable d'aligner des blocs de texte. Le code du programme peut être visualisé et édité dans n'importe quel éditeur conventionnel. Néanmoins, lors de l'écriture d'un programme, vous devez suivre un certain nombre de règles définies par la syntaxe FastAVR. Par exemple, dans chaque programme, le compilateur doit spécifier le type de contrôleur utilisé, la vitesse d'horloge et la taille de la pile logicielle. Ces commandes spéciales (métadirectives) ne sont pas converties en code assembleur.

Étant donné que la famille de microcontrôleurs AVR stocke les données et le code dans différentes zones de mémoire, lorsqu'ils travaillent avec le programme FastAVR, les développeurs doivent spécifier dans quel emplacement de mémoire les données seront situées. Le compilateur place le code du programme automatiquement.

Le logiciel FastAVR a été créé par Bojan Ivancic de Slovénie et est un produit de MicroDESIGN. Malheureusement, l'auteur a abandonné son projet, son site ne fonctionne pas, et les téléphones du support ne répondent pas. L'application elle-même n'a pas été mise à jour depuis longtemps et, par conséquent, le compilateur ne prend pas en charge les derniers modèles de contrôleurs Atmel.

Le programme FastAVR a été payé. Sans entrer le code d'enregistrement, l'environnement de développement n'est lancé qu'en mode démo, qui présente des restrictions importantes. L'application peut actuellement être téléchargée à partir du lien ci-dessous. L'assemblage présenté comprend la dernière version fonctionnelle du programme, des fichiers d'aide en anglais, des exemples.

Ce produit a été écrit en anglais. Il n'y a pas de russifier pour ça.

FastAVR fonctionne sous Microsoft Windows. L'application fonctionne correctement sur les systèmes d'exploitation 98SE, NT4, 2000 et XP.

Cet appareil - Attiny fusebit doctor - vous permet de restaurer la configuration des Fuse-bits (réglages d'usine, selon la description technique) des microcontrôleurs Atmel Tiny. Prend en charge tous les microcontrôleurs dotés d'une interface de programmation série haute tension (HVSP) :

  • dans un emballage à 8 dérivations :,, ;
  • dans un emballage de 14 dérivations :,;
  • dans un emballage de 20 dérivations avec adaptateur spécial :,.

Si vous avez besoin d'un appareil pour restaurer la configuration des fusibles-bits des microcontrôleurs ATtiny, consultez le projet :.

L'appareil est très simple à fabriquer et ne contient pas de composants coûteux. La base est un microcontrôleur, ainsi que plusieurs résistances et transistors (,), un régulateur de tension +5 V (7805T). A noter qu'une alimentation stabilisée avec une tension de sortie de +12 V est nécessaire pour alimenter l'appareil (ce qui est important pour initialiser le mode de programmation haute tension).

Lors de la programmation des fusibles bits du microcontrôleur il faut garder à l'esprit qu'un oscillateur interne de 4 MHz est utilisé sans diviseur par 8. Et vous pouvez également activer l'option "puissance de montée rapide".

Diagramme schématique

Circuit imprimé

Carte avec composants installés

Connexion des broches du microcontrôleur en mode de programmation série haute tension

La restauration de la configuration du microcontrôleur (patient) commence en appuyant sur le bouton Démarrer. Pour indiquer l'état, deux LED sont fournies, dont les états indiquent :

  • la LED verte est allumée- Configuration des bits de fusible restaurée. Si les bits de verrouillage sont activés, seule la conformité de la configuration actuelle des bits avec les paramètres d'usine est vérifiée, et si elle correspond, la LED verte s'allume ;
  • LED rouge allumée- erreur lors de la lecture de la signature du microcontrôleur : elle est impossible à lire, il n'y a pas de microcontrôleur dans le socket, ou la signature ne correspond pas à celles de la base de données de l'appareil ;
  • la LED verte clignote- la signature est correcte, la configuration des bits Fuse est incorrecte. Les bits de verrouillage sont définis, l'opération d'effacement Flash est requise ;
  • LED rouge clignotante- la signature est correcte, les bits de verrouillage ne sont pas activés, mais pour une raison quelconque, les bits de fusible ne peuvent pas être écrits, le contrôle échoue après 10 tentatives.

Le dispositif de récupération de bits de fusible fonctionne selon le protocole de programmation série haute tension. Initialement, lorsque le processus est lancé, le microcontrôleur restauré (patient) passe en mode de programmation de mémoire haute tension, puis la signature de la puce est lue et la capacité de l'appareil à fonctionner avec elle est vérifiée. Après cela, l'opération d'effacement est effectuée, si l'utilisateur l'a spécifié. L'étape suivante consiste à lire les bits de verrouillage et, s'ils ne sont pas positionnés, alors le "patient" reçoit une nouvelle configuration de bits Fuse correspondant au modèle du microcontrôleur-patient. Après cela, le paramètre Fuse-bit (vérification) est vérifié et, si le test est réussi, l'appareil termine son travail. Sinon, l'appareil répète le cycle Fuse-bits de vérification d'écriture 10 fois.

La carte a deux cavaliers (cavaliers) "chip delete" et "unknown signature":

  • effacement des puces- permet l'opération d'effacement de toute la mémoire Flash de la puce. Ceci est nécessaire si les bits de verrouillage sont activés, c'est-à-dire il n'y a aucun moyen de réparer les bits de fusible jusqu'à ce que les bits de verrouillage soient effacés. Cavalier activé - l'opération d'effacement est autorisée.
  • signature inconnue- signature de puce inconnue - un phénomène très rare, mais il arrive encore que la puce ait effacé sa signature. La signature, les octets d'étalonnage et d'autres données ne peuvent pas être stockés de manière permanente dans la structure de la puce, ils peuvent être accidentellement endommagés (effacés) en cas d'alimentation instable pendant la programmation. Habituellement, dans de tels cas, les valeurs de signature obtenues sont FF FF FF, mais la puce fonctionne correctement, la mémoire Flash peut être lue et écrite. Si la signature de lecture ne correspond à aucune des bases de données de l'appareil (y compris les valeurs FF FF FF et 00 00 00), alors lorsque ce cavalier est activé, l'appareil écrira la configuration universelle du fusible. La configuration universelle signifie que le FAI (activation du bit SPIEN) et la fonctionnalité de la broche de réinitialisation (désactivation du bit RSTDISBL) du microcontrôleur seront restaurés, les options de l'oscillateur ne seront pas affectées. Avec de telles actions, le microcontrôleur pourra récupérer davantage, mais avec l'aide d'un programmeur SPI conventionnel.

Attention! N'utilisez pas l'option "signature inconnue" avec les microcontrôleurs ATtiny11 ou ATtiny15.

Appendice:

  1. Fichiers de projet (format Eagle 5.4.0), schéma et schéma de circuit imprimé (pdf, png), fichier .hex et fichier .bin pour la programmation du microcontrôleur -.
  2. Firmware mis à jour pour le microcontrôleur (Version 2) : code source (BASCOM v.1.11.9.0), fichier .hex et fichier .bin pour la programmation du microcontrôleur -.

Assez souvent, il devient nécessaire d'utiliser le contrôle de n'importe quel appareil (que ce soit une ampoule à incandescence, un moteur, un élément chauffant ou une simple LED) au moyen de PWM.

Il n'est probablement pas nécessaire d'expliquer ce que c'est et quelle est la beauté du contrôle PWM, il y a déjà beaucoup d'informations sur Internet, et il est peu probable que je puisse mieux mâcher ce sujet. Par conséquent, passons aux choses sérieuses tout de suite, à savoir que nous lancerons PWM sur Attiny2313 à l'aide des outils Bascom-AVR.

Le PWM dans les microcontrôleurs AVR fonctionne sur des minuteurs-compteurs, dans Tiny2313 il n'y a que 2 minuteurs de ce type : un Timer0 8 bits comptant jusqu'à 255 et un Timer1 16 bits capable de compter jusqu'à 65535. Chaque minuteur contrôle deux canaux PWM, donc tout peut être mis en œuvre matériellement jusqu'à 4 canaux PWM.

Des informations sur le nombre de canaux PWM et la largeur de bit de chaque canal peuvent être trouvées sur les pages de la fiche technique du microcontrôleur.

Ainsi, à bord de l'Attiny2313, il y a deux canaux PWM 8 bits alimentés par Timer0 et deux autres canaux contrôlés par le timer Timer1 ont une largeur de bits programmable de 8 à 10 bits. Dans la fiche technique, ces pattes sont signées comme suit :

Pour configurer Timer1 pour générer PWM dans Bascom, écrivez simplement la ligne suivante :

Config Timer1 = Pwm, Pwm = 8, Compare A Pwm = Clear Up, Compare B Pwm = Clear Down, Prescale = 64

Pwm = 8 La largeur de bit PWM est sélectionnée, pour Timer1, comme il a été écrit ci-dessus, il peut également être Pwm = 9 ou Pwm = 10.

Comparez A / B Pwm = Clear Up / Clear Down Ici, nous configurons l'état actif pour chaque canal PWM (A et B).

Prescale = 64 - la ligne de configuration de la minuterie déjà familière responsable de la pré-division de la fréquence de débordement de la minuterie, dans ce cas, le diviseur définira la fréquence PWM. Nous pouvons changer à notre discrétion Prescale = 1 | 8 | 64 | 256 | 1024


Le rapport cyclique du signal généré est déterminé par la valeur que nous écrivons dans les registres de comparaison OCR1A et OCR1B (nous avons deux canaux PWM sur une minuterie, voici un registre par canal A et B). La valeur du registre de comptage est constamment comparée aux valeurs qui se trouvent dans ces registres (elle y est copiée à partir de la minuterie), lorsqu'elles correspondent, la jambe passe à l'état actif et le registre de comptage continue de compter à sa valeur maximale. Après avoir compté au maximum, le temporisateur commence à compter dans le sens opposé, et en atteignant le moment où les valeurs du registre de comptage et du registre de comparaison coïncident à nouveau, une commutation inverse se produira sur la jambe du microcontrôleur (voir la figure ci-dessous )



Pour nous, les registres de comparaison OCR1A et OCR1B ne sont que des variables dans lesquelles nous pouvons mettre une valeur. Par exemple, comme ceci :


OCR1A = 100
OCR1B = 150


Pour plus de commodité, le Bascom fournit un autre nom pour ces registres : PWM1A et PWM1B, les lignes précédentes seront donc équivalentes à ce qui suit :


PWM1A = 100
PWM1B = 150

Voyons maintenant comment la configuration de l'état actif Clear Up / Clear Down affecte ce qui se passe à la sortie PWM, en fonction de la valeur du registre de comparaison.

Lorsque la sortie est configurée comme Compare A Pwm = Clear Down, l'état actif de la sortie est haut et à mesure que la valeur du registre OCR (PWM) augmente, la tension proportionnelle sur cette branche augmente. Au contraire, tout se passera si la sortie est configurée comme Compare A Pwm = Clear Up. Tout cela est bien illustré dans l'image ci-dessous.



Les valeurs que ces registres de comparaison peuvent prendre dépendent de la largeur de bit du canal PWM que nous avons choisie. Avec PWM = 8 (PWM 8 bits), une valeur de 0 à 255 est possible ; à PWM = 9 de 0 à 511 ; avec PWM = 10 de 0 à 1023. Ici, je pense que tout est clair.


Maintenant un petit exemple : connectez les LED au microcontrôleur comme indiqué sur le schéma (l'alimentation n'est pas indiquée sur le schéma)


Et écrivons un petit programme :


$ cristal = 4000000

Config Timer1 = Pwm, Pwm = 9, Compare A Pwm = Clear Down, Compare B Pwm = Clear Up, Prescale = 8
Config PORTB.3 = Sortie
Config PORTB.4 = Sortie

Incr Pwm1a "augmenter en douceur la valeur du registre de comparaison OCR1A
Incr Pwm1b "augmenter en douceur la valeur du registre de comparaison OCR1B

Attente 20 "ajouter un délai

Boucler

Finir

Après avoir compilé et flashé le programme dans le contrôleur, l'une des LED (D1) gagnera en luminosité en douceur et l'autre (D2) s'éteindra en douceur


Si nous poussons maintenant l'oscilloscope aux sorties PWM, nous pouvons voir une telle image avec un rapport cyclique changeant (signal bleu sur OC1A, rouge sur OC1B):


Configuration Timer0 pour la génération PWM est pratiquement le même, sauf que timer0 est un timer de 8 bits, et donc le PWM généré par ce timer aura toujours une largeur de bit de 8. Par conséquent, lors de la configuration de ce timer, la largeur de bit PWM n'est pas indiquée :

Config Timer0 = Pwm, Compare A Pwm = Clear Up, Compare B Pwm = Clear Down, Prescale = 64



Maintenant un exemple similaire avec des LED, mais maintenant nous allons générer un PWM en utilisant Timer0 :


$ regfile = "attiny2313.dat"
$ cristal = 4000000

Config Timer0 = Pwm, Compare A Pwm = Clear Down, Compare B Pwm = Clear Up, Prescale = 8
Config PORTB.2 = Sortie
Config PORTD.5 ​​= Sortie

Incr Pwm0a " augmenter en douceur la valeur du registre OCR0A
Incr Pwm0b ​​​​" augmenter en douceur la valeur du registre OCR0B

Attente 20 "ajouter un délai

Boucler

Finir

Connectez les LED à la sortie Timer0 PWM, comme indiqué sur le schéma :

Ici, tout est pareil : la première LED (D1) gagnera progressivement en luminosité et la seconde (D2) s'éteindra en douceur.


Compter la fréquence de génération PWM

Si vous avez besoin de connaître la fréquence de génération PWM, ce n'est pas difficile à faire. Regardez la formule ci-dessous :

Fréquence PWM = (fréquence du quartz / pré-échelonneur) / (taille du registre de comptage * 2)

Par exemple, comptons plusieurs valeurs :

1. Fréquence du quartz = 4000000 Hz, prescaler = 64, largeur PWM 10 bits => taille du registre de comptage = 1024

Fréquence PWM = (4000000/64) / (1024 * 2) = 122 Hz

2. Fréquence du quartz = 8 000 000 Hz, prescaler = 8, largeur PWM 9 bits => taille du registre de comptage = 512

Fréquence PWM = (8000000/8) / (512 * 2) = 976,56 Hz

3. La fréquence du quartz est de 16000000 Hz, le prescaler = 1, la largeur du PWM est de 8 bits => la taille du registre de comptage = 256

Fréquence PWM = (16000000/1) / (256 * 2) = 31250 Hz

Vous avez aimé l'article ? Partager avec des amis: