![]() |
---|
|
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.
![]() |
---|