Programmation d'attiny2313 via le port com. Programmation Attiny2313

23.12.2023

Les microcontrôleurs Atmel AVR jouissent d'une popularité méritée parmi les radioamateurs depuis plusieurs années maintenant. Une particularité de ces MK est que vous pouvez y écrire un « firmware » en mode parallèle et série.

Restauration de la configuration du bit ATtiny13 Fuse

Dans la pratique de la radio amateur, les plus utilisés sont les programmeurs série (SPI - Serial Peripheral Interface), qui présentent de nombreux avantages : leurs circuits sont généralement plus simples que ceux des programmeurs parallèles (dans les cas extrêmes, on peut même se débrouiller avec cinq conducteurs et deux résistances) ; il existe de nombreuses options à la fois pour les programmeurs eux-mêmes et pour les programmes de contrôle pour divers systèmes d'exploitation ; Pour connecter le programmateur, vous pouvez choisir presque n'importe quel port d'ordinateur - il existe des schémas pour LPT et COM, ainsi que pour les programmeurs USB. De plus, un tel programmateur permet de « flasher » le MK sans le dessouder de l'appareil (ISP - In System Programmable).

Cependant, le mode de programmation SPI est toujours simplifié ; et certaines capacités de programmation entièrement parallèles n'y sont pas disponibles. Le problème le plus courant avec la programmation séquentielle est l'incapacité d'effectuer des actions avec le MK, si certaines cellules fusibles de ce MK ont été modifiées par rapport aux valeurs par défaut - dans ce cas, la puce « se met en grève » et ne le fait pas. communiquer avec l'ordinateur : il ne peut plus être utilisé ni lu ni « flashé » par un programmeur série. Et il semble être en panne, alors que le programme PonyProg, par exemple, produit le message d'erreur suivant : « Périphérique manquant ou périphérique inconnu (-24), bien que dans le circuit final ce MK puisse fonctionner tout à fait normalement.

La raison de ce « manque de communication » peut être, par exemple, la mise à zéro du bit RSTDISBL (et un zéro dans les bits fusible d'un AVR signifie que ce bit est programmé) - ce qui conduit à la désactivation de l'entrée de réinitialisation externe et à sa mise hors tension. dans une ligne d'E/S normale ; et sans réinitialisation externe, le MK ne pourra pas entrer en mode de programmation SPI, et sera inaccessible au PC. Une autre raison pour laquelle le MCU devient « invisible » pour le programmeur SPI est le manque de synchronisation : les bits de fusible qui contrôlent le générateur d'horloge (CKSEL0-3) peuvent être réglés de telle manière que le MCU éteindra les circuits d'horloge internes et nécessite un oscillateur externe - source d'horloge ; et sans synchronisation, la programmation SPI est impossible.

De plus, des octets de fusibles mal "câblés" peuvent être le résultat non seulement d'inattention ou d'ignorance - des pannes matérielles lors du "clignotement" sont également très probables, surtout s'ils sont "cousus" à travers l'une des variations sur le thème des "cinq fils". » - donc, de « tombé dans le piège Personne n'est à l'abri d'être dans le coma avec des députés allongés sur l'étagère et attendant une guérison miraculeuse (et si vous en croyez Internet, alors presque un amoureux d'AVR sur deux a vécu cela - et pas forcément un débutant).

Si un tel problème se produit et que le MK cesse d'établir la communication avec l'ordinateur, il ne sera alors plus possible de corriger les octets de fusible mal réglés à l'aide d'un programmateur série. Cependant, il n'est pas du tout nécessaire de fabriquer ou d'acheter un nouveau programmeur parallèle (ou, surtout, un kit de débogage) juste pour « guérir » quelques MK « comateux », surtout si l'ancien programmeur SPI est tout à fait satisfaisant - c'est plus pratique pour cette utilisation un appareil simple dont le schéma est donné sur le site

L'appareil est conçu pour "traiter" l'ATtiny2313 MK, mais peut être converti pour tout autre modèle d'AVR - Tiny et Meda - pour lequel un "code source" bien commenté du firmware est joint, ce qui permet de le réécrire. en ce qui concerne le MK pour lequel une ambulance est nécessaire en ce moment. L'essence du fonctionnement d'un tel appareil est de mettre le « patient » en mode de programmation parallèle et d'émuler sur ses lignes les signaux du « vrai » programmeur qui sont responsables du changement d'état des cellules fusibles ; puis écrivez les valeurs par défaut des cellules fusibles dans ce MK.

Cet appareil définit les valeurs d'usine pour tous les octets de fusible : haut, bas et supplémentaire ; et en outre, il efface également la mémoire des programmes et des données du « patient », ce qui lui permet d'acquérir l'état d'un microcircuit « propre ». Des appareils similaires ont déjà été décrits dans la littérature radioamateur et sur Internet (sous les noms Fuse Doctor, AVR Doctor, AVR Reanimator, AVR Aibolit, etc.), mais celui-ci possède plusieurs fonctionnalités qui rendent son utilisation un peu plus agréable. Premièrement, dans toutes les conceptions connues de l'auteur, le « médecin » et le « patient » étaient reliés entre eux, pratiquement « pied à pied » (à l'exception de certaines bornes qui, selon le schéma, pour le « médecin » et « patient » ne doit pas être connecté).

C'est-à-dire les lignes РВ0-РВ7 - aux lignes РВ0-РВ7, la ligne PD6 - à la ligne PD6, etc. - Ce qui, dans le cas de l'assemblage du circuit de manière imprimée, compliquait considérablement l'installation - de nombreux cavaliers étaient nécessaires, ou double -câblage latéral (bien que certains auteurs aient suggéré simplement d'installer les microcircuits les uns sur les autres, en pliant les bornes non connectées sur le côté et en soudant des résistances/conducteurs dessus ; nous le savons très bien). Ici les microcircuits sont disposés « côte à côte », « jack », ce qui rend la disposition du circuit imprimé très simple.

