Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site https://www.yesik.it !

Comme je l'explique dans l'article Arduino sans Arduino, il n'est pas nécessaire d'avoir une carte Arduino pour utiliser les bibliothèques Arduino. Ne serait-ce que pour des raisons purement financières, utiliser un micro-contrôleur seul se révèle souvent souhaitable: cela nécessite l'achat d'un programmeur externe, mais cette dépense est vite amortie quand vous réalisez de nombreux montages…

En complément de mes précédents articles sur ce sujet, voici de manière synthétique comment utiliser Arduino sur ATmega328P.

Interface ISP

Les micro-contrôleurs de la famille AVR utilisent l'interface SPI pour permettre de faire de la programmation sur site (In Site ProgrammingISP). Ce mode de programmation nécessite un programmeur externe. Il en existe de nombreuses versions avec des fonctionnalités plus ou moins évoluées. Dans sa version de base, c'est un petit dispositif électronique qui est relié d'une part au port USB de votre ordinateur, et de l'autre au micro-contrôleur cible, via l'interface SPI.

Concrètement l'interface SPI est composée de trois lignes de communication: MISO, MOSI et SCK. La ligne supplémentaire /RESET (formellement /SS pour Slave Select) sert à commuter le circuit cible en mode esclave – ce qui correspond pour le micro-contrôleur au mode programmation. En plus, le programmeur peut généralement fournir la tension d'alimentation pour le micro-contrôleur (Vcc). Que vous utilisiez l'alimentation fournie par le programmeur ou pas, il est impératif d'interconnecter les masses (GND).

Désignation Prix approximatif (HT)
Cible Microcontrôleur ATmega328P en boitier DIP
disponible chez digikey.com
$3.16
Programmeur USB ISP Programmer
disponible sur e-bay
$3.88

ATmega328P

