Programmation de microcontrôleurs pour débutants avr. Conseils aux programmeurs de microcontrôleurs débutants. Programmation des microcontrôleurs AVR pour les débutants

Maintenant que nous connaissons déjà certaines capacités et fonctions des microcontrôleurs, une question logique se pose naturellement : que faut-il pour programmer les microcontrôleurs ? Quels programmes et appareils sont nécessaires et où puis-je les obtenir ?


Pour qu'un microcontrôleur puisse résoudre des problèmes et exécuter certaines fonctions, il doit être programmé, c'est-à-dire qu'un programme ou un code de programme doit y être écrit.

Structure et ordre d'écriture d'un programme

Tout d'abord, avant de commencer à écrire un programme, ou plutôt du code de programme, vous devez clairement comprendre quelles fonctions le microcontrôleur remplira. Par conséquent, vous devez d’abord déterminer l’objectif ultime du programme. Lorsqu'il est défini et complètement compris, un algorithme pour le programme est alors élaboré. Un algorithme est une séquence d’exécution de commandes. L'utilisation d'algorithmes permet de structurer plus clairement le processus d'écriture de code, et lors de l'écriture de programmes complexes, elle permet souvent de réduire le temps consacré à leur développement et à leur débogage.

L'étape suivante après la compilation de l'algorithme consiste à écrire directement le code du programme. Les programmes pour microcontrôleurs sont écrits dans le langage Si ou assembleur . Only Assembly est plus un ensemble d’instructions qu’un langage de programmation et est un langage de bas niveau.


Nous écrirons des programmes en C, qui est un langage haut niveau. Les programmes en C sont écrits beaucoup plus rapidement que ceux similaires en Assembly. D'ailleurs, tout programmes complexesécrit principalement en C.

Ici, nous ne comparerons pas les avantages et les inconvénients de l’écriture de programmes en Assembly et en C. Au fil du temps, après avoir acquis une certaine expérience dans la programmation MK, vous tirerez vous-même des conclusions utiles.

Le code du programme lui-même peut être écrit dans n'importe quelle norme éditeur de texte, par exemple dans le Bloc-notes. Cependant, en pratique, ils utilisent davantage éditeurs pratiques, qui sera discuté ci-dessous.

Compilation d'un programme

Le code C que nous avons écrit n'est pas encore compréhensible pour le microcontrôleur, puisque le MK ne comprend que les commandes du système binaire (ou hexadécimal), qui est un ensemble de zéros et de uns. Par conséquent, le code C doit être converti en zéros et en uns. A cet effet, il est utilisé programme spécial, appelé compilateur, et le processus lui-même la transformation du code est appelée compilation.

Pour flasher le firmware MK, un appareil appelé programmeur. Selon le type de programmateur, son entrée est connectée à COM ou port USB, et la sortie est vers certaines broches du microcontrôleur.


Existe large choix programmeurs et cartes de débogage, mais nous sommes assez satisfaits du plus simple programmeur, qui en Chine ne coûte pas plus de 3 dollars.


Une fois le microcontrôleur flashé, le programme est débogué et testé sur un appareil réel ou, comme on dit aussi, sur du matériel.

Résumons maintenant les étapes de programmation des microcontrôleurs.


En écrivant programmes simples on peut se passer du deuxième point, c'est-à-dire sans rédiger un algorithme sur papier, il suffit de le garder en tête.

Il convient de noter que le débogage et les tests du programme sont également effectués avant de flasher le firmware MK.

Ensemble de programmes requis

Il existe de nombreux outils utiles et programmes pratiques pour la programmation MK. Ils sont à la fois payants et gratuits. Parmi eux, il y en a trois principaux :

1) Atmel Studio

2) CodeVisionAVR

3) GagnerAVR

Tous ces programmes sont liés à EDIje intégré D développement E environnement – ​​​​environnement de développement intégré. Vous pouvez y écrire du code, le compiler et le déboguer.

Vous devriez faire attention à Code Vision AVR. Cet IDE rend l’écriture de code plus facile et plus rapide. Cependant, le programme est payant.

Au stade initial de la programmation, il est préférable d'écrire tous les programmes manuellement, sans aucune simplification. Cela vous aidera à acquérir rapidement les compétences nécessaires et, à l'avenir, vous pourrez bien comprendre et modifier les codes écrits par quelqu'un d'autre pour répondre à vos besoins. Par conséquent, je recommande d'utiliser Atmel Studio. Premièrement, il est absolument gratuit et constamment mis à jour, et deuxièmement, il a été développé par une entreprise qui fabrique des microcontrôleurs sur lesquels nous apprendrons à programmer.

Firmware et débogage du programme

Nous allons flasher les microcontrôleurs à l'aide d'un programme supplémentaire.

Si un microcontrôleur n'est pas disponible, son fonctionnement peut être émulé à l'aide du programme. Cela simplifie grandement le processus de débogage d'un programme même si vous disposez d'un microcontrôleur, vous n'avez donc pas besoin de le reflasher souvent, car tout microcontrôleur a un nombre fini de réécritures, bien que ce nombre soit assez important.

Lors du flashage et du débogage du MK, il est pratique de le placer sur la planche à pain, mais ce n'est pas du tout nécessaire. Par conséquent, pour plus de commodité, il est utile de planche à pain. Existe grand choix planches à pain, cependant, je vous recommande de prendre celle qui a le plus de trous possible. Une fois que nous aurons commencé à connecter des écrans à sept segments, vous commencerez à apprécier les avantages des planches à pain plus grandes.

Un autre élément important qui nous sera utile est la documentation technique du MK, appelée Fiche de données. En général, vous devez télécharger fiche technique du microcontrôleur ATmega8.

décembre 2015

1. Avantages de la méthode proposée

Les circuits de dispositifs basés sur des microcontrôleurs (MCU) se distinguent généralement par une combinaison de deux qualités difficiles à combiner : une simplicité maximale et une fonctionnalité élevée. De plus, la fonctionnalité peut être modifiée et étendue à l'avenir sans apporter de modifications au circuit - simplement en remplaçant le programme (clignotant). Ces fonctionnalités s'expliquent par le fait que les créateurs des MK modernes ont essayé de placer sur une seule puce tout ce dont un développeur pourrait avoir besoin. appareil électronique- au moins autant que possible. En conséquence, l’accent a été déplacé des circuits et de l’installation vers les logiciels. Avec l'utilisation de MK, il est désormais moins nécessaire de « charger » le circuit avec des pièces et il y a moins de connexions entre les composants. Ceci, bien sûr, rend le circuit plus attrayant pour la répétition par les ingénieurs électroniciens expérimentés et novices. Mais comme d’habitude, il faut tout payer. Cela non plus ne s’est pas fait sans difficultés. Si vous achetez un nouveau MK, installez-le dans un circuit correctement assemblé à partir de pièces réparables et mettez sous tension, alors rien ne fonctionnera - l'appareil ne fonctionnera pas. Le microcontrôleur a besoin d'un programme.

Il semblerait que tout soit simple avec cela aussi - sur Internet, vous pouvez trouver de nombreux schémas avec un firmware gratuit. Mais ici, il y a un problème : le firmware doit d'une manière ou d'une autre être « téléchargé » dans le microcontrôleur. Pour quelqu'un qui n'a jamais fait cela auparavant, une telle tâche devient souvent un problème et le principal facteur répulsif, l'obligeant souvent à abandonner les plaisirs de l'utilisation de MK et à rechercher des schémas basés sur une logique « lâche » et rigide. Mais tout n’est pas aussi compliqué qu’il y paraît à première vue.

