|
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 :
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.
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.
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...
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.
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é !).
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 :
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 :
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).
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 :
Améliorations du programme :
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 :
C:\WinNT\system32\drivers\
"C:\Windows\system32\drivers\
"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.
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...
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.