Dans la version de l'auteur, illustrée à la figure 2, il reprend en grande partie le schéma de circuit et ne contient que trois petits cavaliers. Taille de la planche - 60x60 mm. Deuxièmement, certains appareils nécessitaient deux tensions : 5 V pour alimenter le MK et 12 V pour la ligne de réinitialisation « patient » pour passer en mode programmation. Ce circuit ne nécessite qu'une seule tension, qui peut varier dans une plage assez large - l'essentiel est qu'elle soit d'au moins 12 V. Troisièmement, la plupart des appareils décrits ne permettent pas le remplacement « à chaud » des « patients » au cas où c'est le cas. il est nécessaire de "guérir" plusieurs MK d'affilée - après chaque "clignotement", ils doivent couper le courant, remplacer le "malade", puis remettre le courant, etc. Cet appareil configure toutes les sorties pour qu'elles soient enregistrées.

O après chaque "clignotant", qui permet de "traiter" les microcircuits avec un "convoyeur" - branchez l'alimentation, installez le "patient", appuyez sur le bouton "start", regardez le résultat du "traitement" sur HL1 , retirez-le, insérez un nouveau « patient », appuyez sur J'ai regardé HL1, je l'ai retiré, je l'ai inséré, etc. Et tout cela sans couper le courant (au moins ouvrir une « tente » au marché de la radio !). Eh bien, quatrièmement, souvent, dans de tels appareils, il n'y a pas de vérification des bits de fusible enregistrés ni d'indication du résultat du "traitement" (du type "réussi/échec").

Dans cette conception, une vérification est fournie et la LED HL1, qui peut avoir trois états, est utilisée pour indiquer ses résultats :

  1. S'allume en continu - la programmation « patient » est terminée
    réussi, la lecture des octets de fusible correspond à ceux écrits ;
    l'appareil attend le prochain « patient » ;
  2. Clignotant à une fréquence de 2 Hz - erreur dans
    programmation du « patient » :
    les octets de fusible lus ne correspondent pas à ceux écrits ; "patient" n'est pas entré en mode programmation, n'est pas installé ou est défectueux (en
    le programme permet de vérifier la présence d'un « patient » - un AVR fonctionnel définit la logique 1 sur la ligne BSV/RDY (broche 3 pour ATtiny2313) lors de l'entrée en mode de programmation parallèle) ; l'appareil attend le prochain
    "patient";
  3. OFF : le processus de programmation et de vérification est en cours. La programmation d'un « patient » en bonne santé prend moins d'une seconde, et cet état de la LED ne devrait pas être perceptible dans des conditions normales. Si la LED est éteinte pendant une période relativement longue, il est fort probable que le processus de « clignotement » soit entré dans un cycle en raison du fait que le « patient » défectueux est bloqué en mode d'enregistrement et ne règle pas le BSY. Signal de préparation /RDY attendu par le « médecin ».

