[TUTORIEL] Programmer un Arduino sans utiliser l'IDE Arduino

Les cartes Arduino, les platines

[TUTORIEL] Programmer un Arduino sans utiliser l'IDE Arduino

Message non lude Florian » Mar 30 Mai 2017 09:14

Bonjour à tous,

Aujourd'hui nous allons voir comment programmer une carte Arduino Uno sans utiliser l'IDE Arduino mais une console.
IDE.jpeg
IDE.jpeg (39.97 Kio) Vu 259 fois

Quel est l’intérêt me direz vous?
Premièrement, vous ne souhaitez tout simplement pas développer sous l'IDE Arduino.
Deuxièmement, vous préférez coder sur votre éditeur de texte favoris (NotePad++, gedit...).
Troisièmement, vous savez écrire en C mais pas en Arduino (bien qu’extrêmement similaire ^_^).
Quatrièmement, vous ne souhaitez pas faire comme tout le monde.
...
...
Bref, vous l'aurez compris, on peut continuer longtemps comme ça. Le choix d'utiliser ou non l'IDE Arduino est totalement arbitraire.
Cependant, il est tout de même intéressant de savoir programmer un arduino en langage C puisque ce langage est utilisé mondialement pour la programmation de microcontrôleur et microprocesseur.


=================================================================================================
- MATÉRIEL:
Pourquoi installer l'IDE Arduino alors que nous devons programmer la carte sans l'utiliser?
L'installation de l'IDE Arduino permet d'importer les outils nécessaires pour compiler et téléverser notre futur programme C dans la carte Arduino depuis une console. Ces outils sont avr-gcc et avrdude.
Si vous le souhaitez vous pouvez aussi très bien installer seulement les paquets nécessaire au fonctionnement de avr-gcc et avrdude.


=================================================================================================
- MANIPULATION:
Toute la manipulation a été effectuée sous Linux Mint. Cependant, l'utilisation des commandes avr-gcc et avrdude sont quasiment identiques que ce soit sous Linux ou Windows. De plus, ce tutoriel sera prochainement adapté pour une utilisation sous Windows.

Pour réaliser ce tutoriel, nous allons créer un programme en langage C puis nous allons convertir le fichier ".c" en ".hex" afin de pouvoir le téléverser dans la carte Arduino.

La première étape consiste donc à écrire le programme en langage C. Étant donnée que le but de ce tutoriel n'est pas la réalisation d'un programme en langage C ni même son apprentissage, nous réaliserons un simple programme pour faire blinker/clignoter la LED associée à la broche 13 de la carte Arduino Uno.

=================================================================================================
  • Langage C:
Code: Tout sélectionner
// Importe les bibliothèques.
#include <avr/io.h>   // Entrée/Sortie
#include <util/delay.h>      // Délais.

int main (void)
{
   DDRB |= _BV(DDB5);   // Configure la broche 5 de l'atmega en sortie.

   while(1)
   {   
      // Inverse l'état de la broche toutes les 500ms.
      PINB |= _BV(PORTB5);
      _delay_ms(500);
   }
}

Quelques explications tout de même.
Le code ci-dessus change l'état de la pin 5 (PORTB5) de l'atmega328p toute les 500ms. D'un point de vue carte Arduino Uno, il va s'agir de la broche 13.
Dans mon cas, j'ai enregistré le programme sous le nom TestBlink.c
En effet, en langage C, la carte Arduino Uno est inconnue donc pour configurer ses broches, il faut configurer les bons registres et les bonnes pins de l'atmega328p. Pour trouver les correspondances entre broche carte et pin microcontrôleur, je vous invite à rechercher dans la datsheet de l'Atmega328p et de comparer avec le schéma de la carte Arduino Uno que vous possédez.
Vous pouvez aussi trouver un schéma comme le suivant pour vous aider à faire la correspondance,
Pinout_Arduino_R3.png
Pinout_Arduino_R3.png (150.31 Kio) Vu 259 fois


