Utilisation du programmateur

Vous avez donc acheté un programmateur ou réalisé votre propre programmateur série. Nous allons voir comment s’en servir, mais assurez-vous que vos drivers sont installés si votre programmateur est USB

Préparation de la breadboard

La breadboard se présente comme une platine rectangulaire avec une large dépression longitudinale centrale.

Fig 1 : Breadboard

De chaque côté de la dépression centrale, on trouve de nombreux trous alignés en colonnes marquées par des chiffres et en lignes notées par des lettres. Les 5 trous d’une colonne sont connectés ensemble. Par exemple, les trous F10 à J10 sont électriquement connectés (voir colonne verte). Sur les bords de la platine, on trouve encore de chaque côté une ou deux lignes de trous. Ces lignes sont destinées à recevoir l’alimentation. Mais attention, tous les trous d’une ligne ne sont pas connectés ensemble. Il y a généralement une ou deux interruptions à rechercher avec votre multimètre en position ohmmètre (voir les barrettes bleue et rouge). Pour répartir l’alimentation sur toute la platine, il faut ponter ces interruptions. Ces interruptions sont utiles si on veut plusieurs voltages différents sur la même platine.

Voici un petit schéma de l’implantation de base d’un µC sur breadboard, réalisé à l’aide du logiciel gratuit Fritzing.

Fig 2 : Montage de base

Que ce soit un ATmega8, 168 ou 328, peu importe, le brochage est le même.

La première chose à faire est de raccorder le connecteur d’alimentation à la platine.

Attention, la tension elle-même ne sera à brancher qu’en toute dernière opération, sous peine de risquer des courts-circuits qui pourraient être fatals au µC. On raccorde donc le +5V et GND aux lignes qui leur sont destinées, en n’oubliant pas de faire le pontage des interruptions et de renvoyer l’alimentation vers l’autre bord de la platine si nécessaire. Un petit

Fig 3 : Orientation d’une LED

condensateur de 100 nF peut être placé entre le +5V et la masse. Il aide à diminuer les variations de tension.

Comme témoin d’alimentation, on place une LED dont la cathode est connectée à GND et l’anode à +5V par l’intermédiaire d’une résistance d’au moins 220 à 300 Ω. Il n’y a pas de sens à respecter pour la résistance. La LED est à orienter en s’aidant du schéma ci-contre.

On place ensuite l’ATmega à cheval sur la dépression centrale, mais il faut d’abord redresser légèrement les pattes car lorsque le microcontrôleur sort d’usine, les pattes sont légèrement écartées. Il faut donc placer les pattes entre les mors d’un étau et serrer prudemment jusqu’à ce qu’elles soient verticales.

Fig 4 : ATmega8

La figure 4 montre une petite encoche semi-circulaire sur la face supérieure. Cette encoche est à placer vers la gauche. Dans cette position, la pin 1 est la première patte à gauche.

Nous raccordons les pattes de l’alimentation : VCC et AVCC au +5V, GND à la masse..

Nous connectons ensuite les câbles du programmateur :MISO à la PIN 18, SCK    à la PIN 19, GND   à la masse, MOSI  à la PIN 17, RST     à la PIN 1.

Fig 5 : Tact Switch

La PIN N°1 (Reset) sera encore munie d’un petit bouton-poussoir (tact switch)

Ces boutons possèdent généralement 4 pattes. Les pattes rapprochées sont mises en contact en appuyant sur le bouton, tandis que les pattes éloignées sont connectées en permanence.

La pin 1 de l’ATmega provoque un Reset du µC lorsqu’elle es connectée à la masse. Elle est donc raccordée à l’une des pattes du switch et la patte proche de celle-ci est connectée à la masse. Pour éviter que la pin de Reset n’ait une tension indéfinie, on l’amène à +5V à travers une résistance de ‘pull up’ de 10 KΩ.

Petit exercice : quel est le courant qui traverse cette résistance quand on appuie sur le bouton ?