Après avoir analysé les publications sur Internet, vous constaterez que ce problème Ce problème est le plus souvent résolu de deux manières : acheter un programmeur prêt à l'emploi ou en fabriquer un fait maison. Dans le même temps, les circuits publiés par les programmeurs maison sont très souvent excessivement complexes - beaucoup plus complexes que ce qui est réellement nécessaire. Bien sûr, si vous envisagez de flasher le MK tous les jours, il est préférable d'avoir un programmeur « cool ». Mais si le besoin d'une telle procédure se présente rarement, de temps en temps, vous pouvez alors vous passer complètement d'un programmeur. Non, bien sûr, nous ne parlons pas d’apprendre à faire cela avec le pouvoir de la pensée. Cela signifie qu'en comprenant comment le programmeur interagit avec le microcontrôleur lors de l'écriture et de la lecture d'informations dans son mode de programmation, nous pouvons nous contenter des outils disponibles pour un objectif plus large. Ces outils devront remplacer à la fois les parties logicielles et matérielles du programmeur. Le matériel doit fournir une connexion physique au microcircuit MK, la possibilité d'appliquer des niveaux logiques à ses entrées et de lire les données de ses sorties. La partie logicielle doit assurer le fonctionnement de l'algorithme qui contrôle tous les processus nécessaires. Nous notons également que la qualité de l'enregistrement des informations dans le MK ne dépend pas du degré de « cool » de votre programmeur. Il n’existe pas de « mieux enregistré » ou de « pire ». Il n'y a que deux options : « enregistré » et « non enregistré ». Cela s'explique par le fait que le processus d'enregistrement à l'intérieur du cristal est directement contrôlé par le MK lui-même. Il vous suffit de lui fournir une alimentation de haute qualité (sans interférence ni ondulation) et de bien organiser l'interface. Si les résultats du test de lecture ne révèlent aucune erreur, alors tout est en ordre - vous pouvez utiliser le contrôleur aux fins prévues.

Afin d'écrire un programme dans le MK sans avoir de programmeur, nous avons besoin d'un convertisseur de port USB-RS232TTL et également. Le convertisseur USB-RS232TTL permet d'utiliser un port USB pour créer un port COM qui ne diffère du « vrai » que par le fait que ses entrées et sorties utilisent des niveaux logiques TTL, c'est-à-dire une tension comprise entre 0 et 5 volts ( vous pouvez en savoir plus dans l'article " "). Dans tous les cas, il est utile d’avoir un tel convertisseur dans votre « foyer », donc si vous n’en avez pas déjà un, cela vaut vraiment la peine de l’acheter. Quant aux niveaux logiques, dans notre cas, TTL est même un avantage par rapport à un port COM classique, car les entrées et sorties d'un tel port peuvent être directement connectées à n'importe quel microcontrôleur alimenté en 5 V, y compris ATtiny et ATmega. Mais n'essayez pas d'utiliser un port COM ordinaire - ils utilisent des tensions comprises entre -12 et +12 V (ou -15...+15 V). Dans ce cas, une connexion directe au microcontrôleur est inacceptable !!!

L'idée de créer un script pour le programme Perpetuum M, qui implémente les fonctions du programmeur, est née après la lecture d'un certain nombre de publications sur Internet proposant certaines solutions pour le firmware MK. Dans chaque cas, de graves déficiences ou des difficultés excessives ont été découvertes. Souvent, je tombais sur des circuits de programmateur contenant un microcontrôleur, et en même temps, des conseils étaient donnés assez sérieusement comme : "... et pour programmer le microcontrôleur pour ce programmateur, nous aurons besoin... c'est vrai - un autre programmateur !" Ensuite, il a été suggéré d'aller chez un ami et de chercher service payant et ainsi de suite. Qualité logiciel, distribué sur le réseau à ces fins, n'a pas non plus été impressionné - de nombreux problèmes ont été constatés à la fois avec la fonctionnalité et avec la « nébulosité » interface utilisateur. Il faut souvent beaucoup de temps pour comprendre comment utiliser un programme - il faut l'étudier même pour effectuer les actions les plus simples. Un autre programme peut faire quelque chose pendant longtemps et avec diligence, mais l'utilisateur apprend que rien n'est écrit sur le MK seulement après que l'ensemble du micrologiciel a été complètement terminé et que le test de lecture a été effectué. Le problème suivant se produit également : l'utilisateur essaie de sélectionner son MK dans la liste des cristaux pris en charge, mais il n'est pas dans la liste. Dans ce cas, vous ne pourrez pas utiliser le programme - l'inclusion dans la liste des MK manquants n'est généralement pas fournie. De plus, la sélection manuelle d'un contrôleur dans la liste semble étrange, étant donné que le programmeur peut dans de nombreux cas déterminer lui-même le type de MK. Tout cela n'est pas dit pour jeter de la boue sur les produits existants, mais pour expliquer la raison de l'apparition du script du programme Perpetuum M, décrit dans cet article. Le problème existe réellement, et il concerne avant tout les débutants qui ne parviennent pas toujours à surmonter ce « mur » pour faire leurs premiers pas dans le monde des microcontrôleurs. Le script proposé prend en compte les lacunes constatées dans d'autres programmes. Une « transparence » maximale du fonctionnement de l’algorithme a été implémentée, une interface utilisateur extrêmement simple qui ne nécessite aucun apprentissage et ne laisse aucune chance de se tromper et de « cliquer sur la mauvaise chose ». Si le MK requis ne fait pas partie de ceux pris en charge, vous pouvez ajouter sa description vous-même, en prenant les données nécessaires à partir de la documentation téléchargée sur le site Web du développeur MK. Et, plus important encore, le script est ouvert à l’étude et à la modification. N'importe qui peut l'ouvrir dans un éditeur de texte, l'étudier et le modifier à sa guise, en le modifiant à son goût fonctions existantes et en ajoutant ceux manquants.

La première version du script a été créée en juin 2015. Cette version prend uniquement en charge les microcontrôleurs des séries ATtiny et ATmega d'Atmel avec fonctions d'écriture/lecture de mémoire flash, réglage des bits de configuration, détection automatique type de contrôleur. L'écriture et la lecture de l'EEPROM ne sont pas implémentées. Il était prévu de compléter les fonctionnalités du script : ajouter l'écriture et la lecture de l'EEPROM, implémenter le support des contrôleurs PIC, etc. Pour cette raison, le scénario n'a pas encore été publié. Mais faute de temps, la mise en œuvre du plan a été retardée et, pour que le meilleur ne devienne pas l'ennemi du bien, il a été décidé de publier la version existante. Si déjà fonctions implémentées Cela ne suffira pas, ne vous inquiétez pas. Dans ce cas, vous pouvez essayer d’ajouter vous-même la fonction souhaitée. Je ne me cacherai pas : l’idée de créer ce scénario dans un premier temps porte aussi une signification pédagogique. En comprenant l'algorithme et en y ajoutant quelque chose qui vous est propre, vous pourrez mieux comprendre le fonctionnement du MK en mode programmation, afin qu'à l'avenir vous ne vous retrouviez pas dans la position d'une fille devant un cassé en bas de la voiture, regardant pensivement l'intérieur et ne comprenant pas pourquoi elle « ne fonctionne pas ».

2. Interface MK en mode programmation

Il y a plusieurs de diverses façons mettez le contrôleur en mode programmation et travaillez avec lui dans ce mode. Le plus simple à mettre en œuvre pour les contrôleurs des séries ATtiny et ATmega est peut-être SPI. Nous l'utiliserons.

Mais avant de commencer à considérer les signaux nécessaires à la génération du SPI, nous ferons un certain nombre de réserves. Le microcontrôleur possède des bits de configuration. Il s'agit en quelque sorte d'interrupteurs à bascule, une commutation qui permet de modifier certaines propriétés du microcircuit en fonction des besoins du projet. Physiquement, ce sont des cellules mémoire non volatiles, comme celles dans lesquelles un programme est écrit. La différence est qu'ils sont très peu nombreux (jusqu'à trois octets pour ATmega) et qu'ils ne font partie de l'espace d'adressage d'aucune mémoire. L'écriture et la lecture des données de configuration sont effectuées par des commandes distinctes en mode de programmation MK. Il est maintenant important de noter que certains bits de configuration affectent la capacité même à utiliser SPI. Avec certaines de leurs valeurs, il se peut que SPI ne puisse pas être utilisé. Si vous tombez sur un tel microcontrôleur, la méthode proposée dans cet article ne vous aidera pas. Dans ce cas, vous devrez soit modifier les paramètres des bits de configuration dans le programmateur, qui prend en charge un mode de programmation différent, soit utiliser un autre microcontrôleur. Mais ce problème ne s'applique qu'aux MK d'occasion, ou à ceux avec lesquels quelqu'un a déjà « joué » sans succès. Le fait est que les nouveaux MCU sont livrés avec des paramètres de bits de configuration qui n'empêchent pas l'utilisation de SPI. Ceci est confirmé par les résultats des tests du script de programmation du programme Perpetuum M, au cours desquels quatre MK différents (ATmega8, ATmega128, ATtiny13, ATtiny44) ont été flashés avec succès. Ils étaient tous neufs. Le paramétrage initial des bits de configuration était conforme à la documentation et n'interférait pas avec l'utilisation de SPI.

