Maison / Avatar / Micrologiciel mk. Le processus de flashage d'un mini pc. Équipement pour firmware MK

Micrologiciel mk. Le processus de flashage d'un mini pc. Équipement pour firmware MK

Décembre 2015

1. Avantages de la méthode proposée

Les circuits d'appareils basés sur des microcontrôleurs (MC) 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 - en remplaçant simplement le programme (clignotant). Ces caractéristiques s'expliquent par le fait que les créateurs de microcontrôleurs modernes ont essayé de placer sur une seule puce tout ce dont un développeur d'appareils électroniques peut avoir besoin - au moins autant que possible. En conséquence, il y a eu un changement d'orientation des circuits et de l'assemblage vers les logiciels. Avec l'utilisation de MK, il est désormais moins nécessaire de "charger" le circuit de détails, il y a moins de connexions entre les composants. Ceci, bien sûr, rend le circuit plus attrayant pour les ingénieurs en électronique expérimentés et novices de le répéter. Mais, comme d'habitude, il faut tout payer. Là aussi, cela n'a pas été 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, rien ne fonctionnera - l'appareil ne fonctionnera pas. Le microcontrôleur a besoin d'un programme.

Il semblerait que tout soit aussi simple avec cela - sur Internet, vous pouvez trouver de nombreux schémas avec un firmware gratuit. Mais ici, il y a un hic: le firmware doit en quelque sorte être "rempli" 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, les forçant souvent à abandonner les charmes de l'utilisation de MK et à rechercher des schémas basés sur une logique "lâche" et rigide. Mais tout n'est pas si difficile que cela puisse paraître à première vue.

Après analyse des publications sur Internet, on constate que ce problème il est le plus souvent résolu de l'une des deux manières suivantes : acheter un programmeur prêt à l'emploi ou en fabriquer un fait maison. Dans le même temps, les schémas publiés des programmeurs faits maison sont très souvent déraisonnablement complexes - beaucoup plus compliqués qu'il n'est vraiment nécessaire. Bien sûr, s'il est censé flasher le MK tous les jours, mieux vaut avoir un programmeur "cool". Mais si le besoin d'une telle procédure se présente rarement, de temps en temps, vous pouvez généralement vous passer d'un programmeur. Bien sûr que non, nous parlons il ne s'agit pas d'apprendre à le faire avec le pouvoir de votre esprit. 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 débrouiller avec les outils disponibles dans un but plus large. Ces outils devront remplacer à la fois le logiciel et le matériel du programmeur. La partie matérielle doit fournir une connexion physique à la puce MK, la capacité de fournir des niveaux logiques à ses entrées et de lire des données sur 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 "cool" de votre programmeur. Il n'y a pas de "meilleur" ou de "pire". Il n'y a que deux options : "inscrit" et "non inscrit". Cela est dû au fait que le MC lui-même contrôle le processus d'enregistrement à l'intérieur du cristal. Il suffit de lui fournir une alimentation de haute qualité (pas d'interférences ni d'ondulations) et d'organiser correctement l'interface. Si, selon les résultats de la lecture de contrôle, aucune erreur n'a été détectée, alors tout est en ordre - vous pouvez utiliser le contrôleur aux fins prévues.

Afin d'écrire un programme sur le MK sans programmeur, nous avons besoin d'un convertisseur de port USB-RS232TTL et, ainsi. Le convertisseur USB-RS232TTL vous permet de créer un port COM à l'aide du port USB, qui ne diffère du "vrai" que par le fait que des niveaux logiques TTL sont utilisés à ses entrées et sorties, c'est-à-dire une tension comprise entre 0 et 5 volts (pour plus de détails, voir l'article " "). Dans tous les cas, il est utile d'avoir un tel convertisseur dans le "ménage", donc si vous ne l'avez pas encore, vous devez absolument 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 standard - des tensions comprises entre -12 et +12 V (ou -15 ... + 15V) y sont utilisées. La connexion directe au microcontrôleur dans ce cas est inacceptable !!!

L'idée de créer un script pour le programme "Perpetuum M", qui implémente les fonctions d'un programmeur, est née après avoir lu un certain nombre de publications sur Internet proposant certaines solutions pour le firmware MK. Dans chaque cas, de graves lacunes ou des complexités excessives ont été constatées. Nous sommes souvent tombés sur des circuits de programmation contenant un microcontrôleur, et en même temps, des conseils ont été donnés assez sérieusement du type : "... et pour programmer le microcontrôleur pour ce programmeur, il nous faut... c'est vrai - un autre programmeur !" . Ensuite, il a été proposé d'aller chez un ami, chercher service payant et ainsi de suite. La qualité du logiciel distribué sur le net à ces fins n'était pas non plus impressionnante - de nombreux problèmes ont été remarqués à la fois avec la fonctionnalité et avec la "turbidité" de l'interface utilisateur. Il faut souvent beaucoup de temps pour comprendre comment utiliser le programme - il faut l'apprendre même pour effectuer les actions les plus simples. Un autre programme peut faire quelque chose pendant longtemps et avec diligence, mais l'utilisateur saura que rien n'est écrit sur le MK uniquement après que l'intégralité du micrologiciel est terminée et que la lecture de contrôle ultérieure est terminée. Il existe également un problème de ce type : l'utilisateur essaie de sélectionner son MK dans la liste des cristaux pris en charge, mais il ne figure pas dans la liste. Dans ce cas, il ne sera pas possible d'utiliser le programme - en règle générale, l'inclusion dans la liste des MK manquants n'est 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 des 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 vraiment, et il concerne avant tout les débutants qui n'arrivent pas toujours à franchir ce "mur" pour faire leurs premiers pas dans le monde des microcontrôleurs. Le script proposé tient compte des lacunes constatées dans d'autres programmes. La "transparence" maximale de l'algorithme a été mise en œuvre, une interface utilisateur extrêmement simple qui ne nécessite aucune étude et ne laisse aucune chance de se confondre et de "cliquer au mauvais endroit". En l'absence du MK requis parmi ceux pris en charge, il est possible d'ajouter vous-même sa description, en prenant les données nécessaires 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, après l'avoir ouvert dans un éditeur de texte, l'étudier et le modifier à sa guise, en le modifiant à son goût fonctionnalités existantes et en ajoutant ceux qui manquent.

La première version du script a été créée en juin 2015. Cette version ne prend en charge que les MCU des séries ATtiny et ATmega d'Atmel avec fonctions d'écriture/lecture de mémoire flash, avec jeu de bits de configuration, avec détection automatique type de contrôleur. L'écriture et la lecture 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 d'EEPROM, implémenter la prise en charge des contrôleurs PIC, etc. Pour cette raison, le script n'a pas encore été publié. Mais faute de temps, la mise en œuvre du plan a été retardée, et pour que le mieux ne devienne pas l'ennemi du bien, il a été décidé de publier la version existante. Si les fonctions déjà implémentées ne suffisent pas, ne vous inquiétez pas. Dans ce cas, vous pouvez essayer d'ajouter vous-même la fonction souhaitée. Je ne vais pas le cacher : l'idée de créer ce script dans un premier temps porte aussi un sens pédagogique. Après avoir compris l'algorithme et y avoir ajouté quelque chose qui vous est propre, vous pourrez mieux comprendre le fonctionnement du MK en mode programmation, de sorte qu'à l'avenir vous ne vous retrouverez pas dans la position d'une fille devant un cassé voiture, regardant pensivement son intérieur et ne comprenant pas pourquoi elle "ne va pas".

2. Interface MK en mode programmation

Il y a plusieurs différentes manières mettez le contrôleur en mode de 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 probablement SPI. Nous les utiliserons.

Mais, avant de passer à l'examen des signaux nécessaires à la formation de SPI, nous ferons un certain nombre de réserves. Le microcontrôleur possède des bits de configuration. C'est quelque chose comme des interrupteurs à bascule, dont la commutation vous permet de modifier certaines propriétés du microcircuit en fonction des besoins du projet. Physiquement, ce sont des cellules de mémoire non volatile, comme celles dans lesquelles le programme est écrit. La différence est qu'il y en a très peu (jusqu'à trois octets pour ATmega), et ils ne sont inclus dans l'espace d'adressage d'aucune mémoire. L'écriture et la lecture des données de configuration sont effectuées par des commandes séparées du mode de programmation MK. Maintenant, il est important de noter que certains bits de configuration affectent la capacité même d'utiliser SPI. Avec certaines de leurs valeurs, il peut s'avérer que SPI ne peut pas être utilisé. Si vous rencontrez 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 concerne que les MK d'occasion, ou ceux avec lesquels quelqu'un a déjà "joué" sans succès. Le fait est que les nouveaux MK 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 réglage 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 faire attention aux bits suivants. Le bit SPIEN active ou désactive explicitement l'utilisation de SPI, donc, dans notre cas, sa valeur doit être permissive. Le bit RSTDISBL est capable de transformer une des sorties du microcircuit (prédéterminée) en entrée de 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 de SPI, mais ils doivent également être pris en compte, car s'il n'y a pas d'impulsions d'horloge, ou si leur fréquence est inférieure à celle autorisée pour une vitesse SPI donnée, rien de bon n'en sortira non plus. Habituellement, les nouveaux MCU dotés d'un oscillateur RC interne ont les bits de groupe CKSEL définis pour l'utiliser. Nous en sommes tout à fait satisfaits - le chronométrage est fourni sans aucun effort supplémentaire de notre part. Vous n'avez pas besoin de souder le résonateur à quartz, ni de connecter un générateur externe. Si les bits spécifiés contiennent un réglage différent, vous devrez veiller à la synchronisation conformément au réglage. Dans ce cas, il peut être nécessaire de connecter un résonateur à quartz ou un générateur d'horloge externe au MK. Mais dans le cadre de cet article, nous n'examinerons pas comment cela se fait. Les exemples de connexion MK pour la programmation contenus dans cet article sont conçus pour le cas le plus simple.