La Loi d’Ohm donne la solution :

U = I x R

Où       U = la chute de tension en Volt aux bornes de la résistance

I = l’intensité du courant en Ampère traversant la résistance

R = la résistance en Ohm

On a donc 5V = I x 10000 Ω  è  I = 5V / 10000 Ω  è  I = 0,005 A  = 5 mA

Donc, pas vraiment de surconsommation en appuyant sur le bouton.

Sur le plan matériel tout est en place. Vérifiez une dernière fois le câblage, surtout l’alimentation, et vous pouvez mettre sous tension. La LED doit s’allumer. Si elle ne s’allume pas, coupez immédiatement l’alimentation et vérifiez une nouvelle fois le câblage, l’alimentation et le sens d’implantation de la LED.

On en arrive à la mise en service du programmateur.

Le programme qui va vous permettre d’utiliser votre programmateur s’appelle avrdude.

Avrdude fait partie du package de Winavr, téléchargeable ici : http://sourceforge.net/projects/winavr/files/

Installez le programme en acceptant les paramètres par défaut.

Avrdude est un programme qui se manipule à l’origine en « ligne de commande », ce qui signifie qu’il se lance dans une fenêtre émulant le DOS et qu’il utilise une série de paramètres. Heureusement, il existe plusieurs programmes fonctionnant sous Windows et qui prennent en charge ces paramètres. Je vous propose d’utiliser Burn-O-Mat  comme « façade » d’avrdude. C’est un programme gratuit, facile et qui peut prendre en charge votre programmateur, que vous ayez construit le Ponyser ou acheté l’USBasp. Il est téléchargeable ici : http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_en.html

A l’ouverture, Burn-O-Mat présente cet écran :

Fig 6 : Burn-O-Mat écran d’acceuil

Allez dans le menu ‘Settings’ et choisissez AVRDUDE. Vous recevez alors cet écran :

Fig 7 : Burn-O-Mat avrdude settings

Dans les 2 premières fenêtres, il faudra indiquer la localisation de avrdude.exe et avrdude.conf

Cela peut être fait en cliquant sur les boutons ‘File’. Avrdude se trouve dans le répertoire ‘bin’ de WinAVR.

A ce stade, il vous sera probablement impossible de choisir un programmateur et un Port car les listes sont vides. Cliquez sur ‘Apply’ puis sur ‘Ok’. La fenêtre se referme et on revient à la première fenêtre. Fermez cette fenêtre pour quitter le programme.

Vous pouvez maintenant relancer Burn-O-Mat et rouvrir la fenêtre des paramètres d’avrdude. Cette fois, vous pourrez choisir votre programmateur et le Port. En effet, la liste des programmateurs provient du fichier « avrdude.conf » et celui-ci est pris en compte à l’ouverture de Burn-O-Mat.

Si vous utilisez un USBasp, choisissez le Port ‘usb’. Si vous avez un Ponyser, choisissez le Port COM sur lequel il est branché. Dans la fenêtre ‘additional options’, ajoutez « -v ». Il s’agit du paramètre « verbose output » d’avrdude, donnant plus de renseignements sur les opérations effectuées.

Fig 8 : Burn-O-Mat avrdude settings (suite)

Cliquez sur les boutons ‘Apply’ et ‘Ok’, ce qui vous ramène sur la première fenêtre.

Choisissez maintenant  le type d’AVR que vous avez sur la breadboard  et cliquez sur le bouton ‘Fuses’.

Fig 9 : Fuses

Que sont les « Fuses » ? Ce sont d’importants paramètres de fonctionnement de tous les AVR. Ces 16 fuses (la traduction française de fuse est fusible, mais on utilise généralement le terme anglais) ne peuvent pas être manipulés par le programme chargé dans l’AVR. Ils sont à lire ou à écrire séparément par le programmateur. La toute première chose à faire avant de travailler avec un AVR est de lire les fuses et éventuellement de les modifier. Cela sert en même temps à vérifier que le programmateur et l’AVR sont bien en communication. Ne touchez surtout pas aux fuses des deux lignes rouges. Si ces fuses sont modifiés, il sera impossible d’entrer en communication avec le µC, sauf avec un programmateur spécial.