Compte tenu de ce qui précède, vous devez prêter attention aux éléments suivants. Le bit SPIEN autorise ou refuse explicitement l'utilisation de SPI, donc dans notre cas sa valeur doit être habilitante. Le bit RSTDISBL est capable de transformer l'une des sorties du microcircuit (prédéterminée) en entrée du signal «reset», ou de ne pas la transformer (selon la valeur écrite sur ce bit). Dans notre cas, l'entrée « reset » est nécessaire (si elle est absente, il ne sera pas possible de passer le MK en mode programmation via SPI). Il existe également des bits du groupe CKSEL qui spécifient la source du signal d'horloge. Ils n'empêchent pas l'utilisation du SPI, mais ils doivent également être gardés à l'esprit, car s'il n'y a aucune impulsion d'horloge ou si leur fréquence est inférieure à celle acceptable pour une vitesse SPI donnée, rien de bon ne se passera non plus. En règle générale, les nouveaux MCU dotés d'un oscillateur RC interne ont les bits du groupe CKSEL configurés pour l'utiliser. Cela nous convient très bien : le pointage est assuré sans aucun effort supplémentaire de notre part. Il n'est pas nécessaire de souder le résonateur à quartz ni de connecter un générateur externe. Si les bits spécifiés contiennent un paramètre différent, vous devrez veiller à la synchronisation conformément au paramètre. Dans ce cas, il peut être nécessaire de connecter un résonateur à quartz ou un générateur d'horloge externe au MCU. Mais dans cet article, nous n'examinerons pas comment cela se fait. Les exemples de connexion d'un MK pour la programmation contenus dans cet article sont conçus pour le cas le plus simple.

Riz. 1. Échange de données via SPI en mode programmation

Passons maintenant à la figure 1, tirée de la documentation de l'ATmega128A MK. Il montre le processus de transmission d'un octet au MK et de réception simultanée d'un octet du MK. Comme nous le voyons, ces deux processus utilisent les mêmes impulsions d'horloge fournies par le programmeur au microcontrôleur à son entrée SCK - l'une des broches du microcircuit, pour laquelle un tel rôle est attribué dans le mode de programmation SPI. Deux lignes de signaux supplémentaires assurent la réception et la transmission des données, un bit par cycle d'horloge. Grâce à l'entrée MOSI, les données entrent dans le microcontrôleur et les données lues sont extraites de la sortie MISO. Remarquez les deux lignes pointillées tracées de SCK à MISO et MOSI. Ils montrent à quel moment le microcontrôleur « avale » le bit de données défini sur l'entrée MOSI, et à quel moment il définit lui-même son propre bit de données sur la sortie MISO. Tout est assez simple. Mais pour passer le MK en mode programmation, nous avons encore besoin d'un signal RESET. N'oublions pas non plus le fil GND commun et l'alimentation VCC. Au total, il s'avère que seuls 6 fils doivent être connectés au microcontrôleur pour flasher son firmware via SPI. Ci-dessous, nous analyserons cela plus en détail, mais pour l'instant nous ajouterons que l'échange de données avec le MK en mode programmation via SPI s'effectue par paquets de 4 octets. Le premier octet de chaque paquet est essentiellement entièrement dédié au codage des instructions. Le deuxième octet, selon le premier, peut être une continuation du code de commande, ou une partie de l'adresse, ou peut avoir une valeur arbitraire. Le troisième octet est principalement utilisé pour transmettre des adresses, mais peut avoir une valeur arbitraire dans de nombreuses instructions. Le quatrième octet transmet généralement des données ou a une valeur arbitraire. Simultanément à la transmission du quatrième octet, certaines commandes reçoivent des données provenant du microcontrôleur. Les détails de chaque commande peuvent être trouvés dans la documentation du contrôleur dans le tableau intitulé « Jeu d'instructions de programmation série SPI ». Pour l'instant, notons seulement que l'ensemble de l'échange avec le contrôleur est construit à partir d'une séquence de paquets de 32 bits, dont chacun ne transfère pas plus d'un octet. informations utiles. Ce n’est pas très optimal, mais dans l’ensemble cela fonctionne bien.

3. Connexion du MK pour la programmation

Pour garantir que tous les signaux nécessaires sont fournis aux entrées du microcontrôleur pour organiser l'interface SPI et lire les données de sa sortie MISO, il n'est pas nécessaire de créer un programmeur. Cela peut être facilement réalisé en utilisant le convertisseur USB-RS232TTL le plus courant.

Sur Internet, vous pouvez souvent trouver des informations selon lesquelles ces convertisseurs sont de qualité inférieure et que rien de grave ne peut être fait avec eux. Mais en ce qui concerne la plupart des modèles de convertisseurs, cette opinion est fausse. Oui, il existe des convertisseurs en vente qui n'ont pas toutes les entrées et sorties disponibles par rapport à un port COM standard (par exemple, uniquement TXD et RXD), tout en ayant une conception non séparable (le microcircuit est rempli de plastique - il est impossible d'atteindre ses broches). Mais ceux-ci ne valent pas la peine d’être achetés. Dans certains cas, vous pouvez obtenir les entrées et sorties de port manquantes en soudant le câblage directement sur la puce. Un exemple d'un tel convertisseur « amélioré » est présenté sur la figure 2 (puce PL-2303 - plus de détails sur le but de ses broches dans l'article « »). C'est l'un des modèles les moins chers, mais il présente ses propres avantages lorsqu'il est utilisé dans des conceptions faites maison. Les cordons adaptateurs complets dotés d'un connecteur standard à neuf broches à l'extrémité, comme un port COM, sont également très répandus. Ils diffèrent d'un port COM classique uniquement par les niveaux TTL et l'incompatibilité avec les logiciels existants et certains matériels plus anciens. On peut également noter que les cordons de la puce CH34x se révèlent beaucoup plus fiables et stables dans divers tests extrêmes par rapport aux convertisseurs du PL-2303. Toutefois, en utilisation normale, la différence n’est pas perceptible.

Lors du choix d'un convertisseur USB-RS232TTL, vous devez également faire attention à la compatibilité de son pilote avec la version du système d'exploitation que vous utilisez.

Regardons de plus près le principe de connexion d'un microcontrôleur et d'un convertisseur USB-RS232TTL à l'aide de l'exemple de quatre différents modèles MK : ATtiny13, ATtiny44, ATmega8 et ATmega128. La figure 3 montre le schéma général d'une telle connexion. Vous serez peut-être surpris d'apprendre que les signaux RS232 (RTS, TXD, DTR et CTS) sont utilisés de manière inappropriée. Mais ne vous inquiétez pas : le programme Perpetuum M est capable de travailler directement avec eux - de définir les valeurs de sortie et de lire les états d'entrée. Quoi qu'il en soit, les convertisseurs USB-RS232TTL largement utilisés sur les puces CH34x et PL-2303 offrent cette capacité - cela a été vérifié. Il ne devrait également y avoir aucun problème avec d'autres convertisseurs populaires, puisqu'ils utilisent caractéristiques standards Les fenêtres.

