« SE2a4 USB 2023/2024 » : différence entre les versions
Ligne 11 : | Ligne 11 : | ||
= Programmation de l'ATmega8u2 = | = Programmation de l'ATmega8u2 = | ||
Récupérez le code de la bibliothèque LUFA. Créez un sous-répertoire <code>SE2a4</code> dans cette bibliothèque et installez-y la démonstration minimale [[Media:2023-SE2a4-Minimal.zip]]. | |||
Adaptez le <code>makefile</code> de la démonstration à votre microcontrôleur et carte cible. Ajustez aussi le chemin de la bibliothèque LUFA en restant en chemin relatif. | |||
== Définition du périphérique USB == | |||
Votre périphérique USB est un capteur et un actionneur : il faut donc prévoir un point d'accès entrant et un point d'accès sortant. Des points d'accès de type interruption sont parfaitement adaptés ici. Pour informer le contrôleur USB de la présence de ces points d'accès vous devez effectuer les actions ci-dessous. | |||
* Dans le fichier <code>descripteur.h</code> ajouter à la structure <code>USB_Descriptor_Configuration_t</code> un champ interface et deux champs points d'accès. Pour vous aidez dans le non des types à employer pour les champs, regardez le même fichier dans la démonstration LUFA <code>Demos/Device/LowLevel/Keyboard/</code>. | |||
* Dans le fichier <code>descripteur.h</code> décommentez l'union pour donner un numéro à votre interface spécifique. | |||
* Dans le fichier <code>descripteur.h</code> ajoutez des macros pour indiquer les numéros de vos points d'accès ainsi que la taille des données à leur transmettre. Là encore la démonstration <code>Keyboard</code> vous indique comment faire. | |||
* Dans le fichier <code>descripteur.c</code> instanciez la structure définie dans le fichier d'inclusion. Pour vous aider sur les valeurs des champs, regardez le même fichier dans la démonstration <code>Keyboard</code>. N'oubliez pas de mettre à jour le descripteur de configuration. | |||
A ce niveau vous pouvez compiler la démonstration, passer l'ATmega8u2 en mode DFU USB en court-circuitant les broches reset et GND de son connecteur ISP, télécharger la démonstration sur l'ATmega8u2 en utilisant <code>make dfu</code> et vérifier que les descripteurs sont bien reconnus via l'utilitaire <code>lsusb</code>. Concernant l'utilitaire <code>lsusb</code> mettez à profit les options <code>-d</code> et <code>-vvv</code>. | |||
= Programmation de l'ATmega328p = | = Programmation de l'ATmega328p = | ||
= Application PC = | = Application PC = |
Version du 24 octobre 2023 à 17:53
Cahier des charges
Vous devez réaliser un périphérique USB permettant de contrôler le démarrage et l'arrêt d'ecrans de stations de travail. L'idée est de ne pas imposer de modification sur l'écran. Le dispositif est sensé appuyer sur le bouton de l'écran avec un servo-moteur et contrôler l'état de l'écran avec un photo-récepteur.
Pour le tutorat USB il est juste demandé de simuler le dispositif avec un servo-moteur et un photo-récepteur, pour la partie électronique l'ATmega8u2 d'un Arduino Uno Rev3 va être utilisé et la partie mécanique n'est pas demandée. Vous poursuivrez cet exercice au prochain semestre en projet système et réseau. En projet vous aurez à concevoir et réaliser une carte et à réfléchir à la partie mécanique (il y aura bien entendu aussi des aspects système et réseau).
La difficulté avec l'Arduino Uno est que les entrées/sorties de l'ATmega8u2 ne sont pas accessibles hormis l'UART. Vous aurez donc aussi à programmer l'ATmega328p pour accéder au servo-moteur et au photo-récepteur. Il faut aussi prévoir une communication UART entre les deux puces.
Le périphérique USB sera implanté à l'aide de la bibliothèque LUFA sous la forme d'un périphérique spécifique. La gestion du périphérique doit se faire au travers d'une application sur PC utilisant la bibliothèque libusb-1.0
.
Programmation de l'ATmega8u2
Récupérez le code de la bibliothèque LUFA. Créez un sous-répertoire SE2a4
dans cette bibliothèque et installez-y la démonstration minimale Media:2023-SE2a4-Minimal.zip.
Adaptez le makefile
de la démonstration à votre microcontrôleur et carte cible. Ajustez aussi le chemin de la bibliothèque LUFA en restant en chemin relatif.
Définition du périphérique USB
Votre périphérique USB est un capteur et un actionneur : il faut donc prévoir un point d'accès entrant et un point d'accès sortant. Des points d'accès de type interruption sont parfaitement adaptés ici. Pour informer le contrôleur USB de la présence de ces points d'accès vous devez effectuer les actions ci-dessous.
- Dans le fichier
descripteur.h
ajouter à la structureUSB_Descriptor_Configuration_t
un champ interface et deux champs points d'accès. Pour vous aidez dans le non des types à employer pour les champs, regardez le même fichier dans la démonstration LUFADemos/Device/LowLevel/Keyboard/
. - Dans le fichier
descripteur.h
décommentez l'union pour donner un numéro à votre interface spécifique. - Dans le fichier
descripteur.h
ajoutez des macros pour indiquer les numéros de vos points d'accès ainsi que la taille des données à leur transmettre. Là encore la démonstrationKeyboard
vous indique comment faire. - Dans le fichier
descripteur.c
instanciez la structure définie dans le fichier d'inclusion. Pour vous aider sur les valeurs des champs, regardez le même fichier dans la démonstrationKeyboard
. N'oubliez pas de mettre à jour le descripteur de configuration.
A ce niveau vous pouvez compiler la démonstration, passer l'ATmega8u2 en mode DFU USB en court-circuitant les broches reset et GND de son connecteur ISP, télécharger la démonstration sur l'ATmega8u2 en utilisant make dfu
et vérifier que les descripteurs sont bien reconnus via l'utilitaire lsusb
. Concernant l'utilitaire lsusb
mettez à profit les options -d
et -vvv
.