Riz. 1. Communication SPI en mode programmation

Passons maintenant à la figure 1, extraite de la documentation du MK ATmega128A. Il montre le processus d'envoi d'un octet au MCU et de réception simultanée d'un octet du MCU. Comme on le voit, ces deux processus utilisent les mêmes impulsions d'horloge provenant du programmeur vers le microcontrôleur à son entrée SCK - l'une des broches du microcircuit, pour laquelle ce rôle est attribué dans le mode de programmation SPI. Deux autres lignes de signal assurent la réception et la transmission des données un bit par 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. Notez 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 à l'entrée MOSI, et à quel moment il définit son propre bit de données à la sortie MISO. Tout est assez simple. Mais pour entrer le MK en mode de programmation, nous avons toujours 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 le flasher 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 fondamentalement entièrement réservé au codage de la commande. Le deuxième octet, en fonction du premier, peut être une continuation du code de commande, ou une partie de l'adresse, ou il peut avoir une valeur arbitraire. Le troisième octet est principalement utilisé pour transmettre des adresses, mais dans de nombreuses commandes, il peut avoir une valeur arbitraire. Le quatrième octet transporte généralement des données ou a une valeur arbitraire. Simultanément au transfert du quatrième octet, certaines commandes reçoivent des données provenant du MK. Des détails sur chaque instruction peuvent être trouvés dans la documentation du contrôleur dans un tableau appelé "Jeu d'instructions de programmation série SPI". Pour l'instant, nous remarquons seulement que tout l'échange avec le contrôleur est construit à partir d'une séquence de paquets de 32 bits, dans chacun desquels pas plus d'un octet est transmis. informations utiles. Ce n'est pas très optimal, mais en général cela fonctionne bien.

3. Connexion du MK pour la programmation

Pour s'assurer 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. C'est facile à faire avec le convertisseur USB-RS232TTL le plus courant.

Sur Internet, vous pouvez souvent trouver des informations selon lesquelles ces convertisseurs sont inférieurs, que rien de sérieux ne peut être fait avec eux. Mais pour la plupart des modèles de convertisseurs, cette opinion est erronée. Oui, il existe des convertisseurs à vendre qui n'ont pas toutes les entrées et sorties disponibles par rapport au 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'arriver à ses conclusions). Mais ceux-ci ne valent pas la peine d'être achetés. Dans certains cas, vous pouvez obtenir les entrées et sorties manquantes du port en soudant le câblage directement sur le microcircuit. Un exemple d'un tel convertisseur "amélioré" est illustré à la figure 2 (microcircuit PL-2303 - plus d'informations sur le but de ses broches dans l'article ""). C'est l'un des modèles les moins chers, mais il a ses propres avantages lorsqu'il est utilisé dans des conceptions maison. Les cordons adaptateurs complets avec un connecteur standard à neuf broches à l'extrémité, comme un port COM, sont également répandus. Ils ne diffèrent d'un port COM normal que par les niveaux TTL et l'incompatibilité avec les versions obsolètes. logiciel et quelques vieux équipements. On peut également noter que les cordons basés sur la puce CH34x dans divers tests extrêmes se révèlent beaucoup plus fiables et stables par rapport aux convertisseurs basés sur le PL-2303. Cependant, 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 utilisé.

Examinons plus en détail le principe de connexion d'un microcontrôleur et d'un convertisseur USB-RS232TTL en prenant l'exemple de quatre modèles MK différents : ATtiny13, ATtiny44, ATmega8 et ATmega128. La figure 3 montre le schéma général d'une telle connexion. Cela peut vous surprendre que les signaux RS232 (RTS, TXD, DTR et CTS) soient mal utilisés. Mais ne vous inquiétez pas: le programme Perpetuum M est capable de travailler directement avec eux - définissez les valeurs de sortie et lisez les états d'entrée. Dans tous les cas, les convertisseurs USB-RS232TTL largement utilisés basés sur les puces CH34x et PL-2303 offrent une telle opportunité - cela a été vérifié. Les autres convertisseurs populaires ne devraient pas non plus poser de problème, car les fonctions Windows standard sont utilisées pour accéder au port.

Résistances montrées dans régime général, en principe, vous ne pouvez pas installer, mais il est toujours préférable d'installer. Quel est leur but ? En utilisant les entrées et sorties TTL "du convertisseur et l'alimentation cinq volts du microcontrôleur, nous nous débarrassons ainsi de la nécessité de faire correspondre les niveaux logiques - tout est tout à fait correct de toute façon. Cela signifie que les connexions peuvent être directes. Mais tout peut arriver pendant les expériences. Par exemple, selon la loi de la méchanceté, un tournevis peut tomber juste à l'endroit où il ne pourrait en aucun cas tomber et fermer quelque chose qui ne doit en aucun cas être fermé. Dans le rôle d'un " tournevis", bien sûr, tout peut arriver. Les résistances dans ce cas réduisent parfois les conséquences. Plus l'un de leurs objectifs est d'éliminer le conflit éventuel de sorties. Le fait est qu'à la fin de la programmation, le microcontrôleur passe en mode normal fonctionne, et il peut arriver 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 sera très grave si deux sorties directement connectées "se battent" - essayez de définir des niveaux logiques différents. Dans un tel "combat", quelqu'un peut "perdre", mais nous n'en avons pas besoin.

Les valeurs des trois résistances sont sélectionnées 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 ne joue aucun rôle: vous pouvez réduire leur résistance à 1 KΩ ou l'augmenter à 10 KΩ (mais dans le second cas, le risque d'interférence augmente lors de l'utilisation de longs fils sur le chemin du MC). 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. Cela est dû aux particularités de l'entrée du convertisseur utilisé. Lors des tests, un convertisseur a été utilisé sur une puce PL-2303, dont les entrées sont apparemment tirées à la puissance plus avec une résistance relativement faible (de l'ordre de plusieurs centaines d'ohms). Pour "tuer le pull-up", j'ai dû mettre une résistance avec une si petite résistance. Cependant, vous ne pouvez pas le mettre du tout. Sur le convertisseur, c'est toujours l'entrée. Il ne peut pas devenir une sortie, ce qui signifie qu'il n'y aura pas de conflit de sorties dans tout développement d'événements.