Résistances illustrées dans régime général, en principe, vous n’êtes pas obligé de l’installer, mais c’est quand même mieux de l’installer. Quel est leur but ? En utilisant les entrées et sorties TTL du convertisseur et l'alimentation cinq volts du microcontrôleur, nous éliminons ainsi le besoin de coordonner les niveaux logiques - tout est déjà tout à fait correct. Cela signifie que les connexions peuvent être directes. , tout peut arriver. Par exemple, selon la loi de la méchanceté, un tournevis peut tomber juste à l'endroit où il ne pourrait pas tomber, et court-circuiter quelque chose qui ne doit en aucun cas être court-circuité. Bien sûr, tout peut tourner. Les résistances dans ce cas réduisent parfois les conséquences, l'un de leurs objectifs est d'éliminer un éventuel conflit de sorties. Le fait est qu'une fois la programmation terminée, le microcontrôleur passe en mode de fonctionnement normal. Il arrive que sa sortie connectée à la sortie du convertisseur (RTS, TXD ou DTR) devienne également une sortie, selon le programme qui vient d'être enregistré dans le MK. Dans ce cas, ce serait très grave si deux sorties directement connectées « se battent ». - essayez de définir différents niveaux logiques. Dans une telle « lutte », quelqu’un peut « perdre », mais nous ne le voulons pas.

Les valeurs des trois résistances sont choisies au niveau de 4,3 KOhm. Ceci s'applique aux connexions entre la sortie du convertisseur et l'entrée du microcontrôleur. La précision des résistances n'a pas d'importance : vous pouvez réduire leur résistance à 1 KOhm ou l'augmenter à 10 KOhm (mais dans le second cas, le risque d'interférence augmente lors de l'utilisation de fils longs sur le chemin du MK). Quant à la connexion entre l'entrée du convertisseur (CTS) et la sortie du microcontrôleur (MISO), une résistance de 100 Ohm est utilisée ici. Ceci s'explique par les particularités de l'entrée du convertisseur utilisé. Lors des tests, un convertisseur a été utilisé sur le microcircuit PL-2303 dont les entrées sont apparemment connectées au positif de l'alimentation avec une résistance relativement faible (de l'ordre de plusieurs centaines d'Ohms). Pour « casser le pull-up », j'ai dû installer une résistance avec une si petite résistance. Cependant, vous n’êtes pas du tout obligé de l’installer. Sur le convertisseur, c'est toujours l'entrée. Cela ne peut pas devenir une issue, ce qui signifie qu’il n’y aura aucun conflit de sortie dans l’évolution des événements.

Si la puce dispose d'une broche AVCC distincte pour alimenter le convertisseur analogique-numérique (par exemple, ATmega8 ou ATmega128), elle doit être connectée à la broche d'alimentation VCC commune. Certains circuits intégrés ont plusieurs broches d'alimentation VCC ou plusieurs GND. Par exemple, ATmega128 possède 3 broches GND et 2 broches VCC. Dans une conception permanente, il est préférable de connecter les broches du même nom entre elles. Dans notre cas, lors de la programmation, vous pouvez utiliser chacun une broche VCC et GND.

Et voici à quoi ressemble la connexion ATtiny13. La figure montre les affectations des broches utilisées lors de la programmation via SPI. À côté de la photo, on voit à quoi ressemble en réalité une connexion temporaire.


Certains diront peut-être que ce n'est pas grave - les connexions sur le câblage. Mais toi et moi sommes des gens sensés. Notre objectif est de programmer le microcontrôleur en y consacrant un minimum de temps et d'autres ressources, et de ne pas nous montrer devant quelqu'un. La qualité n'en souffre pas. La méthode « sur fils » dans ce cas est assez efficace et justifiée. Le flashage du firmware du contrôleur est une procédure unique, il ne sert donc à rien de le recouvrir de strass. S'il est prévu de modifier le firmware à l'avenir sans retirer le contrôleur du circuit (dans le produit fini), alors cela est pris en compte lors de l'installation lors de la fabrication de l'appareil. Habituellement, un connecteur (RESET, SCK, MOSI, MISO, GND) est installé à cet effet, et le MK peut être flashé même après l'installation sur la carte. Mais ce sont des délices créatifs. Nous considérons le cas le plus simple.

Passons maintenant à l'ATtiny44 MK. Ici, tout est à peu près pareil. D'après le dessin et la photo, même un débutant n'aura aucune difficulté à comprendre le lien. Comme l'ATtiny44, vous pouvez connecter les microcontrôleurs ATtiny24 et ATtiny84 - les affectations des broches pour ces trois sont les mêmes.


Un autre exemple de connexion temporaire d'un contrôleur pour le programmer est ATmega8. Il y a plus de broches ici, mais le principe est le même - quelques fils, et maintenant le contrôleur est prêt à "remplir" les informations. Le fil noir supplémentaire sur la photo provenant de la broche 13 ne participe pas à la programmation. Il est conçu pour supprimer un signal sonore après que le MK ait quitté le mode de programmation. Cela est dû au fait que lors du débogage du script de "Perpetuum M", le programme de boîte à musique a été téléchargé sur le MK.


Souvent, un contrôleur est disponible dans différents boîtiers. Dans ce cas, l'affectation des broches pour chaque cas est répartie différemment. Si le boîtier de votre contrôleur ne ressemble pas à celui illustré sur la figure, vérifiez l'affectation des broches selon documentation technique, qui peut être téléchargé sur le site Web des développeurs MK.

Pour compléter le tableau, regardons la connexion d'un microcircuit MK avec un grand nombre de « pattes ». Le but du fil noir supplémentaire sur la photo provenant de la broche 15 est exactement le même que dans le cas de l'ATmega8.


