[arduino] SARduino: ATMega 1284p + bootloader

La Sarduino est un clone d’Arduino munit d’un micro-controleur plus puissant et d’une surface d’expérimentation pastillée. Elle est designée par Andrew Schamp de Space Age Robotic, et le pcb est en vente pour 5$ sur le site de Space Age
On peut y implanter un micro-controleur ATMega644p (comme pour les sanguinos) ou mieux un 1284p.

Cet article rassemble quelques infos pour le montage d’une Sarduino, et la gravure du bootloader.

sarduino644-v10-front-smallsarduino_topsarduino_biais

La SARduino, n’est pas une carte aussi facile à prendre en main qu’une Uno ou une Mega.
D’abord on ne reçoit que le pcb (la plaque verte) et il faut commander et souder les composants dessus.
Ensuite, elle ne possède pas de “ barrette femelle” (header) qui permette d’enficher des cables pour prototyper… On soude tout sur cette carte ou via des barrettes préalablement soudées…
C’est un peu moins sexy, mais bon.
À vrai dire, pour un certain projet, je cherchais des cartes Xduino à pas cher et un peu plus balaises que les Uno (la “Due” se faisant attendre).
Et puis je suis tombé un peu par hasard sur cette carte et ce µcontroleur bourré à craqué de RAM et d’EEPROM.

En achetant les SARduinos et les composants par 3, on fait descendre le coût à l’unité (le transport pesant un peu sur les courses).
52€ de composants (Mouser.com) + 3€30 de socket DIL 40 pins (ebay.fr) + 12€35 de pcb (spaceAgeRobotic.com), soit 22€55 par carte.
Aux vues du prix d’une arduino Mega, à pas loin de 50€… je suis pas mécontent de mon tarif et de la bête…
Bref…

On peut voir dans le tableau qui suit, les avantages de l’ATMega 1284p. J’en retiens principalement:
- un prix faible (pas négligeable) comparativement au 2560 (qui équipe les Arduinos Mega) ou au 328 (qui équipe les Arduinos Uno)
- bcp de RAM, et c’est ce qui manque généralement.

Dans mon cas précis, je recherchais un microcontroleur disposant de nettement plus de RAM qu’une Uno (2Ko), pour manipuler des chaines de caractères…
Et pas trop cher… (Je bosse dans l’éducation Nationale comme contractuel et j’ai charge de famille ;) )
Puis les cartes pour prototyper, c’est bien… pour prototyper, pas pour laisser dans une boite comme projet fini.

328P 1284P 2560P
Prix $2.99 $4.66 $11.28
RAM 2k 16k 8k
Flash 32k 128k 256k
EEPROM 1k 4k 4k
UART 1 2 4
IO Pins 23 32 86
Interrupts 2 3 8
Analog Inputs 6 8 16

Sur le site d’Andrew,on trouve la liste des composants à souder sur le pcb, il ya même un caddy préparé chez Mouser, un gros revendeur de composants situé aux États-Unis…

Commander aux States, semble un peu dispendieux, mais en y regardant de plus près (niveau brouzoufs s’entend), les frais de ports sont moins importants (20$) que chez Farnell (30€), le gros revendeur européen, et le prix des µC est 2 ou 3 fois moindre!
Conclusion: Farnell marge comme un goret, allez chez Mouser.
Bref…

La liste des composants à souder est courte, c’est ce que j’appellerai une Arduino minimaliste avec une cependant un 7805, une diode et des condos, ce qui permet d’alimenter la carte avec un transfo entre 7 et 15V.
Une fois le montage effectué, et le µC enfiché dans le berceau… Il reste à y graver un bootloader Arduino… Et c’est là que ça se gatte.

Comment c’est qu’on fait? Et c’est quoi un bootloader?

Sans rentrer dans les détails, d’abord parce que je les connais pas et que ça n’a qu’une valeur indicative pour un pinpin comme moi.
On peut quand même dire que le bootloader, c’est L’EFI ou le Bios d’un micro-controleur. Ce bootloader permet d’avoir la séquence d’attente de chargement d’un nouveau “sketch” dans l’IDE Arduino, ou passé le délai, de lancer le programme stocké dans la Flash du µc.
Bref sans ce machin, ben ça marche pas!

Pour graver le bootloader, il y a plusieurs solutions.

La plus simple consiste a posséder un programmateur ISP genre l’AVRISP mkII d’Atmel (le fabriquant des ATmega/tiny).
avr isp mkII

Le site ladyAda, en propose un, open source, du nom de USBTinyISP et un kit pour 22$ (hors frais de port).
usb tiny isp de chez LadyAda

Il y a quelques temps, je me suis équipé de ce petit programmateur (pour jouer avec des ATtinys avec l’IDE Arduino), un clone en fait, acheté sur Ebay à Hong-Kong (une dizaine d’euros).
clone_usbtinyisp

Normalement c’est simple

, on branche le cable dans la broche ICSP de la carte (c’est la prise à 6 broches sur la Sarduino), on sélectionne dans le menu de l’IDE Arduino le programmateur et on « Burn bootloader » dans le menu “Outils” (“graver la séquence d’initialisation” dans la dernière version de l’IDE en Français).

Ouais facile!

Sauf que ce petit programmateur pas cher ne sait pas graver un bootloader sur des µC disposant de plus de 64Ko de Flash… Aïe!
Comment je sais ça?
Ben, en essayant et en cherchant pourquoi ça marchait pas!
La réponse je l’ai trouvé chez ManiacBug, sur le github qui contient un package pour que le µc soit reconnu par, et pour pouvoir compiler les Sketchs avec l’IDE Arduino.

Donc…
Donc restait la seconde solution (un peu plus salissante) d’utiliser une Arduino comme programmateur ISP. Il y a plein de tutos et de ressources en ligne.
Il faut juste uploader sur l’arduino un sketch spécifique et brancher quelques cables sur certaines pins de la carte à graver.

Quand on le dit, c’est facile, sauf que les schémas s’appliquent à une seconde Arduino munie d’un at328, pas d’un µc éxotique.
La solution, je l’ai encore trouvée chez ManiacBug et dans la doc du µc chez Atmel.

©maniacbug

©maniacbug

schema_burn_an_optiboot_on_sarduinole cablage de l'arduino comme programmateur isp

Ensuite pour graver le bootloader, il faut désigner le programmateur dans la liste (cette fois, “Arduino as ISP”) et “graver la séquence”.

capture-de28099ecran-2012-07-08-a-150315

Et si tout est bien branché ça marche!
Ma bonne vieille Arduino usb de première génération (numérotée 484) a fait le boulot sans frémir.

Pour vérifier que ça fonctionne, il suffit de brancher la SARduino avec un cable convertisseur TTL-USB (vendu cher par FTDI mais super pratique pour programmer une Lilypad par ex.)
le cable qui vaut un bras
Il suffit de repérer la Masse (GND) en noir et +5V (VCC) en rouge pour brancher sur la SARduino (le GND et le 5V sont lisibles sur le port 6 pins à côté de l’ICSP de la carte) et d’uploader (téléverser) le Sketch (croquis) « Blink » (en modifiant le port de la led peut-être).
Et comme je voulais pas souder de leds sur la partie pastillée, ni souder de barrette (Header), j’ai testé au voltmètre: le fil noir sur un “GND” (y en a plein la carte) et le Rouge sur le trou avec le bon numéro…
Et si le courant varie de 0 à 5v toutes les secondes (sketch par défaut), c’est que ça marche!

Voilu.

article suivant:
Brancher une interface I2C sur une SARduino (genre le module LCD I2C 2×16 de chez DFRobot)


À propos de cet article