Programmateur de AT90S1200 :

 


Haut de la page Généralités :

Depuis plusieurs années, lorsque l'on feuillette une revue d'électronique, on tombe presque inévitablement sur un micro-contrôleur ; en effet, ce composant quasi-magique permet de remplacer une grande quantité de portes logiques, ce qui facilite grandement la réalisation des circuits imprimés ; enfin, il donne accès à des montages d'une certaine complexité ; la difficulté ne réside plus dans l'agencement de nombreux circuits, mais dans la conception d'un programme personnalisé qui réalise la fonction voulue. Pour beaucoup d'électroniciens (amateurs), ce changement d'approche est un peu perturbant : le micro est souvent perçu comme une sorte de boîte noire difficile à maîtriser, et nombreux sont ceux qui hésitent encore à franchir le pas... et pourtant, il est maintenant très simple grâce à Internet de récupérer de la documentation au format PDF (dans un anglais assez simple), ainsi que l'assembleur correspondant, de quoi franchir le pas...

Le choix du microcontrôleur dépend d'une part des performances techniques attendues, mais aussi de sa facilité de mise en oeuvre : disponibilité du circuit à un prix raisonnable, de l'assembleur (voire d'un compilateur), de la documentation, de la réalisation possible d'un programmateur très simple, à brancher sur le PC.
Parmi les circuits actuellement facilement disponibles sur le marché, deux modèles sortent du lot : le PIC16F84 de Microchip et l'AT90S1200, fabriqué par ATMEL ; ils ont des caractéristiques assez proches et très intéressantes : Haut de la page

Le PIC16F84 est déjà bien implanté et l'on trouve sur le web de nombreux sites qui lui sont consacrés ; l'AT90S1200 est plus récent et un peu moins connu ; Jerry MENG, un radio amateur chinois, a proposé un programmateur ultra-simple, connecté sur le port parallèle ; il a réalisé un programme MS-DOS assez complet et de fort bonne qualité pour piloter ce programmateur, qui prend en charge la plupart des microcontrôleurs de la famille AVR (AT90Sxxxx). Patrice F5JTZ (toujours lui !) nous propose sur son site un circuit imprimé qui peut accueillir sur une même carte les différents circuits composant cette famille. Consultez la rubrique "bonnes adresses" en bas de cette page.

 


Haut de la page La partie matérielle :

J'ai repris le schéma décrit par Jerry MENG afin d'assurer la compatibilité de mon programme avec les systèmes existant ; il est l'adaptation logique des consignes données pour la programmation en mode série du AT90S1200 dans sa documentation : on retrouve l'entrée des instructions (MOSI), la sortie des données (MISO), l'horloge qui cadence les échanges de données et d'instructions (SCK) ; à cela il faut ajouter l'entrée RESET, qui permet de passer en mode programmation, et XTAL1 qui rythme le fonctionnement du microprocesseur ; le signal d'horloge envoyé à XTAL1 nous dispense d'ajouter l'habituel quartz et les deux condensateurs sur le programmateur.

Schéma de la partie matérielle à connecter au port parallèle
Schéma électrique du programmateur

Haut de la page

Les sorties D0, D1, D2 et D7 servent à alimenter le circuit, qui n'a donc pas besoin de source extérieure, le courant consommé restant très faible, y compris en phase de programmation ; une version précédente utilisait des diodes en place et lieu des résistances, mais compte tenu de la faible valeur du courant, la chute de tension induite par les résistances reste négligeable ; il est indispensable de mettre des résistances : on ne peut pas relier directement ensemble les sorties, car si le programmateur était connecté avant que le programme ne soit lancé, l'état des bits ne serait pas fixé et il pourrait y avoir conflit entre des sorties ayant des niveaux logiques différents (on ne doit pas relier ensemble une sortie à '0' et une sortie à '1' !) ; le cas échéant, les résistances limitent (un peu) le courant. Jerry nous signale que dans le cas de l'AT90S1200, celui-là même qui nous intéresse, une sortie suffit à alimenter le circuit, dans ce cas elle peut être reliée directement (pas de résistance) ; je n'ai pas retenu cette solution, mais libre à vous de l'essayer...

Signalons également que la programmation en mode série ne permet pas de programmer le fusible RCEN (R-C Enable). Cette fonctionnalité est désactivée par défaut ; lorsqu'on l'active, il n'est plus nécessaire de mettre un quartz, la fréquence d'horloge est générée par un circuit RC interne (la fréquence ainsi obtenue varie entre 0,3 et 1,6 MHz selon la tension d'alimentation et la température) ; ce bit doit être activé par un programmateur en mode parallèle, mais son utilisation ne concernera pas la plupart d'entre-nous ; de plus, il existe une variante, le AT90S1200A (le suffixe "A" fait la différence), pour lequel cette fonction est activée par défaut. Cette remarque est donnée simplement à titre d'information... Haut de la page  

Intégration dans une fiche DB25 Réalisation pratique : elle est très simple, aussi je ne la détaillerai pas ; en cliquant sur l'image de gauche, vous aurez l'illustration de son intégration dans le capot d'une fiche DB25 mâle ; dans cet esprit, vous pourrez également vous inspirer de ce qui a été fait dans le cas du programmateur de mémoires I2C décrit sur ce même site.

 


Haut de la page La partie logicielle :

C'est à ce niveau que se situe mon travail ; le programme que je vous propose permet de piloter la partie matérielle ; le seul modèle pris en charge est le AT90S1200 : c'est le seul micro de la famille AVR que j'ai expérimenté pour l'instant, mais je n'exclus pas d'étendre la gamme (par exemple, bien qu'un peu plus cher, le AT90S2313 est compatible broche à broche et bien mieux doté en ressources).

Le programme en lui-même :
il est écrit avec C++ Builder 3.0, et fonctionne sous Windows 95 et 98 ; pour une utilisation sous Windows NT, 2000 ou XP, l'installation du driver Porttalk est détaillée plus loin. Sa taille a été adaptée pour un fonctionnement correct, même en mode VGA 640x480x16 couleurs ; son fonctionnement est assez intuitif : il possède deux buffers (zones de mémoire tampon), un pour la mémoire FLASH (le programme), l'autre pour la mémoire EEPROM (les données, mais son utilisation n'est pas systématique) ; le contenu de chaque buffer peut être chargé depuis un fichier, ou bien enregistré dans un fichier, qui sera au format Intel HEXA le plus classique (données sous 8 bits, adresses sous 16 bits) ; la commande "Lecture" charge le buffer concerné avec les valeurs contenues dans le micro (si le bit de protection n°2 n'a pas été activé !). Haut de la page

Interface graphique du programme AVR12.EXE

L'interface graphique du programme est représentée ci-dessus ; les diverses commandes sont accessibles soit par les boutons, soit par les menus (et raccourcis clavier associés). Commencez par charger depuis un fichier le contenu du buffer FLASH (et éventuellement celui du buffer EEPROM), puis cliquez sur le bouton [Configuration] qui fait apparaître la boîte de dialogue suivante : Haut de la page

Il faut tout d'abord choisir le port parallèle actif (en général LPT1), puis la durée de l'impulsion de programmation ; sur mon vieux Pentium 200 MMX, la valeur mini (TEMPO:1000) suffit ; si vous constatez des erreurs de programmation avec des PC rapides, vous pouvez ralentir le processus en augmentant la valeur de "TEMPO" ; sachez qu'en principe, la programmation complète dure environ une vingtaine de secondes ; avec mon Pentium IV 1,7 GHz, j'ai fixé une valeur de tempo de 5000. Vous pouvez ensuite choisir les différentes tâches à effectuer au cours de la séquence de programmation : ce peut être une séquence complète (toutes les cases cochées), un simple effacement, une comparaison, etc. ; il va sans dire qu'une programmation de la FLASH sans un effacement préalable n'aurait pas grand sens ; en revanche, il est possible de reprogrammer l'EEPROM sans effacer tout, si aucun bit de protection n'a été activé. Le bit de protection n°1 interdit la modification ultérieure de la FLASH et de l'EEPROM, mais autorise leur relecture ; le bit n°2 interdit en plus la relecture ; dans ce cas, les valeurs lues sont : Haut de la page

La validation du bit 2 seul semble ne pas avoir d'effet.

Retournez ensuite au programme et lancer la séquence en cliquant sur [Programmer]. Vous pouvez également lire le "Device Code", un groupe de trois octets qui identifient le fabricant et le modèle de microcontrôleur (voir documentation).

 


Haut de la page Téléchargement du programme :

Le fichier AVR12.ZIP fait 246.266 octets ; une fois décompressé, il fournit le programme AVR12.EXE (522.240 octets), version 1.2, pour Windows 95 ou 98 (et NT/2000/XP avec le driver, voir ci-dessous) ; cliquez sur l'icône pour télécharger AVR12.ZIP :

Téléchargement de AVR12.EXE compressé au format ZIP
"Cliquez-moi pour télécharger AVR12.ZIP !"

Améliorations du programme :

 


Haut de la page Installation d'un driver pour le fonctionnement sous Windows NT, 2000 ou XP :

L'accès direct au port parallèle n'est normalement pas possible sous windows NT, et se traduit par l'apparition à l'écran d'un message d'erreur du type "Privileged instruction". Rendons ici hommage à Craig Peacock qui a créé PortTalk, un driver rendant cela possible, et l'a mis a disposition sur son site, retirant ainsi une énorme épine du pied des programmeurs. Outre la page consacrée à PortTalk, allez également consulter l'ensemble du site qui regorge d'informations utiles liées à la programmation système sur PC : www.beyondlogic.org

Après cet hommage mérité, voyons concrètement les étapes à suivre (rigoureusement !) pour faire fonctionner le programme :

  1. Téléchargez le fichier 'AVR_NT.ZIP' (20 ko) ; extrayez les quatre fichiers qu'il contient :
    Allowio.exe, Porttalk.reg, Porttalk.sys et AVR.bat.

  2. Copiez le fichier Porttalk.sys dans le sous répertoire suivant :
    - pour Windows NT/2000 dans "C:\WinNT\system32\drivers\"
    - pour Windows XP dans "C:\Windows\system32\drivers\"

  3. Lancez le fichier Porttalk.reg (en double-cliquant dessus dans l'explorateur) ; il va mettre à jour la base de registre de Windows pour lui faire prendre en compte le driver. Vous pouvez ensuite supprimer ce fichier.

  4. Redémarrez votre ordinateur afin qu'il charge effectivement le driver.

  5. Une fois que l'ordinateur a redémarré, allez dans le répertoire contenant le programme du programmateur AVR, et copiez dans ce même répertoire les deux fichiers Allowio.exe et AVR.bat. Si vous utilisez une autre version que AVR12.EXE (ou un bien autre programme), éditez le fichier AVR.bat et modifiez le nom qui suit "allowio.exe /a".

Et voilà ! c'est terminé... le programme se lance alors en cliquant sur AVR.bat ; le message d'erreur "Privileged instruction" ne doit plus apparaître.
Quelques fignolages : vous pouvez éventuellement placer sur le bureau un raccourci vers le fichier 'AVR.bat', et changer l'icône dans les propriétés du raccourci en allant chercher l'une de celles qui se trouvent dans le fichier AVR12.EXE ; toujours dans les propriétés, choisissez l'exécution en mode 'fenêtre réduite' pour ne pas voir la fenêtre DOS s'afficher.

 


Haut de la page Bonnes adresses :

Allez faire un tour sur le site de ATMEL, le fabricant du circuit, vous y trouverez tout le nécessaire pour développer des applications à base de AT90S1200 :

Sur le site de Jerry Meng, http://www.qsl.net/~ba1fb, vous pouvez récupérer "FBPRG.ZIP" qui contient le soft sous DOS (et le plan du programmateur) ; j'utilise la version 1.30, car la version 1.60 (également fournie sur le site) ne fonctionne pas sur mon PC (un pentium 200 MMX) ; mais essayez aussi cette dernière, peut-être aurez-vous plus de chance... Haut de la page

Sur le site de Patrice, une page (en français !) détaille la réalisation d'un circuit imprimé pouvant accueillir les micro-contrôleurs de la famille AVR, ainsi que l'utilisation du programme de Jerry MENG.


Dernière mise à jour : le 11/12/2001.