Vous êtes probablement déjà convaincu que tout est assez simple. Quiconque sait compter les broches des microcircuits (à partir de la marque dans un cercle dans le sens inverse des aiguilles d'une montre) le comprendra. Et n'oubliez pas la précision. Les microcircuits aiment les gens soignés et ne pardonnent pas les traitements imprudents.

Avant de passer à la partie logicielle, assurez-vous que le pilote du convertisseur USB-RS232TTL est correctement installé (vérifiez le gestionnaire Appareils Windows). Mémorisez ou notez le numéro du port COM virtuel qui apparaît lorsque vous connectez le convertisseur. Ce numéro devra être saisi dans le texte du script, que vous pouvez lire ci-dessous.

4. Script - programmeur pour "Perpetuum M"

Nous avons compris la partie matérielle du « programmeur ». C'est déjà la moitié de la bataille. Reste maintenant à s'occuper de la partie logicielle. Son rôle sera assuré par le programme Perpetuum M sous le contrôle d'un script, qui implémente toutes les fonctions nécessaires pour interagir avec le microcontrôleur.

L'archive contenant le script doit être décompressée dans le même dossier où se trouve le programme perpetuum.exe. Dans ce cas, lorsque vous exécutez le fichier perpetuum.exe, un menu avec une liste s'affichera scripts installés, parmi lesquels il y aura la ligne « AVR MK Programmer » (c'est peut-être la seule). C'est la ligne dont nous avons besoin.

Le script se trouve dans le dossier PMS du fichier "MK Programmer AVR.pms". Ce fichier peut être visualisé, étudié et modifié si nécessaire dans un éditeur de texte classique comme le Bloc-notes Windows. Avant d'utiliser le script, vous devrez probablement apporter des modifications au texte relatif aux paramètres du port. Pour ce faire, vérifiez le gestionnaire de périphériques Nom de Windows port utilisé et, si nécessaire, apportez la modification appropriée à la ligne "PortName="COM4";" - au lieu du chiffre 4, il peut y avoir un autre chiffre. De plus, lorsque vous utilisez un autre modèle de convertisseur USB-RS232TTL, vous devrez peut-être modifier les paramètres d'inversion du signal (lignes de script commençant par le mot « High »). Vous pouvez vérifier l'inversion des signaux par le convertisseur USB-RS232TTL à l'aide d'un des exemples contenus dans la notice du programme Perpetuum M (section des fonctions pour travailler avec le port).

Le sous-dossier MK_AVR contient des fichiers avec des descriptions des contrôleurs pris en charge. Si le contrôleur dont vous avez besoin n'en fait pas partie, vous pouvez ajouter celui dont vous avez besoin vous-même, en suivant une analogie. Prenez l'un des fichiers comme exemple et, à l'aide d'un éditeur de texte, saisissez les données nécessaires en les extrayant de la documentation de votre microcontrôleur. L'essentiel est d'être prudent, de saisir les données sans erreurs, sinon le MK ne sera pas programmé, ou sera mal programmé. DANS version originale 6 microcontrôleurs sont pris en charge : ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 et ATmega128. Le script implémente la reconnaissance automatique du contrôleur connecté - pas besoin de le spécifier manuellement. Si l'identifiant lu sur le MK ne fait pas partie des descriptions disponibles, un message s'affiche indiquant que le contrôleur n'a pas pu être reconnu.

L'archive avec le script contient également Informations Complémentaires. Le dossier des fichiers inc du contrôleur AVR contient une collection très utile et complète de fichiers de définition de contrôleur. Ces fichiers sont utilisés lors de l'écriture propres programmes pour MK. Quatre autres dossiers "MusicBox_..." contiennent des fichiers avec un programme en langage Assembly et un firmware prêts à être téléchargés sur le MK séparément pour ATtiny13, ATtiny44, ATmega8 et ATmega128. Si vous avez déjà connecté l'un de ces MK pour la programmation, comme suggéré dans cet article, vous pouvez le flasher dès maintenant - vous obtiendrez une boîte à musique. Plus d’informations à ce sujet ci-dessous.

Lorsque vous sélectionnez la ligne « MK AVR Programmer » dans le menu du script, le script commence à être exécuté. Parallèlement, il ouvre le port, envoie une commande au MK pour passer en mode programmation, reçoit une confirmation du MK sur la transition réussie, demande l'identifiant du MK et recherche une description de ce MK par son identifiant parmi les disponibles fichiers avec descriptions. S'il ne trouve pas la description recherchée, il affiche un message correspondant. Si une description est trouvée, le menu principal du programmeur s'ouvre. Vous pouvez voir sa capture d'écran sur la figure 8. Une compréhension plus approfondie n'est pas difficile - le menu est très simple.

Dans la première version du script, certaines fonctions d'un programmeur à part entière ne sont pas implémentées. Par exemple, il n'existe aucun moyen de lire et d'écrire sur l'EEPROM. Mais si vous ouvrez le script dans un éditeur de texte, vous verrez qu'il est de très petite taille, malgré le fait que l'essentiel y est déjà implémenté. Cela suggère que l'ajout des fonctions manquantes n'est pas si difficile - le langage est très flexible, il vous permet d'implémenter des fonctionnalités riches dans un petit programme. Mais dans la plupart des cas, même les fonctions existantes suffisent.

Certaines limitations de fonctionnalités sont décrites directement dans le texte du script :
// enregistrement implémenté uniquement à partir de l'adresse zéro (l'enregistrement d'adresse de segment étendu est ignoré, LOAD OFFSET - également)
//l'ordre et la continuité des enregistrements dans le fichier HEX ne sont pas vérifiés
// la somme de contrôle n'est pas vérifiée
Cela s'applique au travail avec un fichier HEX, à partir duquel est extrait le code du firmware du MK. Si ce fichier n'est pas corrompu, la vérification de la somme de contrôle n'aura aucun effet. S'il est déformé, il ne sera pas possible de le détecter à l'aide du script. Dans la plupart des cas, les restrictions restantes ne feront pas de mal, mais vous devez quand même les garder à l'esprit.

5. Boîte à musique – un bricolage simple pour les débutants

Si vous possédez l'un de ces microcontrôleurs : ATtiny13, ATtiny44, ATmega8 ou ATmega128, vous pouvez facilement le transformer en boîte à musique ou en carte musicale. Pour ce faire, il suffit d'écrire le firmware correspondant dans le MK - l'un des quatre qui se trouvent dans les dossiers "MusicBox_..." de la même archive que le script. Les codes du micrologiciel sont stockés dans des fichiers avec l'extension « .hex ». Utiliser ATmega128 pour un tel engin, bien sûr, est « gras », tout comme ATmega8. Mais cela peut être utile à des fins de tests ou d’expérimentations, autrement dit à des fins pédagogiques. Les textes des programmes en Assembler sont également joints. Les programmes n'ont pas été créés à partir de zéro - le programme de boîte à musique du livre d'A.V. Belov "AVR Microcontrollers in Amateur Radio Practice" a été pris comme base. Le programme initial a subi un certain nombre de changements importants :
1. adapté pour chacun des quatre MK : ATtiny13, ATtiny44, ATmega8 et ATmega128
2. Les boutons ont été supprimés - rien n'a besoin d'être connecté au contrôleur à l'exception de l'alimentation et d'un émetteur de son (les mélodies sont jouées les unes après les autres dans une boucle sans fin)
3. la durée de chaque note est réduite de la durée de la pause entre les notes pour éliminer les perturbations du rythme musical
4. la huitième mélodie est connectée, non utilisée dans la version livre
5. du subjectif : quelques « améliorations » pour optimiser et rendre l’algorithme plus facile à comprendre

Dans certaines mélodies, on peut entendre des mensonges et même des erreurs grossières, notamment dans « Smile » - au milieu. Les codes de sonnerie ont été extraits du livre (ou plutôt téléchargés depuis le site Web de l’auteur du livre avec le fichier asm original) et n’ont pas été modifiés. Apparemment, il y a des erreurs dans l'encodage des mélodies. Mais ce n'est pas un problème - toute personne « amicale » avec la musique peut facilement la comprendre et tout réparer.

Dans ATtiny13, faute de compteur 16 bits, il a fallu utiliser un compteur 8 bits pour reproduire les notes, ce qui a entraîné une légère diminution de la précision des notes. Mais cela se remarque à peine à l’oreille.

À propos des bits de configuration. Leurs réglages doivent correspondre à l'état du nouveau microcontrôleur. Si votre MK a déjà été utilisé quelque part, vous devez vérifier l'état de ses bits de configuration et, si nécessaire, les mettre en conformité avec les paramètres du nouveau microcontrôleur. Vous pouvez connaître l'état des bits de configuration du nouveau microcontrôleur dans la documentation de ce MK (section "Fuse Bits"). L'exception est ATmega128. Ce MCU possède le bit M103C, qui permet le mode de compatibilité avec l'ancien ATmega103. L'activation du bit M103C réduit considérablement les capacités de l'ATmega128, et ce bit est actif sur le nouveau MK. Vous devez réinitialiser le M103C à un état inactif. Pour manipuler les bits de configuration, utilisez la section correspondante du menu de script du programmeur.

Inutile de donner un schéma de la boîte à musique : elle ne contient qu'un microcontrôleur, une alimentation et un émetteur piézo-sonique. L'alimentation est fournie exactement de la même manière que lors de la programmation du MK. L'émetteur sonore est connecté entre le fil commun (broche GND du contrôleur) et l'une des broches MK dont le numéro se trouve dans le fichier avec le code assembleur du programme (*.asm). Au début du texte du programme pour chaque MK dans les commentaires, il y a une ligne : « le signal sonore est généré sur la broche XX ». Lorsque le script du programmeur est terminé, le microcontrôleur quitte le mode de programmation et passe en fonctionnement normal. La lecture des mélodies commence immédiatement. En connectant un émetteur sonore, vous pouvez le vérifier. Vous pouvez laisser l'émetteur sonore connecté pendant la programmation du cristal uniquement si le son provient d'une broche qui n'est pas utilisée dans SPI, sinon la capacité supplémentaire sur la broche peut interférer avec la programmation.

Les microcontrôleurs sont des appareils petits, mais en même temps très pratiques pour ceux qui souhaitent créer diverses choses robotiques ou automatisées étonnantes à la maison. Cet article discutera de la programmation AVR pour les débutants, des divers aspects et nuances de ce processus.

informations générales

Les microcontrôleurs peuvent être trouvés partout. Ils sont dans les réfrigérateurs machines à laver, téléphones, machines industrielles, maisons intelligentes et bien d’autres appareils techniques. Leur utilisation généralisée est due à leur capacité à remplacer des circuits d'appareils analogiques plus complexes et à grande échelle. La programmation de l'AVR MK permet un contrôle autonome des appareils électroniques. Ces microcontrôleurs peuvent être considérés comme ordinateur simple, qui peut interagir avec des équipements externes. Ainsi, ils peuvent ouvrir/fermer des transistors, recevoir des données de capteurs et les afficher sur des écrans. En outre, les microcontrôleurs peuvent effectuer divers traitements d'informations d'entrée, tels que ordinateur personnel. Si vous maîtrisez la programmation AVR à partir de zéro et atteignez le niveau d'un professionnel, des possibilités de contrôle presque illimitées s'ouvriront divers appareils en utilisant les ports d'E/S, ainsi qu'en modifiant leur code.

Un peu sur l'AVR

L'article considérera une famille de microcontrôleurs produits par Atmel. Ils ont d'assez bonnes performances, ce qui leur permet d'être utilisés dans de nombreux appareils amateurs. Largement utilisé dans l'industrie. On retrouve dans cette technique :

  1. Domestique. Machines à laver, réfrigérateurs, micro-ondes Et ainsi de suite.
  2. Mobile. Robots, communications, etc.
  3. L'informatique. Systèmes de contrôle périphériques, cartes mères.
  4. Divertissant. Bijoux et jouets pour enfants.
  5. Transport. Systèmes de sécurité des véhicules et de gestion du moteur.
  6. Équipement industriel. Systèmes de contrôle des machines.

Bien entendu, cela ne couvre pas tous les domaines. Ils sont utilisés lorsqu'il est avantageux d'utiliser non pas un ensemble de puces de contrôle, mais un microcontrôleur. Ceci est possible grâce à la faible consommation d'énergie et les langages C et Assembleur sont utilisés pour écrire des programmes, légèrement modifiés pour la famille des microcontrôleurs. De tels changements sont nécessaires en raison de la faiblesse des capacités informatiques, généralement calculées en dizaines de kilo-octets. La programmation AVR sans apprendre ces langages n'est pas possible.

Comment obtenir votre premier microcontrôleur ?

La programmation AVR nécessite :

  1. Disponibilité de l'environnement de développement nécessaire.
  2. En fait, les microcontrôleurs eux-mêmes.

Considérons le deuxième point plus en détail. Il existe trois options pour acquérir l'appareil requis :

  1. Achetez le microcontrôleur lui-même directement.
  2. Obtenez un appareil dans le cadre du concepteur (par exemple, Arduino).
  3. Assemblez vous-même le microcontrôleur.

Il n’y a rien de compliqué dans le premier point, passons donc au deuxième et au troisième.

Obtenez un appareil dans le cadre du concepteur

Le célèbre Arduino sera choisi comme exemple. Il s'agit également d'une plate-forme pratique pour le développement rapide et de haute qualité de divers appareils électroniques. La carte Arduino comprend un ensemble spécifique de composants pour le fonctionnement (il existe différentes configurations). Il doit inclure un contrôleur AVR. Cette approche vous permet de commencer rapidement à développer un appareil, ne nécessite pas de compétences particulières, possède des capacités importantes en termes de connexion de cartes supplémentaires et vous pouvez également trouver de nombreuses informations sur Internet sur des questions d'intérêt. Mais il y avait quelques inconvénients. En achetant un Arduino, une personne se prive de la possibilité de se plonger plus profondément dans la programmation AVR, de mieux comprendre le microcontrôleur et les spécificités de son fonctionnement. Un autre aspect négatif est la gamme relativement étroite de modèles, c'est pourquoi vous devez souvent acheter des cartes pour des tâches spécifiques. Une autre particularité est que la programmation en « SI » est ici assez différente de celle forme standard. Malgré toutes ses lacunes, Arduino convient aux débutants. Mais il ne faut pas en abuser.

Auto-assemblage

Il convient de noter que les microcontrôleurs AVR sont plutôt conviviaux pour les débutants. Vous pouvez les assembler vous-même à l'aide de composants disponibles, simples et bon marché. Si nous parlons des avantages, cette approche vous permet de mieux vous familiariser avec l'appareil, de sélectionner indépendamment les composants nécessaires, d'adapter le résultat final aux exigences, d'utiliser des langages de programmation standard et d'avoir un faible coût. Les seuls inconvénients que l’on peut noter sont la difficulté de l’auto-assemblage lors de sa première réalisation, et le manque de connaissances et de compétences nécessaires.

Comment travailler?

Disons donc que le problème du microcontrôleur a été résolu. En outre, il sera considéré qu'il a été acheté ou acheté indépendamment. De quoi d'autre avez-vous besoin pour maîtriser la programmation AVR ? Pour cela, vous avez besoin d'un environnement de développement (un bloc-notes classique fera l'affaire comme base, mais je recommande d'utiliser Notepad++). Bien qu'il existe d'autres programmes disponibles pour programmer les AVR, ce logiciel sera capable de répondre à toutes les exigences. Un programmeur est également requis. Vous pouvez l'acheter dans votre magasin local, le commander en ligne ou l'assembler vous-même. Un circuit imprimé ne ferait pas de mal non plus. Ce n'est pas obligatoire, mais son utilisation vous permet d'économiser vos nerfs et votre temps. Également acheté/créé indépendamment. Et la dernière chose est la source d’alimentation. Pour l'AVR, il est nécessaire de fournir une alimentation en tension de 5V.

Où et comment étudier ?

Vous ne pouvez pas créer des chefs-d’œuvre à partir de zéro. Cela nécessite des connaissances, de l'expérience et de la pratique. Mais où puis-je les obtenir ? Il existe plusieurs façons. Dans un premier temps, vous pouvez rechercher indépendamment les informations nécessaires sur le World Wide Web. Vous pouvez vous inscrire à des cours de programmation (à distance ou en présentiel) pour acquérir des compétences professionnelles de base. Chaque approche a ses avantages. Ainsi, les cours de programmation à distance seront moins chers, voire gratuits. Mais si quelque chose ne fonctionne pas, alors grâce aux cours en présentiel, un développeur expérimenté sera en mesure de trouver rapidement la cause du problème. Ce serait également une bonne idée de vous familiariser avec la littérature disponible gratuitement. Bien sûr, vous ne pourrez pas vous débrouiller uniquement avec des livres, mais vous pourrez acquérir des connaissances de base sur l'appareil, la programmation en « SI », « Assembleur » et d'autres aspects du travail.

Ports E/S

C'est un sujet extrêmement important. Sans comprendre le fonctionnement des ports d'E/S, la programmation en circuit de l'AVR n'est pas du tout possible. Après tout, l'interaction du microcontrôleur avec des périphériques externes s'effectue précisément par leur intermédiaire. À première vue, un débutant peut penser que le portage est un mécanisme plutôt déroutant. Pour éviter une telle impression, nous n'examinerons pas en détail le schéma de son fonctionnement, mais obtiendrons seulement idée généraleà ce sujet. Considérons mise en œuvre du logiciel. Comme exemple d'appareil, le microcontrôleur AtMega8 a été choisi - l'un des plus populaires de toute la famille AVR. Le port E/S se compose de trois registres responsables de son fonctionnement. Au niveau physique, ils se réalisent comme des jambes. Chacun d'eux correspond à un bit spécifique dans le registre de contrôle. Chaque jambe peut fonctionner à la fois pour saisir des informations et pour les sortir. Par exemple, vous pouvez attacher une fonction permettant d'allumer une LED ou de traiter une pression sur un bouton. À propos, les trois registres mentionnés sont : PORTx, PINx et DDRx. Chacun d'eux est de huit bits (rappelez-vous, nous examinons AtMega8). Autrement dit, un bit est occupé par une jambe spécifique.

Opération d'enregistrement

Le plus important en termes d'orientation est le contrôle DDRx. C'est aussi huit bits. Ses valeurs peuvent être écrites 0 ou 1. Comment le fonctionnement du contrôleur change-t-il lors de l'utilisation de zéros et de uns ? Si un certain bit est mis à 0, alors la jambe correspondante passera en mode d'entrée. Et à partir de là, il sera possible de lire les données fournies avec appareils externes. S'il est défini sur 1, le microcontrôleur sera capable de contrôler quelque chose (par exemple, demander à un transistor de faire passer la tension et d'allumer une LED). Le deuxième plus important est PORTx. Il gère l'état de la jambe. Regardons un exemple. Disons que nous avons un port de sortie. Si nous en définissons un logique dans PORTx, alors un signal est envoyé du microcontrôleur au dispositif de contrôle pour commencer à fonctionner. Par exemple, allumez la LED. Lorsque zéro est réglé, il s'éteint. Autrement dit, il n'est pas nécessaire de travailler constamment avec le registre de contrôle DDRx. Et enfin, parlons de PINx. Ce registre est chargé d'afficher l'état de la broche du contrôleur lorsqu'elle est définie sur l'état d'entrée. Il convient de noter que PINx ne peut fonctionner qu'en mode lecture. Vous ne pourrez rien y écrire. Mais lire l’état actuel de la jambe ne pose aucun problème.

Travailler avec des analogues

Les AVR ne sont pas les seuls microcontrôleurs. Ce marché est réparti entre plusieurs grands fabricants, ainsi qu'entre de nombreux imitateurs chinois et appareils faits maison. À bien des égards, ils sont similaires. Par exemple, la programmation d'un PIC/AVR n'est pas très différente. Et si vous comprenez une chose, alors comprendre tout le reste sera facile. Mais nous recommandons tout de même de commencer l'aventure avec AVR en raison de sa structure compétente, de sa convivialité pour les développeurs et de sa disponibilité. grande quantité matériaux auxiliaires, grâce à quoi le processus de développement peut être considérablement accéléré.

Précautions de sécurité

Quand aura lieu la programmation ? Microcontrôleurs AVR en "SI" ou "Assembleur", il faut travailler avec beaucoup de soin. Le fait est qu'en définissant une certaine combinaison de registres et en modifiant les paramètres internes, vous pouvez bloquer le microcontrôleur en toute sécurité. Cela est particulièrement vrai pour les fusibles. Si vous n'êtes pas sûr de la justesse de vos actions, il est préférable de refuser de les utiliser. La même chose s'applique aux programmeurs. Si vous achetez du matériel d'usine, les microcontrôleurs seront flashés sans problème. Lors de l'assemblage de vos propres mains, une triste situation peut survenir dans laquelle le programmeur bloque l'appareil. Cela peut se produire soit en raison d'une erreur dans le code du programme, soit en raison de problèmes dans le code lui-même. À propos, à propos d'un autre point (cette fois positif) qui a déjà été évoqué en passant, mais qui n'a jamais été entièrement divulgué. Aujourd'hui, presque tous les microcontrôleurs modernes disposent d'une fonction de programmation en circuit. Qu'est-ce que ça veut dire? Supposons que l'appareil ait été soudé sur la carte. Et pour changer son firmware, vous n'avez plus besoin de le dessouder, car une telle intervention peut endommager le microcontrôleur lui-même. Il suffit de se connecter aux broches correspondantes et de le reprogrammer via elles.

Quel modèle choisir ?

Dans le cadre de l'article, AtMega8 a été examiné. Il s'agit d'un microcontrôleur plutôt médiocre au niveau de ses caractéristiques, qui suffit néanmoins à la plupart des métiers. Si vous souhaitez créer quelque chose à grande échelle, vous pouvez prendre des monstres originaux comme Atmega128. Mais ils sont conçus pour des développeurs plus expérimentés. Par conséquent, s'il n'y a pas assez d'expérience, il est préférable de commencer par de petits et appareils simples. En plus, ils sont beaucoup moins chers. D'accord, c'est une chose de bloquer accidentellement un microcontrôleur pour cent roubles, mais une autre de le bloquer pour un demi-millier. Mieux vaut se mettre dans le bain et comprendre les différents aspects du fonctionnement pour ne pas perdre des sommes importantes dans le futur. Dans un premier temps, vous pouvez commencer avec AtMega8, puis vous concentrer sur vos besoins.

Conclusion

Ainsi, le sujet de la programmation AVR a été abordé de la manière la plus Plan général. Bien sûr, il y a encore beaucoup à dire. Ainsi, par exemple, le marquage des microcontrôleurs n'a pas été pris en compte. Et cela peut en dire long. Ainsi, les microcontrôleurs fonctionnent généralement à une tension de 5V. Alors que la présence, par exemple, de la lettre L peut indiquer que seulement 2,7 V suffisent pour le fonctionnement de l'appareil. Comme vous pouvez le constater, la connaissance des marquages ​​peut parfois jouer un rôle très important en termes de fonctionnement correct et durable des appareils. . La durée de fonctionnement des microcontrôleurs est également un sujet intéressant. Chaque appareil est conçu pour certaine période. Ainsi, certains peuvent travailler mille heures. D'autres ont une réserve de garantie de 10 000 !

Matériel minimum défini pour l’apprentissage de la programmation

Avec cet article, nous commencerons à aborder spécifiquement un problème : programmation du microcontrôleur. Le processus se déroulera comme suit : d'abord un article sur la conception d'un microcontrôleur (par exemple, le premier article portera sur les ports d'E/S), puis un article sur la programmation. Notre conversation d'aujourd'hui est introductive et sera consacrée aux questions matérielles et logicielles du processus d'étude des bases de la programmation des microcontrôleurs.

Kit de démarrage pour un microcontrôleur débutant

Pour commencer, je diviserais les microcontrôleurs débutants en trois groupes conditionnels :
- les radioamateurs qui souhaitent collectionner solutions prêtes à l'emploi sur des microcontrôleurs, mais je n'ai aucune envie d'apprendre la programmation
— ceux qui veulent maîtriser la programmation et assembler des conceptions sur des microcontrôleurs, mais qui ont choisi la voie la plus simple — Arduino
— ceux qui souhaitent comprendre pleinement la conception et la programmation des microcontrôleurs et assembler leurs propres conceptions

Pour le premier groupe tout est très simple :
- achetez un programmeur et apprenez à travailler avec lui

Pour le deuxième groupe, j'entrerai dans les détails un peu plus.
Arduino s'adresse aux utilisateurs débutants et non professionnels et se compose de deux parties : le logiciel et le matériel.
La partie logicielle consiste en un shell logiciel gratuit permettant d'écrire des programmes, de les compiler et de programmer l'appareil.
Le langage de programmation est le C++ standard avec quelques modifications pour faciliter le travail avec ce langage (bien qu'il soit possible de créer des programmes ou de connecter des fichiers de projet prêts à l'emploi en utilisant le langage C++ standard). Apprendre à programmer dans Arduino est très simple (c'est pourquoi les programmes Arduino sont appelés « croquis ») - l'ensemble du processus de programmation se résume principalement à la sélection des bibliothèques prêtes à l'emploi nécessaires pour obtenir un résultat spécifique.
Le matériel se compose d'une carte prête à l'emploi avec un microcontrôleur avec le câblage nécessaire pour fonctionnement normal microcontrôleur et cartes d'extension (blindages). De nombreux capteurs et actionneurs prêts à l'emploi sont également produits. L'ensemble du processus d'assemblage d'une structure sur Arduino rappelle un constructeur Lego - vous sélectionnez les cartes d'extension et les appareils nécessaires et les connectez à la carte principale. Un programmeur distinct n'est pas requis pour télécharger le programme.
Arduino est certainement une bonne chose, mais il est principalement destiné uniquement à ceux qui souhaitent assembler des conceptions sur des microcontrôleurs, mais ne veulent pas charger leur cerveau de connaissances inutiles (à leur avis) (c'est purement mon avis).

Eh bien, nous nous considérons comme faisant partie du troisième groupe et nous y irons, bien que épineux, mais très intéressant.

Afin de commencer l'étude pratique du dispositif et de la programmation d'un microcontrôleur, vous devez disposer d'une base matérielle minimale - un kit de démarrage. Le starter kit, qui à mon avis est nécessaire à la maîtrise du microcontrôleur, peut être acheté dans la boutique en ligne du site (cet article peut donc être considéré comme une publicité commerciale :)) :

Je voudrais noter le commentaire d'un lecteur du site. Malheureusement, le commentaire a disparu quelque part, et même le nom du lecteur n'a pas été conservé, mais la personne l'a remarqué très précisément - ce n'est pas la première version de l'ensemble, mais la troisième, plus chère - la configuration de l'ensemble a changé, elle est devenue plus étoffés, de nouveaux composants (nécessaires) ont été ajoutés ( je demande au lecteur du site qui a laissé un commentaire de me pardonner l'erreur de fonctionnement du site). Je n’essaie pas de forcer les lecteurs du site à acheter quelque chose sur la boutique en ligne du site. Ce n'est pas du tout nécessaire, vous pouvez commander auprès de vos camarades chinois.

Et maintenant l'essentiel :
1. Pour les expériences pratiques, nous aurons besoin d'un microcontrôleur (ou de préférence trois) :
— les microcontrôleurs les plus populaires et les plus demandés sont ATmega8A-PU et ATtiny2313A-PU, ATtiny13A-PU. À propos, ATtiny13 est un MK très populaire, et ce n'est pas pour rien qu'on l'appelle "bébé" - petites capacités - mais développements sérieux.
2. Pour écrire un programme sur le microcontrôleur, vous avez besoin d'un programmeur :
— la solution idéale, à mon avis, est le programmateur USBASP, dont nous recevrons également 5 Volts pour les conceptions futures.
3. Pour l'évaluation visuelle et les conclusions des résultats du programme, des outils d'affichage d'informations sont nécessaires :
- LED
- indicateur LED à sept segments
— écran LCD à synthèse de caractères (alphanumérique)
4. Étudier les processus de communication entre le microcontrôleur et d'autres appareils :
- capteur de température numérique DS18B20 et horloge temps réel DS1307 (appareils très pratiques)
5. De plus, nous aurons besoin de transistors, de résistances, de résonateurs à quartz, de condensateurs, de boutons :
- transistors bipolaires de structure NPN et PNP
- un ensemble de résistances de différentes valeurs
- quartz (ici j'ai jeté les trucs supplémentaires) à 32,768 kHz, 8 MHz.
-Condensateurs céramiques 22 pF
- boutons tactiles
6. Pour assembler des structures sur un microcontrôleur, vous aurez besoin d'une maquette pour un montage sans soudure et d'un jeu de cavaliers pour celle-ci :
- Carte de développement MV102 (il est idéal d'avoir deux de ces cartes - elles sont connectées entre elles, ce qui sera très utile à l'avenir)
- connexion de cavaliers à la planche à pain de trois types - flexibles (femelle-femelle, mâle-mâle) et rigides en forme de U

Cela donne un ensemble comme celui-ci :

À l'avenir, une partie de cet ensemble - une planche à pain et des cavaliers pour celle-ci, un programmeur sera toujours nécessaire pour concevoir et tester vos conceptions, et le reste pourra être utilisé dans ces conceptions.

Nous avons fait le tri sur la base matérielle, passons à la deuxième question.

Choisir un langage de programmation et un environnement de développement pour la programmation

Pour être honnête, le choix d'un langage de programmation et d'un environnement de développement est une question très importante ; imposer vos préférences à quelqu'un et conseiller quelque chose est une affaire assez difficile.
Essayons d'aborder ce choix sans parti pris, d'un point de vue purement pratique.
1. Il existe deux langages de programmation principaux pour les microcontrôleurs : Assembly (langage de bas niveau) et C (langage de haut niveau).
Si nous voulons programmer des microcontrôleurs en utilisant toutes leurs capacités (et nous le voulons), alors nous devons apprendre ces deux langages.
2. Environnement de développement pour la programmation de microcontrôleurs.
Il y a un grand choix et beaucoup d'avis. On peut donc dire : « Chaque grenouille fait l’éloge de son marais ». Par exemple, j'aime beaucoup l'environnement de développement graphique peu utilisé « Algorithm Builder », et je peux parler de ses avantages par rapport aux autres programmes pendant très longtemps. Mais nous ferons un choix, comme mentionné ci-dessus, sans parti pris et sans pragmatisme.
Les microcontrôleurs AVR sont fabriqués par Atmel, qui nous fournit également un environnement de programmation gratuit, Atmel Studio (anciennement AVR Studio). Nous nous arrêterons là.
L'environnement de développement intégré (IDE) Atmel Studio nous permettra de :
— écrire des programmes à la fois en Assembly et en C (Pourquoi en C ? Le programme Atmel Studio permet d'écrire des programmes en trois langages (dont nous parlerons dans le premier article), mais il y a une chose : nous considérerons les programmes en C++, nous ne le ferons pas, pour une raison, et dans le prochain article j'en parlerai
- déboguer le programme
— traduire le programme en code machine (compiler)
- écrire le programme sur le microcontrôleur

Ça y est, nous avons fait un choix :


Il reste maintenant deux choses à faire :
1. Procurez-vous une sorte de kit de démarrage (pour commencer, un microcontrôleur ATmega8, plusieurs LED, quelques boutons et résistances suffiront).
2. Installez (installez, pas téléchargez et avec inscription) le programme Atmel Studio à partir du site Web officiel d'Atmel (http://www.atmel.com/ru/).
Nous programmerons les microcontrôleurs à l'aide du programmateur USBASP.
Je n'écrirai pas d'article séparé sur Atmel Studio, nous l'étudierons progressivement, selon les besoins, et en conjonction avec des articles sur la conception et la programmation des microcontrôleurs.

Les microcircuits à diverses fins sont utilisés dans le cadre de l'électronique moderne. Une grande variété de ces composants est complétée par des puces mémoire. Ce type de composants radio (parmi les ingénieurs électroniciens et le grand public) est souvent simplement appelé puces. L'objectif principal des puces mémoire est de stocker certaines informations avec la possibilité de les saisir (écrire), les modifier (écraser) ou suppression complète(effacement) logiciel. L’intérêt général porté aux puces mémoire est compréhensible. Pour les maîtres sachant programmer des puces mémoire, de larges opportunités s'ouvrent dans le domaine de la réparation et de la configuration des appareils électroniques modernes.

Une puce mémoire est un composant électronique dont la structure interne est capable de stocker (se souvenir) des programmes saisis, de n'importe quelle donnée, ou les deux en même temps.

Essentiellement, les informations chargées dans la puce sont une série de commandes constituées d’un ensemble d’unités informatiques à microprocesseur.

Il convient de noter : les puces mémoire font toujours partie intégrante des microprocesseurs - les puces de contrôle. À son tour, le microprocesseur constitue la base de l’électronique de toute technologie moderne.

Un ensemble de composants électroniques sur la carte d’un appareil électronique moderne. Quelque part parmi cette masse de composants radio se trouve un composant capable de stocker des informations.

Ainsi, le microprocesseur contrôle et la puce mémoire stocke les informations nécessaires au microprocesseur.

Les programmes ou les données sont stockés sur une puce mémoire sous la forme d'une série de nombres : des zéros et des uns (bits). Un bit peut être représenté par un zéro logique (0) ou un un logique (1).

Sous une forme unique, le traitement des bits semble complexe. Les bits sont donc regroupés en groupes. Seize bits constituent un groupe de « mots », huit bits constituent un octet - une « partie de mot », quatre bits - un « morceau de mot ».

Le terme logiciel le plus couramment utilisé pour désigner les puces est octet. Il s'agit d'un ensemble de huit bits pouvant prendre de 2 à 8 variations numériques, donnant un total de 256 valeurs différentes.

Pour représenter un octet, un système de nombres hexadécimaux est utilisé, qui prévoit l'utilisation de 16 valeurs provenant de deux groupes :

  1. Numérique (de 0 à 9).
  2. Symbolique (de A à F).

Par conséquent, dans les combinaisons de deux signes système hexadécimal 256 valeurs sont également incluses (de 00h à FFh). Le caractère « h » final indique des nombres hexadécimaux.

Organisation des puces mémoire

Pour les puces mémoire 8 bits (le type le plus courant), les bits sont combinés en octets (8 bits) et stockés à une « adresse » spécifique.

L'adresse attribuée permet d'accéder aux octets. Les huit bits d'adresse d'accès sont émis via huit ports de données.


Organiser la structure d'un périphérique de stockage. À première vue, l’algorithme est complexe et incompréhensible. Mais si tu veux comprendre, la compréhension vient vite

gastrogourou 2017