IMA4 2018/2019 SEC4

De Wiki d'activités IMA

Introduction

L'épreuve complémentaire avait donné un certain résultat mais il fallait approfondir pour une utilisation éventuelle en tutorat système IMA4.

Circuit imprimé

Le circuit imprimé a été légérement revu pour supprimer les via sous le micro-contrôleur. Le paquetage QFN a la particularité d'imposer un pad de refroidissement sous le composant.

Circuit 16u4 rex v5 pcb.png

Le fichier Fritzing utilisé pour la conception du PCB est disponible : Media:Circuit 16u4 rex v5 pcb.zip (renommez le fichier en .fzz).

Fabrication

Une version de la manette a été réalisée par soudage manuel. Seuls les vibreurs n'ont pas été installés.

EC4 2018 manette soudee.jpg

A noter que l'ATMega32u4 a été soudé avec un fer à air chaud. Du flux a été utilisé pour tenter de mieux conduire la chaleur sur les pads sous le composant. La soudure a du être consolidée en promenant un fer classique le long des connecteurs du micro-contrôleur (avec là aussi utilisation de flux).

Les autres composants ont été soudé par un fer classique avec une panne pas particulièrement fine.

Configuration de l'ATMega32u4

L'ATMega32u4 doit être programmé par les broches ICSP. Soit avec un programmateur spécifique, soit simplement en utilisant un Arduino type Uno avec un branchement fil à fil entre le connecteur ICSP de l'ATMega328p et celui de l'ATMega32u4. Attention la broche reset de l'ATMega32u4 fait exception et doit être reliée à la sortie 10 de l'Arduino Uno servant de programmateur. Utilisez l'IDE Arduino pour téléverser sur l'Arduino Uno le programme de démonstration ArduinoISP.

Pour jouer, il est possible d'installer un bootloader pour Arduino Leonardo en utilisant l'IDE Arduino. Dans l'IDE Arduino, sélectionnez Leonardo comme plateforme, prenez "Arduino as ISP" comme programmateur et prennez le port série de l'Arduino Uno comme moyen de communication. Il suffit ensuite de cliquer sur "burn bootloader" pour que votre manette soit considérée par l'IDE Arduino comme un Arduino Leonardo.

Cela dit le but est de programmer cette manette en C pour, à terme, utiliser la bibliothèque USB LUFA. Il est donc plus confortable de charger un lanceur permettant de téléverser le programme par USB. De tels lanceurs existent sur le site d'ATMEL : [1]. Le lanceur peut se charger sur l'ATMega32u4 avec la méthode du programmateur Arduino IDE sus-citée et en utilisant l'utilitaire avrdude.

Vous pouvez, par exemple, utiliser la commande :

avrdude -F -v -p atmega32u4 -c stk500v1 -b 19200 -P /dev/ttyACM0 \
        -U flash:w:/home/rex/Downloads/atxmega32a4u_bootloader_usb_dfu_103.hex

Ensuite se pose le problème de repasser en mode DFU une fois qu'un programme a été téléchargé. L'ATMega32u4 est prévu pour repasser en mode DFU si sa broche HWBE (ou PE2) est liée à la masse juste après une réinitialisation (activation de la broche reset). IL se trouve que la broche PE2 de la manette est connectée à la masse via une LED. Du coup un simple appui sur le bouton reset de la manette peut envoyer le micro-contrôleur en mode DFU. Pour cela il faut cependant que le bit 4 (HWBE enable) du registre de configuration étendu soit positionné (fuse extended).

Pour positionner ce bit de configuration, vous pouvez utiliser la commande :

avrdude -F -v -p atmega32u4 -c stk500v1 -b 19200 -P /dev/ttyACM0 -U efuse:w:0xc3:m

Voila, il ne reste plus qu'à télécharger les programmes avec l'utilitaire dfu-programmer.

Programmation

Il n'est pas question de donner ici le code LUFA permettant de transformer la manette en une manette USB standard. Cela fait l'objet du tutorat USB en IMA4. Cela dit vous trouverez en fichier attaché tout le code C permettant de gérer les LED, les boutons et le joystick. Le code est modulaire et peut être repris dans d'autres projets. Pour charger le programme il suffit de lancer make all upload une fois la manette connectée et passée en mode DFU.