Comme déjà mentionné, l'appareil est assez universel et peut être utilisé pour « traiter » presque tous les MK de la série AVR. Dans ce cas, il n'est pas du tout nécessaire de faire une copie séparée de l'appareil pour différents microcontrôleurs qui diffèrent par le nombre et l'emplacement des broches - il suffit d'ajouter simplement, si nécessaire, des adaptateurs pour le brochage du prochain « malade ». " un, et réécrivez le programme de contrôle en conséquence. L'adaptateur est une prise DIP-20, qui est insérée avec ses « pattes » dans le panneau « patient » sur la carte de l'appareil. D'en haut, vers une telle prise (aux contacts des sorties du microcircuit), les conducteurs sont soudés (ou simplement insérés) aux endroits où les lignes d'alimentation et de commande s'approchent du « patient » sur la carte.

Les autres extrémités de ces conducteurs sont soudées aux bornes de la deuxième prise - sous le MK qui nécessite un « traitement » - en fonction de l'emplacement de ses lignes de commande, qui peut être précisé dans la fiche technique propriétaire. Il s'agit d'une sorte de connecteur dont la fiche (juste une prise DIP-20) est insérée dans la prise DIP-20 pour le « patient » sur la carte, et un nouveau « patient » est inséré dans sa prise (une autre prise). Quant au programme, il faudra peut-être le corriger, car... Différents modèles de microcontrôleurs AVR nécessitent souvent des actions différentes à la fois pour passer en mode programmation et pour modifier les octets de fusible. De plus, les octets de fusible eux-mêmes (y compris leur nombre) sont différents pour les différents modèles MK - des informations plus détaillées peuvent être obtenues dans [L. 1,2,3], ou dans la documentation de l'entreprise.

