Programmation avec Atmel Studio

Pour programmer le PRismino avec Atmel Studio 6 il faut commencer par le télécharger (lien direct vers l’executable).

Il y a plusieurs méthodes pour programmer avec Atmel Studio, il existe un plug-in officiel pour Arduino ce qui revient à remplacer Arduino IDE par Atmel Studio, c’est la méthode la plus simple, mais pas forcement la plus interessante. Pour programmer en C/C++ ou Assembler il faut passer par une méthode plus compliqué.

Installation avec le plug-in officiel pour Arduino

  1. Aller dans ToolsExtension Manager
  2. Installer Arduino Ide for Atmel Studio, utiliser un compte de Bugmenot pour passer l’étape d’inscription
  3. Aller dans FileNewArduino Project
  4. Entrer le nom du programme
  5. Sélectionner le type de microcontrôleur dans le toolbar (Arduino Leonardo)
  6. Sélectionner le bon port COM dans le toolbar
  7. Compiler le programme avec F7 ou en allant dans BuildBuild Solution
  8. Sélectionner ProjectUpload Last Arduino Build

Installation avec Avrdude

L’outil qui permet d’envoyer le code vers le microcontrôleur s’appelle Avrdude, il est utilisable en ligne de commande et Atmel Studio permet de lancer ces commandes. I’idée est d’installer Arduino qui vient avec Avrdude et n’utiliser que Avrdude.

Avec cette méthode c’est un peu plus compliqué de programmer le microcontrôleur, mais il est possible de programmer en pure C/C++/Assembler sans les dépendances d’Arduino qui rajoute des couches un peu superflues parfois.

Le plus important est de trouver le bon port COM, pour cela appuyer sur le bouton reset du PRismino et regarder dans Computer Management sous quel port COM il se connecte.

  1. Installer Arduino IDE
  2. Aller dans ToolsExternal Tools
  3. Entrer le titre de l’outil: PRismino Embedded USB programmer
  4. Pour la commande (remplacer par le répertoire d’Arduino IDE):
    C:\arduino-1.0.5\hardware\tools\avr\bin\avrdude.exe
  5. Pour les arguments utiliser:
    -C »C:\arduino-1.0.5\hardware\tools\avr\etc\avrdude.conf » -p m32u4 -c avr109 -P COM12 -b 57600 -U flash:w: »$(ProjectDir)Debug\$(ItemFileName).hex »:i
  6. Cocher Use output window

Pour ajouer un bouton de cet outil (raccourci) dans le toolbar d’Atmel Studio:

  1. Aller dans ToolsCustomize
  2. Commands tab
  3. Toolbar
  4. Add command button
  5. ToolsExternal Command 1
  6. Close

Un bouton nommé « PRismino Embedded USB programmer » devrait apparaitre dans le toolbar.

Programmation

La programmation avec cette méthode est un peu plus compliqué comme mentionné avant, en effet une fois que le PRismino reçoit la commande de reset il se déconnecte de l’ordinateur et se reconnecte sous un autre port COM. Par exemple si le PRismino est sous COM11 en temps normal alors il se connectera COM12 pendant 4 à 5 secondes après que la commande de reset soit envoyé, c’est pendant ce temps qu’il peut être reprogrammé, après il se déconnecte et reconnecte sous le COM11.

Programme C/C++
  1. FileNewProject
  2. Sélectionner C/C++ (c’est pas dans une des sous-catégories)
  3. GCC C Executable Project ou GCC C++ Executable Project
  4. ATmega32U4
  5. Ecrire un programme, voir le programme d’exemple plus bas
  6. Build → Build Solution (ou F7)
  7. Appuyer sur le bouton reset PRismino
  8. Attendre 4 seconds à peu près pour que le PRsimino se connecte sur le port COM de programmation
  9. Appuyper sur le bouton « PRismino Embedded USB programmer » dans le toolbar
Programme Assembler
  1. FileNewProject
  2. Assembler
  3. ATmega32U4
  4. Ecrire un programme en Assembler, par exemple: RJMP PC
  5. BuildBuild Solution (ou F7)
  6. Appuyer sur le bouton reset PRismino
  7. Attendre 4 seconds à peu près pour que le PRsimino se connecte sur le port COM de programmation
  8. Appuyper sur le bouton « PRismino Embedded USB programmer » dans le toolbar
Programme d’exemple

Ce programme en C fait clignoter la LED du PRismino toutes les 500ms:

 #include <avr/io.h> #define F_CPU 16000000U #include <util/delay.h> int main(void) {     DDRC |= (1 << 7);     while(1)     {         PORTC |= (1 << 7);         _delay_ms(500);         PORTC &= ~(1 << 7);         _delay_ms(500);     } }