Si le CI a une broche AVCC séparée pour alimenter un convertisseur A/N (comme l'ATmega8 ou l'ATmega128), il doit être connecté à la broche d'alimentation commune VCC. Certains CI ont plus d'une broche d'alimentation VCC ou plus d'un GND. Par exemple, l'ATmega128 a 3 broches GND et 2 broches VCC. Dans une conception permanente, il est préférable de relier les conclusions du même nom les unes aux autres. Dans notre cas, au moment de la programmation, vous pouvez utiliser une sortie de VCC et GND.

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


Quelqu'un peut dire que ce n'est pas grave - les connexions de câblage. Mais nous sommes des gens sensés. Notre objectif est de programmer le microcontrôleur avec un minimum de temps et d'autres ressources, et non de frimer devant quelqu'un. La qualité n'en souffre pas. La méthode "sur les détachements" dans ce cas est assez efficace et justifiée. Le micrologiciel du contrôleur est une procédure unique, il est donc inutile de l'accrocher avec des "strass". S'il est censé changer le firmware à l'avenir sans retirer le contrôleur du circuit (dans le produit fini), cela est pris en compte dans l'installation lors de la fabrication de l'appareil. Habituellement, un connecteur est installé à cet effet (RESET, SCK, MOSI, MISO, GND), et le MK peut être flashé même après avoir été installé sur la carte. Mais ce sont déjà des délices créatifs. On considère le cas le plus simple.

Passons maintenant à l'ATtiny44 MK. Tout est à peu près pareil ici. Selon le dessin et la photo, même un débutant n'aura pas de mal à comprendre la connexion. Comme ATtiny44, vous pouvez connecter MK ATtiny24 et ATtiny84 - l'affectation des broches pour cette trinité est la même.


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


Souvent, un contrôleur est disponible dans différents cas. Dans ce cas, l'attribution des conclusions pour chaque cas est distribuée à sa manière. Si le boîtier de votre contrôleur ne ressemble pas à celui illustré sur la figure, spécifiez le but des broches selon la documentation technique, qui peut être téléchargée sur le site Web du développeur MK.