Les fuses de l’atmega8 sont donc au nombre de 16 et sont regroupés en 2 bytes de 8 bits.

Cliquez sur le bouton ‘reset to default’ puis sur ‘read fuses’ pour lire les fuses. Vous obtiendrez l’un des deux messages suivants :

Fig 10 : Burn-O-Mat résultat de lecture des Fuses

J’espère que vous avez obtenu le message de gauche mais 9 fois sur 10 ce sera celui de droite, tout simplement car il y a de grandes chances d’avoir commis une erreur, surtout quand on est débutant. Donc, si c’est le cas, vous allez reprendre toutes les connexions une à une et vérifier qu’elles sont correctes. Vous vérifierez l’alimentation et son voltage. Si votre programmateur est un USBasp, vérifiez qu’il est reconnu dans le Gestionnaire de Périphériques et que le driver est bien installé.

Cliquez sur le bouton ‘reset to default’ et relancez un essai de lecture des fuses. La moitié inférieure du premier écran de Burn-O-Mat affiche les différentes opérations effectuées par avrdude. Cela peut donner une indication du problème.

Fig 11 : Burn-O-Mat avrdude output

* La première ligne est en fait la ligne de commande envoyée à avrdude, avec tous les paramètres. On y voit

  • la localisation d’avrdude.exe
  • le paramètre –C donnant la localisation de avrdude.conf
  • le paramètre –p identifiant le microcontrôleur (m8 = ATmega8)
  • le paramètre –P identifiant le port utilisé
  • le paramètre –c identifiant le programmateur choisi (ici : ponyser)
  • le paramètre –v demandant la sortie ‘verbose’
  • le paramètre –U hfuse:r:file name:r       signifiant
    • –U                  Opération sur la mémoire
    • hfuse               byte de fuse de poids fort (high fuse)
    •  :r                    read = lecture
    •  :file name        fichier dans lequel ‘hfuse’ sera écrit
    •  :r                    ‘raw’ = brut (format du fichier de hfuse)

    Le paramètre –U lfuse:r:file name:r       signifie la même chose que ci-dessus mais pour le byte de fuse de poid faible (low fuse)

* Ensuite on voit de quelle version d’avrdude il s’agit.

* Viennent ensuite des renseignements provenant d’avrdude.conf, en particulier, le port, le programmateur et le µC choisis.

* A la suite de ces infos vient un tableau rappelant les différentes mémoires accessibles au programmateur.

* On arrive alors à la lecture de la ‘signature’, du hfuse et du lfuse

Chaque µC a une signature différente, composée de 3 bytes. Le premier byte est toujours 1E (en hexadécimal) et identifie ‘ATMEL’

La signature de l’ATmega8 est 0x1E 93 07

Si le programmateur lit une signature différente du µC que vous avez choisi, l’opération demandée à avrdude échouera.

* Après la lecture de la signature, on passe à la lecture des fuses et à leur écriture dans 2 fichiers dont les noms sont choisis par le programme.

Si ces opérations ont réussi, on peut aller lire ces fichiers à l’aide d’un programme d’éditeur de bytes comme ‘HEX Editor NEO’ téléchargeable gratuitement ici : http://www.hhdsoftware.com/hex-editor

On peut également lire ces fuses en format Hex en cliquant sur l’onglet ‘Fuse Hex Editor’, ce qui est plus simple.

* Avrdude indique le temps pris par chacune de ces lectures. Pour la signature et les fuses, c’est insignifiant mais lorsqu’on flashe un programme de plusieurs K bytes, on peut se rendre compte des performances du programmateur.

* Vient enfin le message attendu : ‘avrdude.exe done.  Thank you.’

