Le côté rapide et pratique de l’Arduino n’est plus à démontrer mais une fois le prototype réalisé, on souhaite souvent passer à une réalisation définitive (avec un circuit imprimé dédié). En plus d’un rendu plus définitif cette solution est aussi plus économique (une Arduino coûte une dizaine d’euros alors qu’un ATMEGA328 seul ne coûte que 2 €).
Matériel nécessaire
Le programmateur meilleur marché que l’on trouve sur eBay est un clone de l’USBasp pour 2€. Il est supporté par le logiciel Arduino il faudra simplement ajouter quelques fichiers dans le répertoire d’installation d’Arduino.
Il est aussi possible d’utiliser une carte Arduino comme programmateur mais je trouve cette solution un peu plus lourde (il faut enlever l’ATMEGA328 de la carte pour la programmation, manipulation qui peut être délicate).
Préparation
Modification du programmateur
Sur l’USBasp il faut commencer par souder des picots sur JP3 s’ils n’ont pas été installés d’usine (ce qui était le cas sur le mien). JP3 impose l’horloge lente qui est (normalement) nécessaire pour programmer les AVR en sortie d’usine, il pourra être enlevé une fois l’ATMEL mis à jour avec le bootloader Arduino.
Installation et configuration du logiciel Arduino
La dernière version d’Arduino est disponible sur le site officiel. Pour linux c’est une archive au format tar.xv
. En super utilisateur on l’extrait dans le répertoire /opt
(ou un autre, selon vos habitudes). La commande desktop-file-install arduino.desktop
permet ensuite d’avoir Arduino dans les entrées du menu de démarrage.
Lancer une fois l’application pour définir le répertoire de l’utilisateur. Fermer ensuite l’application. Dans le répertoire de l’utilisateur (par exemple ~/Arduino
) créer un répertoire hardware
et y copier le contenu de l’archive présente sur la page dédiée.
Modification du 28/02/2016
La ligne atmega328bb.upload.protocol=arduino
doit être commentée (en plaçant un #
devant), sinon le logiciel ignore le programmateur USBasp (voir ci-dessous).
Premier programme
Configuration
Dans le menu Outils, deux éléments sont à configurer :
- Type de carte : choisir ATmega328 on a breadboard (8 MHz internal clock)
- Programmateur : choisir USBasp
Câblage
Le câblage est assez simple, les alimentations et les fils de programmation sont câble sur une plaque d’essai. Le microcontrôleur sera utilisé en mode horloge interne à 8 MHz, donc pas besoin de câbler un quartz.
Pour vérifier que tout fonctionne bien on câble en plus une LED sur la broche 19 (qui correspond à la sortie digitale 13 de l’Arduino). La LED est protégée par une résistance de $$470\ \Omega$$ qui sort du tiroir sans calcul (les plus rigoureux vérifieront avec les caractéristiques de la LED utilisée).
Programmation
Pour commencer il faut programmer le firmware Arduino dans l’ATMEGA. Cette opération ne sera faite qu’une seule fois. Dans le menu Outils l’entrée Graver la séquence d’initialisation permet de télécharger le firmware.
Le programme Blink
(présent dans Fichier, Exemples, 01. Basics) permet de faire clignoter une LED branchée sur la sortie digitale 13. Pour l’envoyer dans l’ATMEGA il faut aller dans le menu Croquis puis Téléverser avec un programmateur.
Si tout c’est bien passé, la LED doit clignoter. Une LED qui clignote ce peut être très rassurant, c’est que tout est OK.
Problème possible
Quand j’ai commandé mes composants, je n’ai pas fait attention à la différence entre les ATMEGA328-PU et les ATMEGA328P-PU. L’Arduino est équipée d’un 328P qui est reconnu par le programmateur avec la signature 1E 95 0F
. Le 328 a quand à lui la signature 1E 95 14
. Bilan de l’opération les erreurs suivantes apparaissent lors de la programmation :
avrdude: Device signature = 0x1e9514 avrdude: Expected signature for ATmega328P is 1E 95 0F Double check chip, or use -F to override this check.
Les 2 circuits sont extrêmement proches, la seule différence est le mode basse consommation du 328P. L’astuce consiste à faire passer le 328 pour un 328P en modifiant le fichier de déclaration. Dans le répertoire /opt/arduino/hardware/tools/avr/etc
on édite le fichier avrdude.conf
(avant faire une sauvegarde cp ardude.conf avrdude.conf.old
au cas où…). Une recherche de la chaîne 0x1e 0x95 0x0F
permet de trouver la ligne à modifier, on y remplace le 0x1e 0x95 0x0F
par 0x1e 0x95 0x14
. Pour programmer des Arduino « normale » il faudra remettre le fichier à ses valeurs initiales (d’où la copie de sauvegarde).
Bibliographie
- Présentation de l’USBasp
- Arduino sur une platine d’essai
- Les différences entre le 328 et le 328P
- Câblage de l’ATMEGA328 avec le firmware Arduino