Comment programmer un AVR/Arduino à l’aide du GPIO Raspberry Pi

Comment programmer un AVR/Arduino à l'aide du GPIO Raspberry Pi

Dans ce tutoriel, je vais vous montrer comment programmer un AVR (ATmega328) et un Arduino UNO en utilisant le GPIO sur le Raspberry Pi.

L’ajout d’un Arduino ou d’un AVR à vos projets vous donnera beaucoup plus de flexibilité.

L’image ci-dessous montre comment connecter un Raspberry Pi 2 et un Arduino UNO. cliquez sur l’image pour l’agrandir

Raspberry Pi AVR BerryIMU

L’image ci-dessous montre comment connecter un ATmega328 (package DIP) à un Raspberry Pi 2. cliquez sur l’image pour l’agrandir

Framboise Pi ATmega328

Installer avrdude

Une fois vos appareils connectés, il est temps d’installer avrude. Avrdude est un programmeur AVR pour Linux, ce qui nous permet d’utiliser les broches GPIO du Raspberry Pi pour programmer un AVR ou un Arduino.
Vous devez d’abord installer quelques prérequis

pi@raspberrypi ~ $ sudo apt-get mise à jour
pi@raspberrypi ~ $ sudo apt-get install bison flex -y

Installez maintenant avrdude à partir des sources ;

pi@raspberrypi ~ $ wget http://download.savannah.gnu.org/releases/avrdude/avrdude-6.2.tar.gz
pi@raspberrypi ~ $ tar xfv avrdude-6.2.tar.gz
pi@raspberrypi ~ $ cd avrdude-6.2/

Activez linuxgpio dans les sources avrdude, créez puis installez ;

pi@raspberrypi avrdude-6.2/~ $ ./configure – -enable-linuxgpio
pi@raspberrypi avrdude-6.2/~ $ make
pi@raspberrypi avrdude-6.2/~ $ sudo make install

Non, nous devons dire à avrdude d’utiliser le GPIO et nous devons lui faire savoir quelles broches GPIO utiliser. Cela peut être fait en éditant le fichier de configuration ;

pi@raspberrypi avrdude-6.2/~ $ sudo nano /usr/local/etc/avrdude.conf

Recherchez « linuxgpio » et vous devriez voir cette section ;

#programmer
#  id    = "linuxgpio";
#  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
#  type  = "linuxgpio";
#  reset = ?;
#  sck   = ?;
#  mosi  = ?;
#  miso  = ?;
#;

Et changez-le en ceci;

programmer
  id    = "linuxgpio";
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
  type  = "linuxgpio";
  reset = 4;
  sck   = 11;
  mosi  = 10;
  miso  = 9;
;

Accéléromètre gyroscope BerryIMU Raspberry Pi

Si tout est correctement connecté, vous devriez maintenant être sur le point de communiquer entre le Raspberry Pi et Arduino/AVR.

Le temps d’un test rapide ;

pi@raspberrypi avrdude-6.2/~ $ sudo avrdude -c linuxgpio -p atmega328p -v

-c Spécifiez le type de programmeur
-p Numéro d’article. Utilisez atmega328p pour l’Arduino UNO
-v Sortie verbeuse
Ci-dessous est d’un test réussi;

avrdude: Version 6.2, compiled on Mar  9 2016 at 11:41:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/usr/local/etc/avrdude.conf"
         User configuration file is "/root/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : unknown
         Using Programmer              : linuxgpio
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : linuxgpio
         Description     : Use the Linux sysfs interface to bitbang GPIO lines
         Pin assignment  : /sys/class/gpio/gpio{n}
           RESET   =  4
           SCK     =  11
           MOSI    =  10
           MISO    =  9

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s


avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: hfuse reads as DE
avrdude: safemode: efuse reads as FD

avrdude: safemode: hfuse reads as DE
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK (E:FD, H:DE, L:FF)

avrdude done.  Thank you.

Il est temps de télécharger notre premier croquis.

Tout d’abord, installez l’IDE Arduino ;

pi@raspberrypi ~ $ sudo apt-get install arduino

Ouvrez l’IDE Arduino, puis nous devons apporter une modification avant de faire quoi que ce soit d’autre. Allez le Déposer menu et sélectionnez Préférences. Dans la boîte de dialogue des préférences, cochez la case « Afficher la sortie détaillée lors de la compilation »Raspberry Pi Arduino IDE

Nous pouvons maintenant charger l’esquisse Blink à partir du dossier des exemples. Cela fera clignoter la LED sur la broche 13.

Raspberry Pi Arduino IDE clignote

Compilez maintenant le croquis.

Comme nous avons activé la sortie détaillée, nous pouvons maintenant voir ce que fait l’IDE lorsqu’il compile et où il place les fichiers.

Le fichier que nous devons télécharger sur l’Arduino/AVR est le .hex fichier, je l’ai souligné dans l’exemple ci-dessous.

Raspberry Pi Arduino IDE verbeux

Nous utiliserons avrdude pour télécharger le fichier ;

pi@raspberrypi ~ $ sudo avrdude -c linuxgpio -p atmega328p -v -U flash:w:/tmp/build1387616020539064052.tmp/Blink.cpp.hex:i

Vous pouvez créer et compiler des croquis sans l’IDE Arduino en utilisant le Arduino Make fichier. Cela vous permet de modifier le code dans votre éditeur de texte préféré et la compilation est beaucoup plus rapide. C’est la méthode que j’utilise.
Vous devez toujours installer l’IDE Arduino comme indiqué ci-dessus.

Installer le makefile Arduino

pi@raspberrypi ~ $ sudo apt-get install arduino-mk

Nous allons maintenant créer un autre exemple de clignotement, mais nous utiliserons l’arduino Makefile pour compiler notre code.

pi@raspberrypi ~ $ mkdir clignoter
pi@raspberrypi ~ $ cd clignoter
pi@raspberrypi blink/~ $ nano blink.ino

Copiez l’intégralité du contenu de l’exemple blink.ino.

Nous devons maintenant créer un Makefile qui référencera le Makefile Arduino.

pi@raspberrypi blink/~ $ nano Makefile

Et ajouter

include /usr/share/arduino/Arduino.mk

Compilez ensuite l’exemple blink.ino

pi@raspberrypi blink/~ $ make

Make va créer un autre dossier appelé build-uno C’est là qu’il place le fichier .hex que nous devons télécharger sur l’Arduino/AVR.
Pour télécharger ce fichier hexadécimal ;

pi@raspberrypi blink/~ $ sudo avrdude -c linuxgpio -p atmega328p -v -U flash:w:build-uno/blink.hex:i

J’ai mis les commandes make et avrdude sur une seule ligne, afin qu’il compile le code, puis qu’il se télécharge tout de suite.

pi@raspberrypi blink/~ $ make && sudo avrdude -c linuxgpio -p atmega328p -v -U flash:w:build-uno/blink.hex:i

Vous remarquerez qu’il s’agit par défaut de la carte UNO. Cela peut être modifié dans le Makefile que nous avons créé. Ici, vous entreriez quelque chose de différent des valeurs par défaut.
Le fichier make ci-dessous serait utilisé pour un ATmega1284p fonctionnant à 20Mhz

MCU = atmega1284p
F_CPU=20000000L
include /usr/share/arduino/Arduino.mk

Lisez /usr/share/arduino/Arduino.mk pour d’autres options qui peuvent être définies. Le dossier est très bien documenté.

Les références

Compiler des croquis Arduino à l’aide de Makefile
Arduino Makefile sur github
Makefile Arduino sur Hackaday.com
Arduino depuis la ligne de commande #1
Arduino depuis la ligne de commande #2