Il est inutile d’aller plus loin tant que vous n’avez pas réussi à lire les fuses.

Je ne vais pas vous assommer avec la description de chaque fuse. Ils sont expliqués en détail dans la ‘DataSheet’ de votre ATmega. De plus, ils sont présentés de manière plus abordable sur le site ‘Engbedded.com‘ que vous avez intérêt à garder toujours sous la main : http://www.engbedded.com/fusecalc/

Fig 11 : Engbedded Fuse Calculator

On commence par choisir  le µC

J’ai coloré en saumon les paramètres à ne pas modifier, correspondant aux fuses rouges de Burn-O-Mat.

Parmi les autres paramètres, il y en a deux qui seront utiles, du moins au début : le réglage de l’horloge et accessoirement le réglage du bootloader.

L’horloge

Elle n’a pas grand-chose à voir avec celle qui pend au mur de la cuisine. Le µC a besoin d’un système qui bat la mesure car l’unité centrale effectue une opération à chaque battement. L’ATmega8 possède une horloge interne dont la fréquence peut aller jusqu’à 8 MHz, c’est-à-dire 8 millions de cycles par seconde. C’est déjà pas mal du tout  mais l’oscillateur interne n’est pas extrêmement stable. Il peut être remplacé par un système externe plus stable et qui peut monter jusqu’à 16 MHz. Au sortir de l’usine, l’ATmega8 est réglé sur l’oscillateur interne, à la fréquence de 1 MHz, avec un temps de démarrage de 6 cycles + 64 milli secondes. Le temps de démarrage permet à l’alimentation de se stabiliser avant de commencer à exécuter le programme. Si ce temps est trop court, des erreurs peuvent se produire. Tous les choix possibles sont présentés en cliquant sur le menu déroulant . Ces choix modifient les 4 fuses  CKSEL et les 2 fuses SUT

 

Le bootloader

Le bootloader est un petit programme qu’on peut charger dans la partie haute de la mémoire et qui va s’exécuter à la mise sous tension du µC. Ce programme entre en communication avec l’ordinateur et se charge d’envoyer dans le reste de la mémoire le programme principal que le PC lui envoie. Cela permet de programmer le µC sans programmateur.

Alors, pourquoi ne vous ai-je pas proposé ce système au lieu de fabriquer ou d’acheter un programmateur. Réponse : parce qu’il faut nécessairement un programmateur pour charger le bootloader et qu’une fois qu’on dispose d’un programmateur, on peut facilement se passer du bootloader et regagner ainsi la place qu’il occupe.

Si on coche la case ‘Boot Reset vector Enabled’, on réserve une zone de mémoire pour le bootloader. La fenêtre suivante permet de préciser la taille à réserver : 128, 256, 512 ou 1024 words. (un ‘word’ est un groupe de 2 bytes). La mémoire réservée est protégée contre l’effacement lorsqu’on reprogramme ou qu’on efface le µC.

Retour au Menu

3 réflexions à propos de “ Utilisation du programmateur ”

  1. bonjour

    ***Si ces fuses sont modifiés, il sera impossible d’entrer en communication avec le µC, sauf avec un programmateur spécial.***

    svp un exemple de programmateur

    merci

    • Hello oulkasse,

      Selon les datasheets des AVR, le fuse SPIEN (SPI Enable) ne peut pas être modifié avec un programmateur série (SPI). J’avoue que je n’ai jamais essayé de le modifier.
      Par contre, le fuse RSTDISBL (Reset Disabled) peut être modifié. Si c’est le cas, l’AVR ne peut plus être programmé que par programmation parallèle en utilisant le programmateur « DRAGON » d’Atmel (http://www.atmel.com/webdoc/avrdragon/avrdragon.pp_description.html). Il ne s’agit pas d’un simple programmateur à construire soi-même et qui se branche sur le port parallèle du PC. La programmation parallèle du DRAGON utilise de nombreux signaux dont un signal à 12V pour la pin Reset.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s