Pour compléter le tableau, regardons la connexion de la puce MK avec un grand nombre"jambes". 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 avez probablement déjà vu que tout est assez simple. Qui sait compter les conclusions des microcircuits (à partir de la marque dans un cercle dans le sens inverse des aiguilles d'une montre), il le découvrira. Et n'oubliez pas d'être prudent. Les microcircuits aiment la propreté et ne pardonnent pas une attitude négligente envers eux-mêmes.

Avant de passer à la partie logicielle, assurez-vous que le pilote du convertisseur USB-RS232TTL est correctement installé (vérifiez le gestionnaire Appareils Windows). Rappelez-vous ou notez le numéro du port COM virtuel qui apparaît lorsque vous connectez le convertisseur. Ce numéro devra être entré 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 joué par le programme "Perpetuum M" sous le contrôle d'un script, dans lequel tous fonctions nécessaires pour l'interaction avec le microcontrôleur.

L'archive avec 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 des scripts installés s'affichera à l'écran, parmi lesquels il y aura la ligne "MK AVR programmer" (il peut être le seul). 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é selon les besoins dans un éditeur de texte courant tel que le Bloc-notes Windows. Avant d'utiliser le script, vous devrez très probablement apporter des modifications au texte relatif au paramètre de port. Pour ce faire, vérifiez dans le gestionnaire de périphériques nom de la fenêtre le port que vous utilisez et, si nécessaire, corrigez la ligne "PortName="COM4";" - au lieu du chiffre 4, il peut y avoir un autre chiffre. De plus, lors de l'utilisation d'un modèle de convertisseur USB-RS232TTL différent, il peut être nécessaire de 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 en utilisant l'un des exemples contenus dans les instructions 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 souhaité n'en fait pas partie, vous pouvez ajouter vous-même le contrôleur requis, en agissant par analogie. Prenez l'un des fichiers comme exemple et utilisez éditeur de texte entrez les données nécessaires en les prenant dans la documentation de votre microcontrôleur. L'essentiel est d'être prudent, entrez les données sans erreur, sinon le MK ne sera pas programmé, ou il sera programmé de manière incorrecte. La version originale prend en charge 6 microcontrôleurs : ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 et ATmega128. Le script implémente la reconnaissance automatique du contrôleur connecté - vous n'avez pas besoin de le spécifier manuellement. S'il n'y a pas d'identifiant lu à partir du MK parmi les 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 "AVR controllers inc files" contient une collection très utile et complète de fichiers de description de contrôleur. Ces fichiers sont utilisés lors de l'écriture de vos propres programmes pour MK. Quatre autres dossiers "MusicBox_..." contiennent des fichiers avec un programme assembleur et un micrologiciel prêts à être téléchargés séparément dans le MK 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 à ce sujet ci-dessous.

Lorsque vous sélectionnez la ligne "Programmer MK AVR" dans le menu du script, le script commence à être exécuté. Dans le même temps, il ouvre le port, envoie une commande de passage en mode programmation au MC, reçoit du MC la confirmation d'une transition réussie, demande l'identifiant du MC et recherche une description de ce MC par son identifiant parmi les fichiers disponibles avec des descriptions. S'il ne trouve pas la description requise, il émet un message approprié. Si la description est trouvée, le menu principal du programmeur s'ouvre. Vous pouvez voir sa capture d'écran dans la figure 8. Il n'est pas difficile de comprendre davantage - 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'y a aucun moyen de lire et d'écrire dans l'EEPROM. Mais si vous ouvrez le script dans un éditeur de texte, vous verrez qu'il a une très petite taille, malgré le fait que l'essentiel y est déjà implémenté. Cela suggère que l'ajout des fonctionnalités 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 suffiront.

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 l'est é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 le code du micrologiciel du MK est extrait. Si ce fichier n'est pas corrompu, vérifiez somme de contrôle n'affectera rien. S'il est déformé, il ne sera pas possible de le détecter au moyen du script. Les restrictions restantes dans la plupart des cas ne feront pas de mal, mais vous devez toujours les garder à l'esprit.

5. Boîte à musique - bricolage facile 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 approprié dans le MK - l'un des quatre qui se trouvent dans les dossiers "MusicBox_..." dans une archive avec le script. Les codes du micrologiciel sont stockés dans des fichiers avec l'extension ".hex". Utiliser l'ATmega128 pour un tel engin est, bien sûr, "gras", tout comme l'ATmega8. Mais cela peut être utile pour des tests ou des expérimentations, en d'autres termes - à des fins éducatives. Les textes du programme Assembleur sont également joints. Les programmes n'ont pas été créés à partir de zéro - le programme de la boîte à musique du livre de A.V. Belov "Les microcontrôleurs AVR dans la pratique de la radio amateur" a été pris comme base. Le programme original a subi un certain nombre de changements importants :
1. adapté pour chacun des quatre MK : ATtiny13, ATtiny44, ATmega8 et ATmega128
2. les boutons sont éliminé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. subjectif : quelques "améliorations" pour l'optimisation et une perception plus facile de l'algorithme

Dans certaines mélodies, on peut entendre des faussetés et même des gaffes, en particulier dans "Smile" - au milieu. Les codes de mélodie sont extraits du livre (plus précisément, téléchargés depuis le site Web de l'auteur avec le fichier asm d'origine) 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 - ceux qui sont "amis" avec la musique le comprendront facilement et tout répareront.

Dans ATtiny13, en raison de l'absence d'un compteur 16 bits pour jouer des notes, il était nécessaire d'en utiliser un 8 bits, ce qui a entraîné une certaine diminution de la précision du son des notes. Mais à l'oreille, c'est à peine perceptible.

À propos des bits de configuration. Leur réglage doit correspondre à l'état du nouveau microcontrôleur. Si votre MCU a déjà été utilisé quelque part, vous devez vérifier l'état de ses bits de configuration et, si nécessaire, les aligner sur 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 l'ATmega128. Ce MCU a un bit M103C qui active 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 à l'état inactif. Pour manipuler les bits de configuration, utilisez la section correspondante du menu du script du programmeur.

Cela n'a aucun sens de donner un schéma de la boîte à musique : elle n'a qu'un microcontrôleur, une alimentation électrique et un émetteur de son piézo. L'alimentation est fournie exactement de la même manière que nous l'avons fait lors de la programmation du MK. L'émetteur de son est connecté entre le fil commun (sortie GND du contrôleur) et l'une des sorties du 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: " signal sonore est formé à la sortie XX". Lorsque le programmeur de script se termine, le microcontrôleur quitte le mode de programmation et passe en mode de fonctionnement normal. Les mélodies sont jouées immédiatement. En connectant l'émetteur de son, vous pouvez le vérifier. Vous pouvez laisser le émetteur de son connecté pendant la programmation du cristal uniquement si l'audio 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.

Comment flasher un microcontrôleur AVR ? C'est ce que nous allons faire dans cet article.

Qu'est-ce que "flash" et "firmware" ?

Définissons d'abord ce que signifie le mot "éclair"? Je pense que vous avez souvent entendu des phrases comme "flasher le téléphone", "le micrologiciel a volé", "micrologiciel tordu" etc. Qu'est-ce que "micrologiciel"?

Le firmware est, grosso modo, un système d'exploitation pour les petits appareils tels que téléphone mobile, Lecteur mp3, appareil photo numérique etc. Autrement dit, c'est un petit programme qui contrôle cet appareil. Vous pouvez aussi souvent entendre ceci : "J'ai un "buggy" téléphone portable, il est urgent "reflasher“.

Dans ce cas, cela signifie que vous devez réinstaller système opérateurà un téléphone mobile. Moyens, "flash MK" signifie télécharger un programme à l'intérieur qui contrôlerait ce MK, et le MK contrôlerait déjà un appareil. Autrement dit, en théorie, MK est un intermédiaire entre le programme et un appareil qui doit être contrôlé ;-)


Équipement pour firmware MK

Alors, de quoi avons-nous besoin pour flasher le MK ?

  1. Le microcontrôleur lui-même.
  2. Un ordinateur avec un logiciel préinstallé (SW).
  3. Programmeur.
  4. Plusieurs cavaliers.
  5. Planche à pain. Je recommanderais d'acheter un kit AVR pour débutant tout de suite. Cet ensemble est alimenté par USB.
  6. Bras droits poussant du bon endroit.

Nous avons convenu d'utiliser l'Atiny2313 MK dans le package DIP-20 :

Préparation de MK pour le micrologiciel

Dans les articles précédents, nous avons considéré le programmeur Gromov. Son principal inconvénient est que nous avons besoin d'un port COM, ce qui est difficile à trouver dans un ordinateur maintenant, mais il y a un connecteur USB sur chaque ordinateur. Par conséquent, il a été décidé d'acheter le programmeur USB le moins cher pour AVR MK. Un tel programmeur est appelé et il ressemble à ceci


Si vous creusez bien sur Ali, vous pouvez trouver un prix très doux pour un tel programmeur. Par exemple, . Vous pourriez même le trouver moins cher. Si vous prenez d'un autre vendeur, alors regardez attentivement pour ses inscriptions et éléments radio étaient situés exactement comme sur ma photo. En moyenne, son prix au moment de la rédaction est d'environ 120 roubles. Un tel programmeur dans le cas coûtera un peu plus cher.

Voici sa vue de dos :


Son connecteur de travail ressemble à ceci :


Le programmateur est également livré avec un câble


qui à une extrémité s'accroche au connecteur de travail du programmateur :


Nous allons accrocher l'autre extrémité du câble au MK.


Si vous regardez attentivement, vous pouvez savoir quelle broche du connecteur est la première. La flèche pointe vers la première broche du connecteur :


Une fois que vous savez où se trouve la première broche, vous pouvez facilement identifier le reste des broches :


Donc, notre tâche est de connecter les sorties du MK aux sorties du programmeur.

Pour ce faire, nous branchons les fils dans les prises MOSI, RST, SCK, MISO, VTG (VCC), GND dans le connecteur du câble. GND J'ai pris la 10ème prise, c'est possible et une autre, où GND est écrit. Un total de 6 fils de liaison :


VTG (alias VCC) on s'accroche à la 20e jambe du MK

SCK(UCSK) on s'accroche au MK 19 pattes

MISO on s'accroche à la 18e jambe du MK

MOSI pour 17 pattes

Terre pour 10 pattes

TVD au match aller

Cela devrait donner quelque chose comme ça :


Après avoir branché le programmateur sur le port USB du PC pour la première fois, Gestionnaire de périphériques on va nous donner un nouvel appareil :

Nous n'avons pas peur, téléchargez l'archiveur ici, décompressez-le et indiquez le chemin d'accès lors de l'installation du «bois de chauffage». Lorsque le « bois de chauffage » est installé sur le programmateur, nous verrons quelque chose comme ceci :

Tout va bien, le programmeur est prêt pour la bataille.

Dans la même archive, nous trouvons le dossier "avrdudeprog", ouvrez-le, trouvez-y le fichier exécutable AVRDUDEPROG et exécutez-le. Ceci est le shell logiciel pour flasher le MK à l'aide de notre programmeur.

Elle ressemble à ça. N'oubliez pas de sélectionner notre MK dans la liste.

Pour flasher le MK, nous devons sélectionner un fichier avec l'extension HEX. Voici donc mon dossier. Tout d'abord, j'appuie sur le bouton "Effacer tout". Que se passe-t-il si quelqu'un a déjà utilisé MK et qu'un programme y a déjà été téléchargé ? Par conséquent, avant de flasher, nous effaçons la mémoire du MK. Si le « lavage » a réussi, le programme nous donnera quelque chose comme ce message :

Clignotant MK AVR

Cliquez sur le bouton de sélection de fichier :

Et maintenant, nous sélectionnons notre fichier "Lesson 1.hex". C'est notre programme.

Et maintenant nous appuyons sur le bouton "La programmation"

Une fois que tout s'est bien passé, quelque chose comme ceci s'affichera :

Mais ce n'est pas tout! Comme vous vous en souvenez, dans le dernier article, nous avons fixé la fréquence à 8 mégahertz. Pour éviter toute confusion, il faut maintenant diviser cette fréquence par 8. Pour cela, il y a un fusible qui divise la fréquence d'horloge par 8. On met le repère sur « direct fuses », puis on coche la case CKDIV.

Après avoir effectué ces deux étapes, cliquez sur le bouton "La programmation":

Vérifier MK dans le matériel

Maintenant, nous assemblons notre circuit, qui a été mentionné dans le dernier article :


et savourez le résultat :

Avec cet article, je souhaite commencer à publier un cycle dans lequel les techniques de base pour développer, flasher et configurer des dispositifs sur des microcontrôleurs seront examinées en détail. Les messages seront également utiles pour ceux qui ne feront que répéter des appareils finis sans se soucier de leur développement et de leur débogage. Nous (moi et l'administration du site) espérons que la publication de ce cycle aidera de nombreux radioamateurs débutants et moins amateurs à commencer à développer et (ou) à répéter des équipements basés sur un microcontrôleur. Cet article collectera et systématisera des matériaux provenant de diverses sources ouvertes, y compris notre magazine Radio préféré. Nous examinerons brièvement ce qu'est MK, et avec quoi il est mangé, pourquoi les compilateurs sont nécessaires et quels types d'animaux terribles sont assis dans des fichiers avec le fichier *. HEX , *. poubelle , *. asm , etc., plongeons un peu dans l'histoire et créons enfin notre premier programmateur SI-Prog (à mon avis, un très simple, fiable, universel et pas oublié à juste titre) et nous allons flasher le MK, en plus, à l'aide d'un exemple précis, nous traiterons des coques logicielles RopuRgo g 2000 et IS-Prog . Alors commençons. Ce n'est un secret pour personne que, parmi les circuits intégrés numériques, les MK occupent aujourd'hui à peu près la même place que les amplificateurs opérationnels parmi les analogiques. Ce sont des appareils universels, leur utilisation dans appareils électroniquesà des fins diverses est en constante expansion. Presque toutes les grandes et de nombreuses moyennes entreprises spécialisées dans le domaine de l'électronique des semi-conducteurs sont engagées dans le développement et la production de MC. La liste et les principaux paramètres de MK de certaines familles populaires peuvent être trouvés, par exemple, sur Internet.

Les micro-ordinateurs modernes (autrefois appelés micro-ordinateurs à puce unique) combinent dans leur boîtier un cœur de processeur puissant, des dispositifs de mémoire pour stocker le programme exécutable et les données, des dispositifs pour recevoir des signaux d'entrée et générer des signaux de sortie et de nombreux nœuds auxiliaires. La tendance générale de la "construction de microcontrôleurs" moderne est une diminution du nombre d'éléments externes nécessaires au fonctionnement normal. Sur une puce à microcircuit, non seulement des comparateurs, des convertisseurs analogique-numérique et numérique-analogique sont placés, mais également toutes sortes de résistances de charge et "pull-up", des circuits de réinitialisation.

Les tampons de sortie du MK sont conçus pour connecter directement les charges les plus typiques, telles que les indicateurs LED. Presque toutes les sorties du MK (à l'exception, bien sûr, des sorties du fil commun et de l'alimentation) peuvent être utilisées par le développeur à sa discrétion comme entrée ou sortie. De ce fait, un dispositif assez complexe dans ses fonctions peut souvent être réalisé sur un seul microcircuit.

La réduction constante du coût de MK et l'expansion de leur Fonctionnalité abaissé le seuil de complexité des appareils qu'il convient de construire sur leur base. Aujourd'hui, il est logique de concevoir sur MK même de tels dispositifs, dont la mise en œuvre par des méthodes traditionnelles nécessiterait moins d'une douzaine de microcircuits logiques de degré d'intégration moyen et faible. Le principal obstacle sur cette voie est peut-être le conservatisme des développeurs, dont beaucoup considèrent encore MK comme quelque chose d'incompréhensiblement complexe.

Pendant ce temps, les processus de développement d'un programme pour MK et d'un schéma de circuit conventionnel d'un appareil numérique sont à bien des égards similaires. Dans les deux cas, un "bâtiment" de la forme souhaitée est construit à partir de "briques" élémentaires. C'est juste que les "briques" sont différentes: dans le premier cas - un ensemble d'éléments logiques, dans le second - un ensemble de commandes de microcontrôleur .

Au lieu d'interagir entre les éléments en utilisant l'échange de signaux sur des fils, le transfert de données d'une cellule de mémoire à une autre au sein du MK. Le processus de transfert « éclate » lorsque le MK communique avec les capteurs, les indicateurs, les actionneurs et la mémoire externe qui lui sont connectés. Les outils sont également différents. Le crayon, le papier, le fer à souder et l'oscilloscope sont remplacés par un ordinateur et un programmeur, bien qu'à la dernière étape du débogage d'un produit, vous ne puissiez toujours pas vous passer d'un oscilloscope et d'un fer à souder.

Une autre difficulté est le manque de documentation technique complète et de littérature de référence en russe. La plupart des publications de ce type dans les périodiques et en particulier sur Internet en langue russe ne sont souvent que des traductions interlinéaires des originaux anglais. De plus, les traducteurs, parfois peu familiarisés avec le sujet et la terminologie, interprètent à leur manière les lieux "sombres", et ils (les lieux) s'avèrent assez éloignés de la vérité. Il n'existe pratiquement pas d'outils logiciels en russe pour développer et le débogage des programmes MK.

Pour beaucoup, la première connaissance de MK commence par la répétition de l'un des modèles basés sur eux publiés dans le même magazine Radio ou une autre publication. Et ici, la principale différence entre un MC et un microcircuit conventionnel se manifeste immédiatement: il ne peut rien faire d'utile tant qu'un programme n'est pas entré dans son périphérique de stockage interne (parfois externe), c'est-à-dire un ensemble de codes qui spécifie la séquence d'opérations à effectuer. La procédure d'écriture de codes dans la mémoire du MK s'appelle sa programmation ou son firmware (à ne pas confondre avec le processus précédent de développement du programme lui-même du même nom).

Le besoin d'un firmware, à première vue, peut sembler un inconvénient. En fait, c'est le principal avantage, grâce auquel, en fabriquant, par exemple, une seule carte avec un MK et plusieurs indicateurs LED et boutons connectés, si vous le souhaitez, transformez tout en fréquencemètre, compteur d'impulsions, horloge électronique , compteur numérique de n'importe quelle quantité physique , contrôle et surveillance à distance et bien plus encore.

La possibilité de garder secrets les codes de programme aide les fabricants d'équipements sur le MK dans la lutte contre les concurrents. Certes, le secret excessif des programmes crée souvent des difficultés supplémentaires dans la réparation ou l'amélioration des appareils sur le MK d'une conception "étrangère". Mais c'est une autre affaire.

Jusqu'à récemment, lorsqu'il commençait à concevoir une structure sur un MC, le développeur était confronté au problème de savoir s'il était possible de résoudre le problème en utilisant des dispositifs d'un ou deux types qu'il connaissait. Aujourd'hui, la situation a radicalement changé. Parmi l'ensemble des MC disponibles, il convient de choisir celui à l'aide duquel le problème sera résolu de manière optimale. Malheureusement, tout le monde ne le fait pas. Il y avait même une certaine "mode" pour les produits de divers types, des groupements particuliers de partisans de MK de certaines familles se forment. Ils justifient généralement leur choix au niveau de "j'aime - je n'aime pas". Souvent, une opinion négative sur un appareil s'explique par une seule tentative infructueuse de l'utiliser, souvent sans tenter d'analyser et d'éliminer les causes de l'échec Certaines entreprises distribuent des documents appelés "La vérité sur..." avec une comparaison "objective" de leurs appareils avec les produits des concurrents, et, en règle générale, en faveur du premier. Vous ne devriez pas particulièrement faire confiance à ces publications, il y aura toujours un rapport de comparaison avec les résultats et les conclusions.

Je tiens à dire que, comme dans de nombreux autres cas, il n'y a manifestement pas de bons ou de mauvais députés, et il ne peut pas y en avoir. Chacun d'eux est capable de montrer d'excellents résultats dans la résolution de problèmes d'une certaine classe et fait à peine face aux autres. D'où la diversité des types. En règle générale, un gain d'un paramètre s'accompagne d'une détérioration des autres. Les exemples les plus simples : un MK conçu pour la reprogrammation multiple est toujours plus cher qu'un analogique programmable une seule fois, et un appareil plus rapide est plus sensible qu'un appareil lent au bruit impulsionnel et plus exigeant sur le traçage des PCB. Bien sûr, il existe des dispositifs universels suffisamment adaptés pour résoudre une large classe de problèmes. Cependant, s'il est seulement nécessaire de répéter l'un ou l'autre design, il n'y a pas de possibilité spéciale de choisir MK, vous devez utiliser celui indiqué dans la description ou son analogue complet, par exemple, parmi ceux fabriqués par d'autres sociétés sous licence . Lorsqu'on lui demande s'il est possible de remplacer un MK d'un type par un autre, il faut souvent donner une réponse négative, bien qu'en théorie il y ait une telle possibilité: il suffit de retravailler le programme, et si le nombre et le but des broches du MK remplacé et remplaçant sont différents, puis la carte de circuit imprimé.

Lorsqu'il s'agit de remplacer des microcontrôleurs par une structure similaire et appartenant à la même famille, ou de remplacer un produit obsolète par un analogue moderne, en règle générale, il est possible d'adapter le programme. Puce et ATMEL inclut même des recommandations pour une telle adaptation dans les données de référence de son MC. Dans le cas général, un transfert à part entière d'un programme vers un autre MK nécessite la présence non seulement du "firmware" habituellement publié de l'EPROM, mais également du texte source complet, de préférence avec les commentaires du programmeur. Le listing obtenu à la suite du démontage du "firmware" est loin d'être un équivalent à part entière. Le programmeur aura besoin d'une qualification nettement supérieure à ce qui est suffisant pour le développement à partir de zéro, et les coûts de main-d'œuvre ne seront pas inférieurs.

Il est recommandé de commencer le développement indépendant de l'appareil sur le MK et, bien sûr, le programme correspondant à partir de l'étude et de l'élaboration d'un schéma fonctionnel de l'algorithme pour son fonctionnement. Ce n'est qu'en fonction des résultats de cette étape que vous pourrez faire le bon choix de MC.

Nous allons construire notre histoire ultérieure sur un exemple précis. D'une manière ou d'une autre, récemment, un compteur était nécessaire pour compter les intersections par un certain objet d'une certaine frontière dans une direction et dans l'autre. En parcourant les numéros du magazine Radio, j'ai trouvé un appareil adapté, mais il semblait trop compliqué (11 microcircuits, dont une EPROM de grande capacité) et, de plus, n'avait pas certaines fonctions nécessaires, en particulier la possibilité de pré- réglez les relevés de compteur et rappelez-vous son état après avoir éteint l'alimentation. Il y avait une idée de faire le dispositif nécessaire sur le MK. Pour les raisons indiquées ci-dessous, le MK PIC16F84 (PIC16F84А) a été choisi. En conséquence, le schéma de l'appareil a été né ( riz. 1),


ne contenant que deux microcircuits. L'appareil peut utiliser les microcontrôleurs PIC16F84 et PIC16F84 UN avec n'importe quelle fréquence limite, type de boîtier et plage de température de fonctionnement (ces paramètres sont indiqués par des indices numériques et alphabétiques après le trait d'union dans la désignation de la puce, par exemple, -101 / R). Et si l'amélioration du programme n'est pas attendue, vous pouvez également utiliser un analogue programmable unique bon marché du PIC16CR84, si, bien sûr, vous pouvez le trouver.

Capteurs de mouvement d'objet - optocoupleurs à transistor avec un canal ouvert AOT147B (U1, U2). La charge de leurs phototransistors sont les résistances internes disponibles dans le MK. Il est permis d'utiliser des optocoupleurs composés de lumière et de photodiodes séparées (phototransistors). Les capteurs optiques, si nécessaire, sont remplacés par tout autre : magnétique, à contact, inductif. Il est seulement important que lorsqu'ils sont déclenchés, les niveaux logiques changent aux entrées correspondantes du MK.

L'appareil utilise un indicateur LED à quatre chiffres et sept segments CA56-11SR de Kingbright. Il est également possible d'utiliser n'importe quel indicateur LED à sept segments avec un point commun.anode, par exemple, quatre domestiques ALS324B. Un ensemble de résistances DR1 peut remplacer une famillerésistances classiques de 300 ohms.Le programme qui doit être entré dans la mémoire de MK DD2 afin de transformer l'appareil en compteur est donnédans le tableau. 1. Lors de la mise sous tension, des zéros sont allumés dans tous les chiffres de l'indicateur. Après chaque exécution du cycle "U1 est grisé" - "U1 et U2 sont grisés" - "U1 n'est pas grisé" - "U2 n'est pas grisé", les lectures augmentent de 1. Le compteur est donc réversible lorsque les capteurs sont déclenchés dans ordre inverse les lectures sont réduites du même montant. Le nombre maximum est 9999 suivi de zéro.

Le prochain article du cycle parlera de la création et du débogage du circuit et du programme du compteur, de son amélioration et de l'introduction de fonctions supplémentaires. Cet exemple illustrera les principales fonctionnalités du PIC16F84 MK et comment travailler avec des outils de programmation et de débogage gratuits. Ils sont combinés dans le package MPLAB, dont la dernière version peut être "téléchargée" à partir des sites Internet www.microchip.com ou www.microchip.ru. Ou depuis la page du forum ALEXANDRE Il décrit également en détail comment l'installer.

Pour saisir les codes du tableau. 1 po mémoire interne MK, vous avez besoin d'un programmeur. Cependant, il ne "sait pas" lire les codes des pages Internet. Par conséquent, vous devez tout d'abord créer un fichier avec ces codes dans un ordinateur dans un format "compréhensible" par le programmeur. En tableau. 1, ils sont présentés dans le format dit HEX développé par Intel et qui est devenu le standard de facto pour la programmation de ROM à des fins diverses. (Je dois dire que d'autres formats du même nom, par exemple, Microchip HEX, n'existent pas, de tels noms ne sont utilisés que par malentendu). Des formats similaires développés par d'autres sociétés n'ont pas trouvé d'application étendue et sont destinés, en règle générale, uniquement au matériel et outils logiciels propre conception, la plupart d'entre eux "comprenant" le format Intel HEX.

Les codes sont entrés dans l'ordinateur à l'aide de n'importe quel éditeur de texte, y compris Microsoft Word, exactement sous la forme dans laquelle ils sont donnés dans languette. 1.


Si vous disposez d'un scanner et d'un programme de reconnaissance de texte tel que FineReader, vous pouvez les utiliser. Mais dans ce dernier cas, les données lues devront être comparées à l'original, car la reconnaissance automatique n'est pas parfaite (des erreurs sont possibles). Veuillez noter qu'en HEXfichiers, seuls le caractère deux-points, les chiffres et les lettres latines A - F. Chaque ligne commence par un deux-points en première position et se termine en appuyant sur la touche ENTER. Les espaces ne sont pas autorisés. Lorsque vous avez fini de taper et vérifié les codes, enregistrez le fichier en mode "Text DOS" ou "Text Only", en lui donnant n'importe quel nom avec l'extension *.hex.

Très souvent, les codes de programme sont publiés sous la forme d'un "vidage mémoire". Il s'agit d'un tableau plus visuel (que le format HEX). Il se compose de lignes commençant par une adresse hexadécimale (généralement à quatre chiffres) suivie d'espaces séparés par des codes hexadécimaux à deux chiffres stockés dans des cellules de mémoire successives (octets). L'adresse au début de la ligne fait référence à la première des cellules, et il y en a généralement 16 au total. languette. 2 voici un dump contenant les mêmes données que languette. 1. HEX et dump peuvent facilement être convertis de l'un à l'autre comme suit (voir languette. 3).

Les deux premiers caractères après les deux-points correspondent au nombre d'octets d'informations dans la chaîne. Dans ce cas, il y a 16 (10 H ). Elle est suivie de l'adresse du premier octet (0020H), suivie d'un code d'affectation de ligne à deux chiffres :

0 - la ligne contient des données ;

1 - la dernière ligne du fichier (:00000001 FF) ; il ne contient aucune donnée, le nombre d'octets et l'adresse qu'il contient sont nuls. Dans de nombreux cas, zéro octet suffit pour reconnaître une chaîne comme se terminant ;

2 - dans la zone de données se trouve l'adresse du segment de mémoire, par rapport au début duquel les adresses spécifiées dans les lignes suivantes sont comptées. Notez que les deux octets de l'adresse de segment sont en ordre haut-bas. Le numéro à ajouter aux adresses courantes est obtenu en décalant code binaire adresse de segment quatre bits à gauche, c'est-à-dire en la multipliant par 16 ;

3 - dans la zone de données, il y a quatre octets de l'adresse de démarrage du programme au format IBM PC CS:IP habituel ;

4 - dans la zone de données, il y a (dans l'ordre du plus élevé au plus bas) quatre octets de l'adresse absolue, dont la valeur, sans aucune transformation, doit être ajoutée aux adresses indiquées dans les lignes suivantes ;

5 - identique à 04, mais spécifie la valeur absolue de l'adresse de début du programme.

Les lignes avec les codes de destination 02 et 04 sont utilisées s'il est nécessaire de spécifier des adresses supérieures à 0FFFFH. Pour la programmation de MCU avec une petite mémoire (telle que PIC16F84), ils ne sont pas nécessaires. Cependant, une chaîne similaire spécifiant une adresse de début zéro est parfois placée au début du fichier HEX. Il peut être retiré sans douleur.

Les lignes avec les codes 03 et 05 sont très rares, car l'adresse de début du programme MK est le plus souvent déterminée par l'architecture de ce dernier et ne peut pas être modifiée. Pour MK de la famille PICmicro, c'est zéro.

Le code de destination est suivi d'une zone de données du nombre d'octets spécifié au début de la ligne. La chaîne se termine par un octet de contrôle. L'algorithme de calcul de sa valeur est assez simple : les huit bits les moins significatifs de la somme de tous les octets de la chaîne, y compris sa longueur, deux octets de l'adresse, du code de destination, des données et du contrôle, doivent être égaux à zéro.

Le format HEX a été initialement conçu pour stocker des données 8 bits. Les codes de plus grande capacité sont divisés en nombre correspondant d'octets, qui sont écrits dans le fichier dans l'ordre de bas en haut. Par exemple, chacune des instructions 14 bits du MK IS16F84 se voit attribuer deux octets, et les deux bits les plus significatifs du deuxième octet restent libres (le code dans cet octet ne dépasse pas 3FH).

En conséquence, les adresses dans le fichier HEX sont doublées par rapport aux adresses réelles des instructions du programme. Par exemple, la ligne

:080008008C0003088D000408C0 décrit une telle séquence de codes de programme ;

Code d'adresse

4008C

5 0803

6008D

7 0804

Certains outils logiciels (en règle générale, menant leur généalogie non à partir d'ordinateurs compatibles IBM) écrivent dans un fichier et perçoivent les octets de données dans l'ordre inverse - l'ancien, puis le plus jeune. Vous devez faire attention à cela si le programmeur est "méchant", ne voulant pas lire le fichier correctement.

Le format de représentation de données multi-bits décrit est souvent appelé fusionné. Parfois, il existe une autre option: le fichier HEX est divisé en deux, dont l'un contient tous les octets inférieurs et le second - tous les octets supérieurs des mots du programme. Ce format est appelé Fractionné.

Veuillez noter que le fichier peut ne pas spécifier une séquence continue de codes. Par exemple, entre les codes des deux premières lignes languette. 1 un espace de six octets reste non comblé (trois instructions de programme). Le format HEX ne donne aucune information sur leur contenu. Selon l'algorithme du programmateur, ils restent dans un état initial non programmé ou mémorisent les codes précédemment enregistrés. DANS languette. 2 les cellules inutilisées sont remplies avec des codes zéro.

Comme vous le savez, MK contient une mémoire permanente à des fins diverses : FLASH ou programmable une seule fois pour le programme, EEPROM pour les données, cellules spéciales pour la configuration et l'identification du MK. Les informations destinées à ces domaines sont souvent stockées dans des fichiers séparés et

programmation, vous devez spécifier manuellement où exactement pour l'écrire. Mais dans la famille PICmicro, la décision a été prise de tout combiner dans un seul fichier HEX. Les zones mentionnées ci-dessus, qui sont situées pour le processeur MK dans différents espaces d'adressage, sont combinées en une seule du point de vue du programmeur. Pour le PIC16F84, la répartition est la suivante (entre parenthèses - adresses "octet") :

0-3FFH (0-7FFH) - codes de programme ; pour MK avec une plus grande mémoire, cette zone peut être étendue à 1FFFH (3FFFH);

2000N-2003N (4000N-4007N) - codes d'identification ;

2007H (400EN, 400FH) - mot de configuration ;

2100H-213FH (4200H-427FH) - codes écrits aux adresses EEPROM 0-3FH.

Malgré le fait que l'organisation EEPROM est de huit bits, dans ce cas, chacun des codes qui lui sont destinés dans le fichier HEX se voit attribuer deux octets, dont le plus élevé est à contenu nul

À SUIVRE >>>>>

TOUTES LES QUESTIONS SUR

Donc, si le programme est installé, commençons à explorer ses capacités.

Nous installons le microcontrôleur dans le panneau de programmation, connectons le programmeur à l'ordinateur et exécutons "PICkit 2 Programmer".

Une fois lancé, le programme interroge le programmeur et détermine automatiquement le type de microcontrôleur en cours de programmation par des bits d'identification (appelés ID de périphérique). Attention! Les puces de la famille Baseline, ainsi que les puces EEPROM et KeeLOG, n'ont pas d'ID d'appareil. Pour que le programme fonctionne avec ces microcircuits, vous devez sélectionner un produit spécifique via le menu "Famille de périphériques".

Si au lieu d'une photo aussi sympathique, celle-ci apparaît ...

Ensuite, vous devez vérifier si le câble USB est correctement connecté et via le menu "Outils" - "Vérifier la communication", reconnectez l'appareil.

Ouverture d'un fichier de micrologiciel.

Pour écrire le programme MK dans sa mémoire, vous devez sélectionner l'élément de menu "Fichier" - "Importer Hex".

Sélectionnez ensuite dans la fenêtre qui s'ouvre fichier souhaité micrologiciel.

Après cela, la mémoire du programme (Program Memory) et la fenêtre des données (EEPROM Data) afficheront le contenu du fichier .hex.

Enregistrement du programme en MK.

Vous pouvez maintenant programmer le MK. Pour ce faire, cliquez sur le bouton "Ecrire". Le processus d'enregistrement prend 3 à 5 secondes.

L'inscription « Programmation réussie » vous informera de la réussite de la procédure d'enregistrement.

Pour plus de certitude, vous pouvez effectuer une procédure de vérification. Lorsque vous cliquez sur le bouton "Vérifier", le programme compare les données du fichier hexadécimal et les données enregistrées dans le MK. Si la vérification a réussi, la boîte de message affichera "Vérification réussie".

Attention! Si vous flashez PIC12F675, PIC12F629 et des microcontrôleurs similaires avec un générateur d'horloge interne, une erreur peut apparaître lors de la vérification. Le fait est que le programmeur PICkit2 (version 6.21) enregistre la constante d'étalonnage, puis l'écrit dans la dernière cellule de mémoire du MK. Il est entendu que le fichier du firmware d'origine et les données enregistrées en mémoire seront différents. La constante d'étalonnage sera discutée plus tard.

Boutons rapides.

Le bouton "Auto Import Hex + Write Device" plaira à ceux qui veulent "piloter le firmware" dans le MK en un seul clic. Un clic et le programme vous invitera à sélectionner le fichier du firmware, puis à l'écrire immédiatement sur le MK.

Le bouton "Read Device + Export Hex File" remplit la fonction opposée - il lit les données du MK et propose d'enregistrer le fichier du firmware dans un fichier .hex.

Modification des bits de configuration.

Les bits de configuration définissent les paramètres de base pour le fonctionnement du MK. C'est le type de générateur (quartz, circuit RC), activant / désactivant le soi-disant "horloge de surveillance", définissant la protection contre la lecture de la mémoire du programme, et quelques autres. En règle générale, lors de l'écriture d'un algorithme pour le fonctionnement d'un MK (programme), des valeurs sont écrites qui doivent être écrites dans les bits de configuration. Lors du clignotement, le shell prend les données de configuration du fichier du micrologiciel lui-même et n'a pas besoin d'être forcé à spécifier ces données.

Mais, en tant que débutants, il ne serait pas superflu que nous sachions visualiser ou modifier des bits de configuration spécifiques. Pour ce faire, cliquez sur l'inscription "Configuration". La fenêtre Modifier les bits de configuration s'ouvre.

Si vous devez changer 0 en 1, alors changez - cliquez sur "Enregistrer". Naturellement, il est nécessaire de changer consciemment. Je le répète, lorsque vous utilisez un fichier de micrologiciel prêt à l'emploi, vous n'avez rien à changer, le programme fera tout automatiquement.

Sélection d'un modèle de microcontrôleur.

Les microcontrôleurs sont différents. Par conséquent, lors de la programmation de MK, il peut être nécessaire de spécifier modèle spécifique microcontrôleur. Lorsque vous sélectionnez l'élément de menu "Device Family", une liste de familles de microcontrôleurs apparaît. Il existe également des puces mémoire EEPROM dans cette liste.

Contrairement aux microcontrôleurs, les puces mémoire EEPROM ne sont pas automatiquement détectées par la commande "Outils" - "Vérifier la communication". Par conséquent, lors de la lecture / écriture de puces EEPROM dans le programme, vous devez spécifier le marquage de la puce.

Dans le menu, sélectionnez l'élément "Device Family" - "EEPROMS" - "24LC".

Constante d'étalonnage.

Comme vous le savez, le microcontrôleur nécessite un générateur d'horloge pour fonctionner. L'élément qui définit la fréquence de ce générateur peut être un résonateur à quartz externe, RC - circuit. Mais parmi les microcontrôleurs PIC, il y a ceux qui contiennent les circuits de commande nécessaires à l'intérieur du microcircuit lui-même. Ces MK comprennent, par exemple, PIC12F629, PIC12F675.

En usine, une constante spéciale est écrite dans la mémoire de ces microcontrôleurs, qui définit les paramètres de l'oscillateur intégré à 4 MHz. Cette constante d'étalonnage 34xx est écrite dans le dernier emplacement de mémoire de programme à 0x3FF.

Lors de la programmation du microcontrôleur, cette constante facile à effacer. Et bien que PICkit2 Programmer version 2.61 enregistre automatiquement cette constante puis la note lors de la programmation, il ne sera pas superflu de noter la valeur de la constante OSCCAL.

Si nécessaire, la constante peut être facilement spécifiée manuellement. Pour ce faire, sélectionnez l'élément de menu "Outils" - "OSCCAL" - "Régler manuellement".

Dans le champ "Valeur OSCCAL", indiquez la valeur précédemment enregistrée de la constante. Cliquez sur le bouton "Définir".

Maintenant que vous êtes familiarisé avec les fonctionnalités de base du programmeur PICkit2, vous pouvez commencer en toute sécurité à assembler un appareil sur un microcontrôleur, par exemple,

Microcontrôleurs pour débutants. Leçon vidéo. Nous écrivons le programme sur le microcontrôleur (nous flashons la puce)

________________________________________________________________________________________________________

D'abord le programme le plus simple, qui contrôle la tension aux sorties du microcontrôleur. Programmation dans l'éditeur CodeVisionAVR. Transfert du programme vers la mémoire du microcontrôleur (chip firmware). télécharger(36 Mo)


Contenu

Si la vidéo n'est pas enregistrée, réglezlecteur Flash et vérifie carte son, outélécharger matériel (36 Mo). S'il y a un écran vert au lieu d'une vidéo, réinstallez le lecteur flash (il suffit de télécharger dernière version). Si la vidéo "twitche", mettez-la en pause et laissez-la se charger un peu. Lecteur pour visionner une vidéo flash sur une machine domestique. Développez la vidéo en plein écran. S'ils écrivent "Vidéo introuvable", "Vidéo introuvable" - redémarrez à nouveau la vidéo.

Éditeur CodeVisionAVR - site officiel

Si le microcontrôleur n'est pas flashé, alors :
1) Ne vous en faites pas. Mettez de côté le design, faites une pause, prenez une tasse de thé et détendez-vous. Les vrais designs commencent rarement à fonctionner la première fois - c'est normal, surtout pour les débutants (car il y a trop de facteurs non pris en compte que le cerveau n'est pas capable de comprendre tout de suite).
Les développeurs professionnels refont leurs conceptions plusieurs dizaines de fois :)))
Une propriété intéressante du cerveau : Comme l'a dit Mark Twain, "Ne remettez pas à demain ce que vous pouvez remettre à après-demain." Parfois, à bout portant, il n'est pas possible d'écrire un programme, de trouver circuit électrique et ainsi de suite. Dans ce cas, vous n'avez pas besoin d'appliquer d'effort supplémentaire. Mettez la tâche dans l'esprit subconscient et attendez quelques jours. Après une pause, tout s'arrange souvent tout seul. Et beaucoup plus vite et mieux que si vous subissiez les mêmes jours du matin au soir.