=================================================================================================
  • Conversion TestBlink.c en TestBlink.hex:
Tout d'abord ouvrir une console puis se rendre dans le répertoire contenant le fichier au format ".c" que vous venez de créer. De mon côté, je l'ai enregistré dans mon répertoire arduino-1.6.8. La ligne de commande pour faire ceci est la suivante,
Arborescence.png
Arborescence.png (8.79 Kio) Vu 259 fois

La première étape consiste à compiler le code source (TestBlink.c) afin d'obtenir un fichier objet (TestBlink.o). Voici la ligne de commande pour y parvenir,
creationFichierobjet.png
creationFichierobjet.png (15.12 Kio) Vu 259 fois

Code:
Code: Tout sélectionner
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o NomDeVotreFichier.o NomDeVotreFichier.c

Les options écrites permettent de configurer la fréquence du CPU et quel est le processeur utilisé.

_______________________________________________________________________________________________________________
La deuxième étape consiste à créer un fichier exécutable (format ELF) à partir du fichier objet créée précédemment. Voici la ligne de commande pour y parvenir,
executable.png
executable.png (13.42 Kio) Vu 259 fois

Code:
Code: Tout sélectionner
avr-gcc -mmcu=atmega328p NomDeVotreFichier.o -o NomDeVotreFichier

L'option "-mmcu" permet de configurer le processeur utilisé. Dans notre cas, il s'agit de l'atmega328p soit m328p.

_______________________________________________________________________________________________________________
La troisième et dernière étape consiste à convertir le fichier exécutable en un fichier interprétable par la carte arduino (.hex). Voici la ligne de commande pour y parvenir,
fichierHex.png
fichierHex.png (12.89 Kio) Vu 259 fois

Code:
Code: Tout sélectionner
avr-objcopy -O ihex -R .eeprom NomdeVotreFichier NomDeVotreFichier.hex

Une fois ces trois étapes réalisées correctement, il ne reste plus qu'à téléverser le programme dans la carte Arduino et le tour est joué.

=================================================================================================
  • Téléversement du programme:
Une seule étape dans cette partie. Il suffit d'écrire la ligne de commande suivante pour téléverser le programme dans notre carte,
Téléversement.png
Téléversement.png (15.86 Kio) Vu 259 fois

Code:
Code: Tout sélectionner
avrdude -D -c arduino -p m328p -P /dev/ttyNomDuPortUsbConnecté -U flash:w:NomDeVotreFichier.hex

Les options renseignées dans cette ligne de commande sont le type de programmateur (arduino), le type de processeur (m328p), le nom du port USB connecté et le "w" de l'option -U permet de dire qu'on souhaite écrire.
En tapant cette ligne de commande vous devriez obtenir un résultat semblable à ceci,
Résultat.png
Résultat.png (100.97 Kio) Vu 259 fois

Normalement, si tout s'est bien déroulé, la LED de la broche 13 de votre carte Arduino Uno devrait clignoter.


=================================================================================================
Petit récapitulatif, après avoir codé et enregistré votre fichier en .c, il faut effectuer les quatre commandes suivante pour programmer votre Arduino,
Bilan.png
Bilan.png (53.23 Kio) Vu 259 fois

Code:
Code: Tout sélectionner
avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o NomDeVotreFichier.o NomDeVotreFichier.c
avr-gcc -mmcu=atmega328p NomDeVotreFichier.o -o NomDeVotreFichier
avr-objcopy -O ihex -R .eeprom NomdeVotreFichier NomDeVotreFichier.hex
avrdude -D -c arduino -p m328p -P /dev/ttyNomDuPortUsbConnecté -U flash:w:NomDeVotreFichier.hex

Voilà, grâce à ces 4 lignes de commandes vous pouvez développer en langage C sous n'importe quel éditeur de texte et programmer votre carte Arduino.
Florian
 
Messages: 75
Inscription: Mer 24 Juil 2013 17:36

Retourner vers Arduino

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité