Retour Suite
sylvainmahe.site LE SITE de Sylvain Mahé contact@sylvainmahe.site
Article : Sylvain Mahé contact@sylvainmahe.site Les outils complémentaires du projet MODULE En programmation C++ pour les microcontrôleurs de marque Microchip comme l'ATmega48P, l'ATmega88P, l'ATmega168P, l'ATmega328P, l'ATmega164P, l'ATmega324P, l'ATmega644P, ou l'ATmega1284P dont il est question ici, des outils de compilation et de programmation de la puce performants et standards existent. Ces outils sont disponibles pour les systèmes Linux (c'est mon cas), ou Windows. Pour macOS il faudra effectuer des recherches car je ne connais pas ce système, mais macOS étant une base Unix je pense que cela ne doit pas beaucoup différer de Linux. Outils pour Linux :
Vous devez installer les paquets gcc-avr, avr-libc, avrdude et binutils pour programmer les microcontrôleurs implantés sur mes automates programmables MODULABLE 20 ou MODULABLE 32. Pour ma part j'utilise le système d'exploitation Linux (qui est largement utilisé de nos jours).
En exemple voici la ligne de commande à écrire dans le terminal pour télécharger et installer les paquets nécessaires sur Linux : sudo apt-get install gcc-avr avr-libc avrdude binutils -y Outils pour Windows :
Plusieurs solutions sont possibles, la plus simple est de télécharger et installer un programme qui se nomme WinAVR, ce programme contient les mêmes outils que sur Linux mais ici en version pour Windows :
Site internet de WinAVR Ne possédant pas Windows il m'est difficile de tester nativement ce logiciel, je pense que le problème qui peut se poser avec WinAVR est son obsolescence, en effet il n'est pas régulièrement mis à jour, et la version que vous allez télécharger est probablement trop ancienne... C'est pourquoi je recommande vivement la procédure suivante, téléchargez manuellement l'archive (.zip) correspondant à la version de votre système d'exploitation Windows, c'est-à-dire soit en version 32 bits ou en version 64 bits disponible sur le site de Zak Kemble ici : Site internet de Zak Kemble Une fois la bonne archive téléchargée (version 32 bits ou 64 bits), vous devez extraire son contenu dans le répertoire de votre choix. En conséquence, pour que ma routine Compiler uploader.bat (que je propose avec le programme MODULE) fonctionne avec les fichiers de Zak Kemble que vous venez de télécharger, il est nécessaire de légèrement modifier son contenu, soit le renommage des différents appels aux programmes avr-gcc, avr-objcopy, avrdude, et avr-size respectivement comme suit : c:\avr-gcc-7.2.0-x86-mingw\bin\avr-gcc.exe
c:\avr-gcc-7.2.0-x86-mingw\bin\avr-objcopy.exe
c:\avr-gcc-7.2.0-x86-mingw\bin\avrdude.exe
c:\avr-gcc-7.2.0-x86-mingw\bin\avr-size.exe
Le renommage montré ci-dessus est un exemple à adapter selon l'archive de Zak Kemble que vous avez téléchargé en version 32 bits ou 64 bits, et en fonction du chemin d'accès où cette archive a été extraite. Dans l'exemple on voit que j'ai téléchargé l'archive en version 32 bits, et que je l'ai extraite à la racine du disque dur c:\. Le programmateur : Le programmateur est une petite carte qui fait l'interface entre votre ordinateur personnel et le microcontrôleur, ce qui permet d'envoyer votre programme dans ce circuit intégré. Vous pouvez fabriquer un programmateur vous-même, ou utiliser une carte toute faite. Pour ma part j'ai essayé les deux. Je vous conseille d'utiliser le programmateur USBasp qui fonctionne à merveille, disponible à l'achat ici : Site internet de l'USBasp Le programmateur USBasp est comme son nom l'indique équipé d'un port USB, à connecter directement à un port USB de votre ordinateur personnel, et à l'autre extrémité d'un port ISP (programmation in-situ) dédié à la programmation du microcontrôleur (c'est un port SPI avec alimentation +5V), à connecter via une nappe adaptée (généralement fournie) sur le port nommé ISP de l'automate programmable (qui lui-même alimente en +5V la totalité de l'automate programmable et est relié en SPI au microcontrôleur). À noter que la programmation ISP a plusieurs avantages par rapport à l'USB :
- Évite de contenir dans la mémoire du microcontrôleur un chargeur d'amorçage (bootloader).
- De ce fait, évite un délai au démarrage du microcontrôleur.
- Minimise le nombre de composants embarqués sur la carte électronique.
- En conséquence, dispense d'équiper la carte électronique d'un composant FTDI (permettant de faire la traduction USB/USART vers le chargeur d'amorçage) qui sur certains systèmes concurrents cause des problèmes d'impédance sur les entrées/sorties USART du microcontrôleur.
Compiler et téléverser votre programme dans l'automate programmable : Pour compiler et téléverser votre programme dans l'automate programmable via le programmateur USBasp, il vous suffit d'exécuter les routines contenues dans le répertoire example situé dans l'archive du programme MODULE (téléchargeable en page d'accueil dans la section "Téléchargements") nommées Compiler uploader.sh si vous utilisez un système d'exploitation Linux, ou Compiler uploader.bat si vous utilisez un système d'exploitation Windows. À l'exécution, ces routines (Compiler uploader.sh et Compiler uploader.bat) compileront et téléverseront dans l'automate programmable (connecté en ISP via le programmateur USBasp à votre ordinateur personnel) tous les fichiers avec l'extension .cpp (fichiers C++) situés dans le répertoire courant. Pour que cette opération de compilation mais surtout de téléversement fonctionne, sur Linux le pilote USB (pour l'USBasp) est déjà installé par défaut (mais il est tout de même nécessaire d'effectuer une petite opération décrite ci-dessous : "Procédure pour Linux"), en revanche sur Windows il vous faut l'installer manuellement (voir plus bas : "Procédure pour Windows"). Procédure pour Linux :
Sur Linux, il convient d'écrire quelques lignes dans le terminal afin d'ouvrir un fichier qui permettra de spécifier quelques règles utiles pour pouvoir communiquer avec l'USBasp :
sudo gedit /etc/udev/rules.d/99-USBasp.rules Cette ligne ouvre l'éditeur de texte Gedit, ensuite il suffit de copier la ligne suivante dans cet éditeur de texte : SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="plugdev", MODE="0666" Une fois ceci effectué, vous enregistrez le fichier, et vous pouvez quitter Gedit. Pour simplifier, il est également possible d'automatiser la procédure décrite ci-dessus en créant une routine (bash) ayant l'extension .sh que vous pourrez exécuter. Cette routine (.sh) contient le programme suivant : #!/bin/bash echo "SUBSYSTEMS==\"usb\", ATTRS{idVendor}==\"16c0\", ATTRS{idProduct}==\"05dc\", GROUP=\"plugdev\", MODE=\"0666\"" | sudo tee /etc/udev/rules.d/99-USBasp.rules read exit 0 Procédure pour Windows :
Sur Windows le pilote de l'USBasp n'est pas présent par défaut sur ce système. Par conséquent vous devez le télécharger et l'installer vous-même.
Il existe nombre de pilotes pour le fonctionnement de l'USB sur Windows, mais l'auteur de l'USBasp recommande d'utiliser un outil qui se nomme Zadig qui permet de rechercher et installer automatiquement ce pilote, personnellement je n'ai jamais essayé (ne possédant pas Windows) mais vu la qualité de son travail je pense que cela est de bon conseil. Ce logiciel est disponible en version pour Windows 7 (ou supérieur) et également en versions plus anciennes pour Windows XP (voir dans la page "Other versions" de la section "Download") : Site internet de Zadig Lors de l'utilisation de ce logiciel, il vous faut spécifier le programmateur utilisé (l'USBasp), ainsi que le pilote, en l'occurrence il se nomme libusb. Ce dernier est en fait une bibliothèque, que vous pouvez télécharger séparément si vous le souhaitez : Site internet de libusb Les fusibles du microcontrôleur : Quand vous achetez un microcontrôleur neuf n'ayant jamais été programmé, les fusibles qui permettent de définir des paramètres comme la vitesse de téléversement, l'utilisation d'un quartz externe ou encore le verrouillage du SPI (et bien d'autres paramètres fondamentaux pour le microcontrôleur) sont définis par défaut par le constructeur de la puce. Les routines décrites ci-dessus (Compiler uploader.sh et Compiler uploader.bat) s'occupent de modifier automatiquement les valeurs des fusibles. Les valeurs des fusibles que j'ai indiqué dans les routines sont les plus optimisées pour les automates programmable MODULABLE 20 et MODULABLE 32 que j'ai développé (dont les plans de fabrication sont disponibles dans les sections "Fabrications et diverses réalisations" et "Téléchargements" en page d'accueil). Si jamais vous souhaitez programmer avec MODULE sans utiliser les routines que je propose, sachez que cette opération sur les fusibles est à effectuer une seule fois dans deux cas précis, lorsque vous recevez un microcontrôleur neuf n'ayant jamais été programmé, ou lorsque vous récupérez un microcontrôleur qui possiblement dans sa mémoire contient un chargeur d'amorçage (bootloader), ou des paramètres de fusibles inadaptés pour l'architecture de l'automate programmable et le fonctionnement des périphériques.