L'ATmega328P est le micro-contrôleur de la famille AVR qui équipe certains des modèles les plus populaires de cartes Arduino. Il se caractérise notamment par ses nombreuses broches d'entrées/sorties et par sa mémoire (32 KB de flash, 1KB d'EEPROM et 2KB de RAM).

Pour utiliser ce micro-contrôleur sur un montage, vous devrez l'alimenter avec une une source de tension régulée. Les tensions de 5V ou 3.3V sont populaires, mais l'ATmega328P autorise d'autres tensions d’alimentation. Ceci dit, ces détails techniques sortent du cadre strict de cet article. Je les évoque juste pour mémoire et pour vous rappeler de prévoir un petit plus dans votre budget pour les composants additionnels.

Pour la programmation, côté micro-contrôleur, les lignes de l'interface SPI sont reliées comme indiqué dans l'illustration ci-dessous. Concernant l'ATmega328P, n'oubliez par de relier les deux broches VCC et AVCC à la tension d'alimentation. Par contre, les deux masses disponibles (GND) étant reliées entre-elles en interne, il n'est pas indispensable de les interconnecter.

ATmega328P-ISP.png

Interface ISP SPI de l'ATmega328P — L'interface SPI permet de programmer sur site (In Site Programming) le micro-contrôleur ATmega328P.



Le programmeur

Parmi les différents programmeurs disponibles, vous pouvez porter votre choix sur un USBasp ou un de ses clones bon marché: pour quelques euros à peines, ils vous procureront toute satisfaction! Si vous avez fait ce choix, votre programmeur doit disposer d'un connecteur 10 positions dont le brochage est illustré ci-dessous:

USBasp-clone-ISP.png

Interface SPI sur l'USBasp et ses clones — L'USBasp et ses différents clones utilisent un connecteur 2×5 broches qui reprend à la fois les lignes de l'interface SPI (MISO, MOSI et SCK), ainsi qu'une source de tension pour alimenter le micro-contrôleur à programmer (Vcc), et une référence de masse (GDN). La ligne /RESET (formellement /SS) sert à activer la cible.


Attention:

Lorsque vous reliez le micro-contrôleur à son programmeur, vous ne devez pas croiser les lignes: MISO est relié à MISO, MOSI à MOSI, etc.

Configurer l'IDE Arduino

Les version récentes de l'IDE Arduino permettent d'utiliser un programmeur externe pour télécharger un programme. Par contre, il n'y a pas en standard d'option dans la liste des cartes pour programmer directement un micro-contrôleur ATmega328P nu. Une petite étape de configuration est donc à prévoir avant la première utilisation.

La configuration va consister à ajouter un nouveau dossier dans votre répertoire sketchbook/hardware et a y ajouter la description de votre matériel cible. À savoir ici, un ATmega328P nu dans sa configuration d'usine.

Piège:

Vous devez avoir déjà lancé au moins une fois l'IDE pour que le répertoire sketchbook existe.

Si vous ne savez pas où se trouve votre dossier skechbook, vous pouvez en vérifier l'emplacement à partir du dialogue des préférences de l'IDE Arduino (menu File > Preferences):

Arduino préférences.png

Les préférences de l'IDE Arduino — Vous pouvez accéder aux préférences de l'IDE Arduino par le menu File > Preferences. Parmi les différentes préférences que vous pouvez modifier, vous trouverez l'emplacement du dossier sketchbook – c'est à dire le dossier où seront notamment stocké vos programmes.


Une fois le dossier localisé, ouvrez – ou créez – le fichier sketchbook/hardware/boards.txt pour y ajouter les lignes suivantes:

# ATmega328p "nu" - Configuration d'usine - Programmeur USBasp (ou clone)
atmega328p.name=ATmega328p/Factory defaults - USBasp
atmega328p.programmer=arduino:usbasp
atmega328p.upload.maximum_size=32768
atmega328p.upload.speed=9600
atmega328p.upload.disable_flushing=false
atmega328p.upload.dont_erase=false
atmega328p.build.mcu=atmega328p
atmega328p.build.f_cpu=1000000L
atmega328p.build.core=arduino:arduino
atmega328p.build.variant=arduino:standard

La sémantique du fichier boards.txt a la mauvaise habitude de changer d'une version d'Arduino à l'autre!

Ici, pour spécifier le programmeur à utiliser, j'utilise la ligne de configuration suivante:

atmega328p.programmer=arduino:usbasp

C'est la syntaxe utilisée avec (à partir ?) d'Arduino 1.0.1. D'anciennes versions utiliseraient plutôt:

atmega328p.upload.protocol=arduino:usbasp

Au prochain lancement de l'IDE Arduino, la nouvelle option relative à la cible ATmage328P nue sera disponible dans le menu Tools > Board.

Arduino ATmega328P naked board.png

Une pseudo-carte pour un ATmega328P nu — Après avoir modifié le fichier boards.txt pour y ajouter les caractéristiques d'un ATmega328P dans sa configuration d'usine, cette nouvelle option sera disponible dans le menu boards à chaque lancement de l'IDE Arduino.

En la choisissant, vous pourrez dorénavant développer pour votre AVR exactement comme s'il s'agissait d'une carte Arduino. La fréquence d'horloge d'usine (1MHz) de la cible sera prise en compte par les bibliothèques. Et le programmeur désigné sera utilisé pour télécharger lorsque vous cliquerez sur le bouton upload.



Programmer pour un ATmega328P nu

Pour tester la programmation d'un ATmega328P, j'ai fait le montage basique et classique qui consiste à faire clignoter une LED reliée aux broches du micro-contrôleur. Ici, j'ai connecté l'anode de la LED à la broche 5 du micro-contrôleur, et la cathode de la LED à la broche 6 via une résistance de 220Ω. Comme vous le voyez dans la table de correspondance ci-dessous, ces deux broches correspondent respectivement aux broches Arduino digital pin 3 et digital pin 4.

ATmega328P vs Arduino pin mapping.png

Correspondance entre les broches de l'ATmega328 et celles de l'Arduino.


Muni de ces informations, j'ai tapé le code suivant dans dans l'IDE Arduino:

/*
  BlinkPP
  Turns on an LED on for one second, then off for one second,
  repeatedly.
 
  This example code is in the public domain.
 */
 
const int LED_A = 3;  // LED cathode
const int LED_C = 4;  // LED anode
 
void setup() {                
  pinMode(LED_A, OUTPUT);     
  pinMode(LED_C, OUTPUT);
  digitalWrite(LED_C, LOW); // Set cathode to GND 
}
 
void loop() {
  digitalWrite(LED_A, HIGH); // Set anode to VCC: LED ON
  delay(1000);
  digitalWrite(LED_A, LOW);  // Set anode to GND: LED OFF
  delay(1000);
}

Télécharger le programme vers la cible

Une fois le programme saisi, et après avoir sélectionné comme carte cible l'ATmega328P nu, vous pourrez télécharger le programme exactement comme d'habitude, c'est à dire en utilisant le bouton Upload de l'IDE (ou en passant par le menu File > Upload:

Arduino Upload (button).png

Télécharger un programme avec l'IDE Arduino — Le bouton Upload de l'IDE Arduino permet de compiler et télécharger un programme vers la cible.


Remarque:

Si vous préférez, vous pouvez également utiliser le menu File > Upload using programmer pour télécharger votre programme. L'option USBasp devrait être présente en standard:

Arduino USBasp programmer.png

Choix du programmeur — Dans le menu Tools > Programmer choisissez le modèle de programmeur qui correspond à celui que vous utilisez. Dans le cas d'un programmeur USB bon marché, il s'agira sans doute d'un clone USBasp.


Cette option a aussi l'avantage de permettre le téléchargement sans avoir à configurer le modèle de programmeur dans le fichier boards.txt.

Une fois le téléchargement terminé, vous devriez voir clignoter la LED. Vous pouvez vous amuser à essayer d'autre ports en vous basant sur la correspondance illustrée plus haut entre les broches du micro-contrôleur et les broches Arduino (digital pin). En cas d'échec, commencez par vérifier que votre programmeur est bien relié à la cible. Vous pouvez aussi examiner les messages de téléchargement que vous trouverez en bas de la fenêtre de l'IDE: ceux-ci peuvent contenir des informations utiles pour déterminer le problème – ou pour demander de l'aide sur le forum Arduino!