IMA4 2019/2020 EC2

De Wiki d'activités IMA
Révision datée du 25 mai 2020 à 02:06 par Ecapronn (discussion | contributions) (Fusion de la demo Virtual Serial avec micropython)

Objectif

Vous allez travailler sur une carte de développement ATXMEGAC3-XPLD. L'idée est d'implanter micro-python sur cette carte.

Vous aurez donc à écrire un programme pour le micro-contrôleur ATXmega384C3 avec la LUFA.

Cherchez l'embryon de portage de micro-python sur AVR, récupérez le répertoire avr8-dummy et intégrez-le à une version récente de micro-python. Fusionnez ce logiciel avec l'exemple VirtualSerial de la LUFA pour avoir une console USB/série avec un interpréteur micro-python sur l'ATXMEGAC3-XPLD.

Matériel reçu

ATXMEGAC3-XPLD

Cahier des charges

Durant cette épreuve, je vais écrire un programme pour le micro-contrôleur ATXmega384C3 avec la LUFA. L'objectif est d'implanter micro-python sur l'ATXMEGAC3-XPLD. Afin de réaliser cet objectif, il faudra procéder en plusieurs étapes :

  • Comprendre et prendre en main la démo Virtual Serial de la bibliothèque LUFA
  • Récupérer le répertoire avr8-dummy et l'intégrer à une version récente de micropython. Une fois ceci réalisé, comprendre et compiler une première fois le main.c du répertoire avr8-dummy
  • Comprendre les deux makefiles utilisés
  • Réaliser la fusion de la démo Virtual Serial de la Lufa avec micropython

Travail réalisé

Micro-python n'implante pas le port série pour les atxmega. Il faut donc le faire avec l'exemple VirtualSerial de la Lufa.

Virtual Serial

Le premier objectif de cette épreuve complémentaire a été de se familiariser avec la bibliothèque Lufa et plus particulièrement avec la demo Virtual Serial.

Le téléchargement de la bibliothèque Lufa s'effectue de la façon suivante :

git clone https://github.com/abcminiuser/lufa

Tout d'abord il a fallu modifier le fichier Descriptor.c avec les valeurs d'ID Vendor et d'ID Product de ma carte.

Descriptor

Ces valeurs sont accessible en utilisant la commande suivante :

dmesg -s 1024
ID Vendor et ID Product

La première chose à faire a été de modifier le Makefile :

Makefile

Les 3 premières lignes correspondent au micro-contrôleur sur la carte. Puis il a fallu changer la fréquence. Ce changement de fréquence a été très important pour résoudre certain problème, lors du lancement du .hex sur l'atmega384c3, lorsque j'utilisais des fréquences trop faible. Puis j'ai créé un point upload dans le makefile afin de lancer les 3 commandes suivantes :

dfu-programmer atxmega384c3 erase
dfu-programmer atxmega384c3 flash VirtualSerial.hex
dfu-programmer atxmega384c3 reset

De manière automatique en utilisant la commande suivante :

make upload

Ensuite, une fois la carte débranché et rebranché, il faut vérifier la présence d'un nouveau port série ACM0 grâce à la commande

ls -l /dev/tty*

Puis j'ai créé une petite fonction Bonton() afin de tester la carte dans minicom

Fonction Bouton

Une fois la fonction créé et le make upload lancé, j'ai lancé minicom afin de voir le résultat

Minicom

Lors de l'appui d'un bouton, nous pouvons voir l'affichage "Bouton n" en fonction du bouton appuyé


Avr8-dummy

Tout d'abord, il a fallu télécharger les répertoires micropython et avr8-dummy

git clone https://github.com/micropython/micropython
git clone https://github.com/slavaza/micropython-avr8/tree/master/ports/avr8-dummy

Puis il a fallu déplacer le répertoire avr8-dummy dans ports à l'intérieur du répertoire micropython


La fonction main dans le répertoire avr8-dummy permet de générer un REPL avec un prompt en micropython

Comme précisé précédemment, Micro-python n'implante pas le port série pour les atxmega. C'est pourquoi nous allons utiliser la demo VirtualSerial de la bibliothèque Lufa utilisé juste avant, afin d'implanter le port série pour l'atxmega.


Fusion de la demo Virtual Serial avec micropython

Afin de réaliser la fusion, il a fallu dans un premier temps pouvoir lancer le makefile de la demo Virtual Serial à partir du makefile de micropython. Le makefile de micropython étant donc le makefile principal que l'on lancera par la suite.

Pour ce faire, on ajoute cela au makefile :

LUFA_PROJECT = ./LUFA/SerialUSB
$(LUFA_PROJECT):
     $(MAKE) -C $(LUFA_PROJECT)