2) Après le repos, vérifiez à nouveau attentivement :
Nutrition - pas inférieur à 4,5 volts, il est conseillé de le prendre à partir de l'USB de l'ordinateur auquel le programmateur est connecté (pour exclure d'éventuels courants d'égalisation). Vérifiez la tension avec un testeur ;
Les fils de l'ordinateur au programmateur sont-ils trop longs ? Les fils longs sont perturbés et la probabilité d'échec de la transmission de données augmente ;
Le câble pourrait-il être cassé à l'intérieur ? Faites sonner tous les fils avec un testeur.
Les fils ont-ils été mélangés ? MOSI, MISO, SCK, réinitialiser, Terre, au bon endroit coincé?
Le programmateur est-il correctement réglé dans Réglage >> Programmeur;
Projet >> Configurer >> Compilateur C;
Le type de cristal est-il correct dans Outils >> Programmeur de puce;

Fuzy n'a pas touché? Si touché, vous devrez mettre un quartz externe.
As-tu nettoyé la puce avant de flasher ? Outils >> Programmeur de puce >> Programme >> Effacer la puce;
Parfois ça aide nettoyage completébrécher Outils >> Programmeur de puce grand k
Bouton de réinitialisation de la puce (équivalent à l'envoi d'une impulsion à la broche RESET) ;
Mettez-le au bas de la fenêtre Outils >> Programmeur de puce trois tiques Vérifier la signature, Vérifier l'effacement , Vérifier ;
Ou vice versa - décochez ces cases. Essayez-le de cette façon et cela.
Si tout le reste échoue, alors commander une nouvelle puce. Une puce retirée de quelque part peut s'avérer être brûlée et réglée sur un générateur externe, et avec des broches brûlées, etc.
Oui, et dans les magasins, ils sont parfois aspirés défectueux, tk. ils gardent on ne sait où. Parfois, il est plus facile d'acheter une nouvelle puce que de penser à ce qui est arrivé à l'ancienne (mais ne la jetez pas, lorsque vous gagnez de l'expérience - reconstruisez).
Si tu trouves vieux ordinateur- essayer
je fais Programmeur LPT(du coup un programmateur USB défectueux a glissé ?). Il n'y a rien de plus simple qu'un programmeur LPT ; Je l'ai fait sur une douzaine d'ordinateurs - il a toujours commencé à fonctionner tout de suite et il n'y a jamais eu de panne.
Rappelez-vous avant l'installation écrasez vos mains o une pile, un robinet ou une structure massive en acier (clôture, bibliothèque), ou achetez un bracelet antistatique ou un tapis (l'électricité statique des mains peut endommager les microcircuits fragiles).
Enfin, la manière la plus perverse - essayez un autre ordinateur. Il arrive que cartes mères ils sont bogués, leurs ports grillent, les fils des contacts s'éloignent, etc.

Apprenez les microcontrôleurs non seulement à partir des vidéos de ce site. Le cerveau a besoin de variété. Lisez des livres, des forums, Wikipedia, d'autres sites. Demandez conseil à vos amis électroniciens. Pratiquez et expérimentez par vous-même. Accumuler des connaissances et de l'expérience.