Et pour faciliter la compréhension du programme original, je lui ai fourni des commentaires détaillés. En tant que "médecin", cet appareil utilise le même microcontrôleur ATtiny2313 que le "patient" - il est également installé sur la prise afin qu'après avoir restauré tous les microcircuits "malade", il puisse être retiré et utilisé dans d'autres projets. Pour fonctionner dans cet appareil, tous les fusibles du « docteur » doivent être les mêmes que ceux installés par défaut (en usine) ; la seule chose est que pour un fonctionnement plus stable (surtout avec une tension d'alimentation instable), chez le "médecin", vous pouvez activer le système BOD en le réglant à un niveau de 2,7 V (en réglant le bit du fusible BODLEVEL1 sur zéro).

Le « docteur » ne nécessite pas de quartz externe ; il fonctionne à partir d'un oscillateur RC intégré. La puce DA1 (78L05) peut être remplacée par l'analogue domestique KR1157EN502, ou par le 7805 plus puissant - mais elle est beaucoup plus chère et sa puissance n'est pas requise pour ce circuit. Le transistor VT1 fonctionne ici en mode clé et peut être de n'importe quelle structure NPN - par exemple, KT315, 2SC1815, 2SC9014, 2SC1749S, etc. mais pour certains modèles, vous devrez modifier la disposition du tableau. La diode de sécurité VD1 peut être n'importe quoi, avec un courant d'au moins 150 mA. sa tâche est de protéger le circuit contre les inversions accidentelles de puissance. Toutes les résistances du circuit sont de petite taille, 0,125 W - leurs valeurs peuvent différer de celles indiquées dans une plage assez large. LED HL1 - n'importe quel indicateur.

Et en conclusion, je voudrais parler d'une caractéristique intéressante du comportement de certaines copies de l'ATtiny2313 MK lorsqu'ils sont programmés en SPI à l'aide du programme PonyProg2000 (peut-être que d'autres modèles MK se comportent de la même manière, y compris avec d'autres programmes - mais l'auteur n'a pas encore eu l'occasion d'expérimenter autre chose que la combinaison ATtiny2313-PonyProg2000). L'essence du problème est la suivante : parfois, lorsque vous essayez de lire ou d'écrire sur un microcontrôleur, le programme PonyProg affiche le message d'erreur « Périphérique manquant ou périphérique inconnu (-24) » - et ce malgré le fait qu'il n'y a pas de bits de fusible dans ce microcontrôleur. ont été changés - d'ailleurs, le microcircuit peut même être neuf, jamais « flashé » encore ! Le « Traitement » utilisant l'appareil décrit ci-dessus ne donne aucun résultat - lorsque vous essayez à nouveau de lire/écrire, le message d'erreur apparaît à nouveau.

Le MK semble être hors service, et sans aucune raison. Mais si vous cliquez sur le bouton « Ignorer » dans ce message, forçant ainsi « Pony » à ignorer l'absence de réponse de MK. et essayez toujours de lire/écrire le microcircuit, alors ce MK sera lu ou « flashé » normalement. Après un tel « firmware » forcé, la plupart des MK « faisant semblant d'être morts » fonctionneront tout à fait normalement, et sans aucun échec (à l'exception du message décrit ci-dessus lors de la tentative d'établissement d'une connexion avec le PC) !

Apparemment, le point ici est que certaines instances de MK ne génèrent pas la confirmation correcte en réponse à la demande du programmeur, ce qui fait que PonyProg conclut qu'elles sont défectueuses ; Dans le même temps, ces MK perçoivent normalement le reste des commandes du programmeur et les exécutent correctement. Il est fort possible qu'il s'agisse d'une fonctionnalité (ou plutôt d'une "maladie") de l'AVR MK (ce n'est pas seulement que PonyProg a inclus un tel bouton - "Ignorer") - l'auteur de cet article a fait en sorte que trois MK sur dix se comportent de cette façon, et le plus souvent cela a commencé, ce n'est pas immédiatement, mais après plusieurs « firmwares ».

Ou peut-être que la tension statique sur les mains humaines en est la cause. Quoi qu'il en soit, dans les conceptions critiques (telles que les dispositifs d'allumage, le chauffage automatique, l'arrosage, les systèmes d'alarme, etc.), il n'est toujours pas conseillé d'utiliser de tels MK « qui brisent la confiance ». Mais dans les jouets, les guirlandes de sapins de Noël, les sonnettes et autres appareils auxiliaires (comme celui décrit ci-dessus ©), ils fonctionneront très bien pendant de nombreuses années - et sans aucun problème.

Le microcontrôleur ATTiny2313 est une renaissance dans une nouvelle série de l'ancien microcontrôleur AT90S2313, qui avait beaucoup de succès en son temps. ATTiny2313 est une version améliorée de son ancêtre. Mais il a aussi hérité d’une périphérie plutôt modeste. Ainsi, en termes de fonctionnalités, ATTiny2313 est modeste. Le microcontrôleur est disponible en deux versions - normale (ATTiny2313) et à puissance réduite (ATTiny2313 V). Vous devez payer pour une puissance réduite en abaissant la fréquence d'horloge du microcontrôleur (fonctionnement plus lent).

Caractéristiques générales:

  • 120 instructions optimisées pour la programmation dans des langages de haut niveau ;
  • 32 registres à usage général (j'adore ça) ;
  • presque toutes les instructions sont exécutées en 1 cycle d'horloge du générateur, grâce à quoi les performances atteignent 20 MIPS (20 millions d'opérations par seconde) ;
  • 2 kilo-octets de mémoire flash pour les programmes. La mémoire flash peut être programmée directement à partir du contrôleur (lui-même) ;
  • 128 octets EEPROM (mémoire non volatile) ;
  • 128 octets SRAM (mémoire vive).

Qu'avons-nous à bord de cette puce périphérique ?

  • une minuterie/compteur 8 bits ;
  • une minuterie/compteur 16 bits ;
  • quatre canaux PWM ;
  • comparateur analogique;
  • Minuterie de surveillance ;
  • Interface série universelle USI ;
  • USART (il s'agit d'un ordinateur COM RS232).

Cadeaux spéciaux :

Puissance, fréquence :

1,8 – 5,5 V (pour ATTiny2313V) jusqu'à 10 MHz
2,7 – 5,5 V (pour ATTiny2313) jusqu'à 20 MHz
En mode fonctionnement, il consomme 230 µA avec une alimentation de 1,8 V et une fréquence d'oscillateur maître de 1 MHz. En mode économie d'énergie, la mise hors tension consomme moins de 1 µA à 1,8 V

La programmation

ATTiny2313 a réussi à survivre à une autre révision et a acquis une lettre UNà la fin. Parmi les innovations, il convient de noter :
— Des interruptions externes sont apparues sur toutes les jambes.
— La séparation entre l'alimentation électrique normale et basse tension a été supprimée. ATTiny2313A peut être alimenté de 1,8 à 5,5 V, alors qu'il suffit de respecter les restrictions de fréquence de 4 MHz (pour 1,8 V) à 20 MHz.
— La consommation de courant a été considérablement réduite, tant en mode normal qu'en mode d'économie d'énergie - 190 µA et 0,1 µA, respectivement.
De plus, à la suite de la dernière révision, ATTiny2313 a acquis son frère aîné ATTiny4313 (sans la lettre A). Le frère aîné est similaire à l'ATTiny2313A, à l'exception de deux fois plus de mémoire (4 Ko Flash, 256 octets EEPROM, 256 octets SRAM). Ces changements montrent l'intention d'Atmel de continuer à prendre en charge ce microcontrôleur.

En raison de la faible disponibilité et du prix incompréhensible des nouvelles versions d'ATTiny2313A et d'ATTiny4313, mes appareils seront développés sur l'ancienne version d'ATTiny2313. Mais comme les nouvelles versions sont compatibles avec les anciennes, en théorie, le firmware devrait fonctionner sur les nouveaux microcontrôleurs.

Conclusions :

Comme tous les microcontrôleurs AVR de la série ATTiny2313, il est productif et économique. Il dispose d'un boîtier SOIC pratique pour la disposition et la soudure des cartes. Les distances entre les jambes sont relativement grandes (on peut même arriver à mettre une trace sur la planche entre des jambes adjacentes). Facile à apprendre. Il existe beaucoup de littérature en russe. En raison de la grande popularité de son prédécesseur AT90S2313, de nombreux circuits intéressants ont été développés sur le réseau pour la répétition. Largement disponible dans le commerce. Peu coûteux. Pour commencer à étudier les microcontrôleurs, c'est ici qu'il faut être. Parmi les défauts, il convient de noter aujourd'hui les périphériques plutôt modestes. Et comme point négatif, le boîtier SOIC est un peu gros (même si je pinaille déjà). De petites quantités de mémoire ne vous permettront pas de créer des projets à grande échelle sur l'ATTiny2313. En général, un bon contrôleur performant pour les petits projets ne nécessitant pas de périphériques spéciaux. Je prévois de l'utiliser assez largement dans mes appareils en raison de la meilleure disponibilité et du faible coût.

Comment programmer les microcontrôleurs ATtiny2313 ? Nous avons donc un microcontrôleur ATtiny2313, un port LPT (forcément en fer - aucun USB-2-LPT ne fonctionne), plusieurs fils (pas plus de 10 cm de long) et bien sûr un fer à souder. Il est conseillé d'avoir un connecteur DB-25M (mâle) ; il sera plus pratique d'y connecter un microcontrôleur, mais vous pouvez vous en passer. Nous soudons les fils aux broches 1, 10, 17, 18, 19, 20 du microcontrôleur. On obtient quelque chose comme ce qu'il y a sur la photo :


Je l'ai fait sans connecteur (seules les mères étaient disponibles...), et voici ce qui s'est passé :


Certes, mon port LPT est posé sur la table à l'aide d'un câble de 1,5 mètre de long. Mais le câble doit être blindé, sinon il y aura des interférences, des interférences et rien ne fonctionnera. Le schéma de ce dispositif de programmation de microcontrôleur est le suivant :


Pour être tout à fait honnête, il est conseillé d'assembler le « bon » programmateur. Et puis ce sera plus facile et le port sera intact. J'utilise STK200/300. Ensuite, nous utilisons le programme PonyProg2000. Après avoir démarré le programme, il « hennit… » comme un vrai poney. Pour ne plus entendre cela, cochez la case « Désactiver le son » dans la fenêtre qui apparaît. Cliquez sur OK". Une fenêtre apparaît indiquant que vous devez calibrer le programme. Il existe différents types d’ordinateurs, lents et rapides. Cliquez sur OK". Une autre fenêtre apparaît - elle nous indique que nous devons configurer l'interface (quel programmateur et où il est connecté.). Allez donc dans le menu : Configuration -> Calibrage. Dans la fenêtre qui apparaît :


Cliquez sur "OUI". Quelques secondes s'écoulent et le programme dit "Calibration OK". Ensuite, allez dans le menu : Configuration -> Configuration de l'interface. Dans la fenêtre qui apparaît, configurez-le comme indiqué sur la figure.


Allez maintenant dans le menu : Commande -> Options du programme. Dans la fenêtre qui apparaît, configurez-le comme indiqué sur la figure.


Tout est prêt pour la programmation !... Ainsi, la séquence d'actions :


1. Sélectionnez « AVR micro » dans la liste
2. Dans une autre liste, sélectionnez "ATtiny2313".
3. Chargez le fichier du firmware (Fichier -> Ouvrir le fichier de périphérique), sélectionnez le fichier souhaité, par exemple « rm-1_full.hex ».
4. Cliquez sur le bouton « Lancer le cycle du programme ». Une fois la programmation terminée, le programme indiquera « Programme réussi ».
5. Et enfin, vous devez programmer les soi-disant fusibles. Pour ce faire, cliquez sur le bouton « Bits de sécurité et de configuration ». Dans la fenêtre qui apparaît, cliquez sur « Lire », puis cochez les cases et cliquez sur « Écrire ».

ATTENTION! Si vous ne savez pas ce que signifie un bit de configuration particulier, n'y touchez pas. Nous avons maintenant le contrôleur ATtiny2313 prêt à l’emploi ! Sur le forum, vous pouvez télécharger le programme PonyProg2000 et l'article original avec des images supplémentaires. Le matériel pour le site Web du Circuit Radio a été fourni par Ansel73.

Le diagramme schématique du programmateur de port LPT est présenté sur la figure. En tant que conducteur de bus, utilisez le microcircuit 74AC 244 ou 74HC244 (K1564AP5), 74LS244 (K555AP5) ou 74ALS244 (K1533AP5).

La LED VD1 indique le mode d'enregistrement du microcontrôleur,

LED VD2 - lecture,

LED VD3 - présence d'alimentation au circuit.

Le circuit prend la tension nécessaire à l'alimentation du connecteur ISP, c'est-à-dire à partir de l’appareil programmable. Ce circuit est un circuit de programmation STK200/300 repensé (LED ajoutées pour faciliter l'utilisation), il est donc compatible avec tous les programmes de programmation PC qui fonctionnent avec le circuit STK200/300. Pour travailler avec ce programmeur, utilisez le programme CVAVR

Le programmateur peut être réalisé sur un circuit imprimé et placé dans le boîtier du connecteur LPT, comme le montrent les figures :




Pour travailler avec le programmateur, il est pratique d'utiliser une extension de port LPT, facile à réaliser soi-même (par exemple, à partir d'un câble Centronix pour imprimante), l'essentiel est de ne pas ménager les conducteurs pour la terre (18- 25 pattes de connecteur) ou acheter. Le câble entre le programmateur et la puce programmable ne doit pas dépasser 20 à 30 cm.