IMA4 2018/2019 SEC4 : Différence entre versions

De Wiki d'activités IMA
(Circuit imprimé)
(Programmation)
 
(19 révisions intermédiaires par le même utilisateur non affichées)
Ligne 9 : Ligne 9 :
 
[[Fichier:Circuit 16u4 rex v5 pcb.png|thumb|center|400px]]
 
[[Fichier:Circuit 16u4 rex v5 pcb.png|thumb|center|400px]]
  
Le fichier Fritzing utilisé pour la conception du PCB est disponible : [[Media:Circuit 16u4 rex v5 pcb.fzz]]
+
Le fichier Fritzing utilisé pour la conception du PCB est disponible : [[Media:Circuit 16u4 rex v5 pcb.zip]] (renommez le fichier en <code>.fzz</code>).
 +
 
 +
= Fabrication =
 +
 
 +
Une version de la manette a été réalisée par soudage manuel. Seuls les vibreurs n'ont pas été installés.
 +
 
 +
[[Fichier:EC4_2018_manette_soudee.jpg|thumb|center|400px]]
 +
 
 +
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.
 +
 
 +
= Version avec accéléromètre =
 +
 
 +
Une seconde version de la carte a été conçue.
 +
 
 +
Une modification mineure est l'ajout d'un pad par vibreur pour pouvoir les souder.
 +
 
 +
La modification principale concerne l'ajout d'un accéléromètre. L'accéléromètre étant alimenté en 3,3V, un régulateur a du être ajouté. Comme il ne restait plus d'entrée analogique, les axes X et Y de l'accéléromètre sont mis sur les mêmes entrées que les boutons "gauche" et "haut". La sélection s'opère par un double interrupteur.
 +
 
 +
Le fichier Fritzing est disponible : [[Media:Circuit 16u4 rex v7 pcb.zip]] (renommez le fichier en <code>.fzz</code>).
 +
 
 +
Une représentation du PCB :
 +
 
 +
[[Fichier:Circuit 16u4 rex v7 pcb.png|thumb|center|400px|link=Media:Circuit 16u4 rex v7 pcb.svg]]
 +
 
 +
Le schéma électrique :
 +
 
 +
[[Fichier:Circuit 16u4 rex v7 schema.png|thumb|center|400px|link=Media:Circuit 16u4 rex v7 schema.svg]]
 +
 
 +
La liste des composants : [[Media:Circuit_16u4_rex_v7_bom.ods]].
 +
 
 +
= 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 <code>ArduinoISP</code>.
 +
 
 +
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 : [http://www.atmel.com/Images/megaUSB_DFU_Bootloaders.zip]. Le lanceur peut se charger sur l'ATMega32u4 avec la méthode du programmateur Arduino IDE sus-citée et en utilisant l'utilitaire <code>avrdude</code>.
 +
 
 +
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 <code>reset</code>). 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 <code>reset</code> 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 <code>dfu-programmer</code>.
 +
 
 +
= 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 <code>make all upload</code> une fois la manette connectée et passée en mode DFU. A noter que pour que les pins PF0 et PF1 fonctionnent en tant qu'E/S standards, il faut désactiver la fonctionnalité JTAG avec la commande <code>MCUCR |= (1<<JTD)</code> (à exécuter deux fois à la suite).
 +
 
 +
Projet Manette : [[Media:EC4 2018 Pad32u4.zip]]

Version actuelle datée du 1 décembre 2022 à 10:21

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.

Version avec accéléromètre

Une seconde version de la carte a été conçue.

Une modification mineure est l'ajout d'un pad par vibreur pour pouvoir les souder.

La modification principale concerne l'ajout d'un accéléromètre. L'accéléromètre étant alimenté en 3,3V, un régulateur a du être ajouté. Comme il ne restait plus d'entrée analogique, les axes X et Y de l'accéléromètre sont mis sur les mêmes entrées que les boutons "gauche" et "haut". La sélection s'opère par un double interrupteur.

Le fichier Fritzing est disponible : Media:Circuit 16u4 rex v7 pcb.zip (renommez le fichier en .fzz).

Une représentation du PCB :

Circuit 16u4 rex v7 pcb.png

Le schéma électrique :

Circuit 16u4 rex v7 schema.png

La liste des composants : Media:Circuit_16u4_rex_v7_bom.ods.

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. A noter que pour que les pins PF0 et PF1 fonctionnent en tant qu'E/S standards, il faut désactiver la fonctionnalité JTAG avec la commande MCUCR |= (1<<JTD) (à exécuter deux fois à la suite).

Projet Manette : Media:EC4 2018 Pad32u4.zip