Passer de l'Arduino à l'ATMEGA...

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

Cablage pour la programmation

 

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 :

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

 

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *