Very High Speed Integrated Circuit Hardware Description Language/Travail pratique/Projets Hardware pour ATMEL ATMega16

Leçons de niveau 15
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du travail pratique
Projets Hardware pour ATMEL ATMega16
Image logo représentative de la faculté
T.P. no 7
Leçon : Very High Speed Integrated Circuit Hardware Description Language

TP de niveau 15.

Précédent :Autres projets pour ATMEL ATMega8
Suivant :Projets pour ATMEL ATTiny861
En raison de limitations techniques, la typographie souhaitable du titre, « Travail pratique : Projets Hardware pour ATMEL ATMega16
Very High Speed Integrated Circuit Hardware Description Language/Travail pratique/Projets Hardware pour ATMEL ATMega16
 », n'a pu être restituée correctement ci-dessus.


Le titre de ce chapitre est peut être ambigu. Nous allons donc l'expliquer.

Par projet hardware ATMega16, nous voulons dire que nous ferons une extension à la carte FPGA. C'est le FPGA qui contiendra l'ATMega16 comme présenté dans le chapitre correspondant de ce livre. Même si la carte d'extension contient un processeur, nous n'abandonnons donc pas l’idée d’en avoir un aussi dans le FPGA. Cela facilite grandement les tests par exemple.

Nous allons donc mettre dans ce chapitre un ensemble de projets étudiants plus orientés hardware. Nous voulons dire par là nécessitant des cartes d'extensions (aux cartes FPGA utilisées). Ces extensions seront réalisées par les étudiants dans le cadre de leur travail encadré.

Comme d'habitude la rédaction de ce chapitre se fait au fur et à mesure des découvertes des enseignants encadrants. Cela rend peut être parfois la lecture difficile... Si c’est le cas, un peu de retour de la part des lecteurs serait le bienvenu.

Projet 2014/2015 : PMod Processeur pour une liaison série sur la Basys 2[modifier | modifier le wikicode]

Nous allons abandonner le jeu pacman qui est un peu compliqué à programmer pour nos étudiants pour nous lancer maintenant dans des projets avec un peu plus de hardware hors FPGA et du coup un peu moins de programmation (enfin c’est ce que l’on dit avant de commencer !)

Partie cours associée à ce projet : Processeur externe avec Arduino

Objectif du projet[modifier | modifier le wikicode]

L'objectif de ce projet est de réaliser une extension de type PMOD pour notre carte FPGA. Le PMOD utilisera deux connecteurs et sera constitué par un Arduino. Les objectifs sont ainsi de :

  • réaliser une liaison série sur une carte Basys2 qui n'en possède pas à l'aide d'une carte Leonardo ou mieux encore Platine "Pro Micro - 3,3 V/8MHz" de chez Sparkfun. Cette deuxième présente l'avantage d’être directement en 3,3 V comme notre FPGA
  • récupérer les données d'une caméra basse résolution et les traiter à l'aide de l'Arduino. L’idée générale est de chercher à remplacer les capteurs infra-rouges difficiles à mettre en œuvre par une caméra.
  • récupérer les valeurs des 6 convertisseurs analogique/numérique de l'Arduino dans le FPGA par l'intermédiaire d'un protocole SPI. Le FPGA sera esclave SPI et l'Arduino le Maître.

Nous allons décrire avec un peu plus de détail ce qui est cherché avec la caméra. La caméra utilisée est décrite en français chez Lextronic. Nous cherchons à réaliser un traitement d'image simple, puisqu’il s'agit de rechercher une ligne noire sur fond blanc. La résolution sera choisie la plus basse (80x60 en 256 niveaux de gris). Nous allons étudier le protocole série de communication de manière pratique pour voir s'il est possible d'interrompre la restitution d'image au bout d'une dizaine de lignes (voir d'une seule) et de demander une nouvelle image. Le lecteur trouve probablement bizarre d’utiliser une caméra de cette façon, mais nous réalisons ainsi un détecteur de ligne a bon prix par rapport aux détecteurs correspondants du marché.

La caméra sera reliée à l'Arduino par une liaison série (c'est comme cela qu'elle fonctionne) et au FPGA par une liaison SPI. Entre les deux un traitement sera capable de donner des informations sur les lignes :

  • chercher où est le centre de la ligne
  • être capable de donner le type d'intersection rencontrée (pour la résolution d'un labyrinthe comme dans cette vidéo). Ce type sera à choisir entre {tourneG90,tourneD90,T90, Croix90} et sera retourné à l'aide du SPI par un code à choisir.

En final, pour un prix légèrement supérieur à 20 , nous aurons une Basys 2 (pas comptée dans le prix) avec une liaison série USB et avec 6 convertisseurs analogiques/numériques.

Chacun aura remarqué l'objectif robotique mobile de ce projet. Nous avons en effet commencé un chapitre sur la robotique mobile dans ce livre.

Présentation de PMod[modifier | modifier le wikicode]

Depuis quelques années, Digilent propose ses cartes FPGA comme cartes à micro-contrôleurs avec une connectique appelée PMod.

Les PMod sont présentés ici (chez Lextronic).

Déroulement du projet[modifier | modifier le wikicode]

Première étape[modifier | modifier le wikicode]

Faire fonctionner la liaison série. Le montage se fera sur plaque d'essai. Le programme Arduino devra lire la liaison USB série pour l'envoyer vers les deux broches dédiées de l'Arduino, nommées RX et TX. Ces broches seront amenées au FPGA qui devra donc communiquer par la liaison série. Par exemple un hyperterminal sur votre PC devra être capable de lire ce qui est envoyé par le processeur qui tourne dans le FPGA et transmis par l'Arduino au PC.

Une fois le fonctionnement réalisé prendre le schéma de la connectique.

Deuxième étape[modifier | modifier le wikicode]

Faire fonctionner maintenant le SPI. Toujours avec un câblage sur plaque d'essai vous devrez vous arranger pour que l'Arduino commande les afficheurs de la carte FPGA, soit capable de lire les informations sur les 8 interrupteurs (de la carte FPGA) pour les sortir sur les leds. La partie FPGA ne comporte pas de processeur à ce stade.

Une fois le fonctionnement réalisé prendre le schéma de la connectique.

Troisième étape[modifier | modifier le wikicode]

Réaliser un schéma et un board pour les deux fonctions précédentes avec une connectique compatible PMod.

Quatrième étape[modifier | modifier le wikicode]

Cette étape est la plus longue et nécessitera peut être une année supplémentaire pour être menée à bien.

Essayer d’utiliser le protocole série de la caméra. Pour faire les choses correctement il serait bien de mettre au point les sous-programmes d'échange de données avec la caméra à l'aide d'un environnement du type processing pour afficher l'image prise par la caméra. Une fois ce travail réalisé il faut le porter sur l'Arduino et réaliser le programme demandé.

Voir aussi[modifier | modifier le wikicode]

Projet 2014/2015 : PMod Processeur MSP 430 et SPI pour la robotique mobile[modifier | modifier le wikicode]

Objectif du projet[modifier | modifier le wikicode]

Nous allons partir du projet de robotique mobile de l'année précédente et évoluer encore et toujours. L’idée est de résoudre, dans un premier temps, les problèmes que nous avons rencontrés avec les capteurs infra-rouge pour le suivi de ligne. Nous avons eu l’occasion d’utiliser de tels capteurs infra-rouge avec le robot mini-Q (décrit dans un autre livre) muni d'un AVR ATMega328 et avons remarqué que les 5 capteurs n'avaient pas la même sensibilité. Le seuil entre la détection du blanc et du noir était très variable en fonction des capteurs (et donc des différents robots dont nous disposions). Comme Digilent propose un seul potentiomètre pour régler les 4 seuils de détection, nous suspectons fortement que ceci pose problème (avec probablement d'autres facteurs). Quoi qu’il en soit nous allons essayer une autre technique : récupérer directement les données du photo-transistor sur un micro-contrôleur (entrées analogiques) et utiliser le micro-contrôleur pour :

  • faire la mise en forme
  • envoyer ses résultats au FPGA

Présentation du MSP430[modifier | modifier le wikicode]

Nous allons utiliser un MSP430 pour ce projet.

Le MSP430 est un processeur 16 bits présenté rapidement dans un chapitre de ce livre, qui est caractérisé par sa faible consommation. Il existe un kit appelé "Launchpad" à faible prix (environ 10 ).

La conversion analogique/numérique[modifier | modifier le wikicode]

Pour éviter à nos étudiants connaissant l'Arduino de se perdre dans un nouvel environnement, nous allons utiliser un environnement équivalent qui s’appelle energia. Le langage correspondant est identique.

Comme pour l'Arduino, lire une valeur analogique est très simple. Il existe aussi une primitive appelée "analogRead".

Le protocole SPI[modifier | modifier le wikicode]

La programmation SPI, comme présentée dans le projet précédent, est facile. Mais sa mise en œuvre avec un FPGA nécessite une bonne compréhension de ce protocole. Nous ne reviendrons pas sur la présentation de ce protocole (voir projet précédent de ce chapitre).

Pour faire fonctionner le protocole SPI il faut un maître et un esclave. Commençons par un maître réalisé avec le MSP430.

Le maître avec un MSP430[modifier | modifier le wikicode]

Voici un squelette de programme pour commencer à réfléchir :

/*************************
* Carte SD ----- Launchpad
* GND ----------- GND
* +3.3 ---------- Vcc
* CS ------------ P2.0 (8)
* MOSI ---------- P1.7 (15)
* SCK ----------- P1.5 (7)
* MISO ---------- P1.6 (14)
*
**************************/ 
#include <SPI.h>

const int chipSelectPin = 8; // P2.0
char dataToSend=0xA5; 
void setup(){
  pinMode(chipSelectPin, OUTPUT);
  pinMode(15,OUTPUT);
  pinMode(14,INPUT);
// start the SPI library: 
  SPI.begin();
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
    
  delay(100);
}

void loop() {
  char recievedData;
  digitalWrite(chipSelectPin, LOW);  
  recievedData=SPI.transfer(dataToSend); //Send register location
  delay(10);
  digitalWrite(chipSelectPin, HIGH);
  delay(1000);
  dataToSend++;
}

Notre esclave va être présenté maintenant. Il s'agit d'une carte FPGA Nexys3 doté d'un spartan6.

Esclave SPI sur FPGA[modifier | modifier le wikicode]

Ceci a été traité dans une précédente section.

Travail à faire[modifier | modifier le wikicode]

L'exemple qui est donné est à faire fonctionner sur une autre carte : la Basys2 par exemple. Il suffit donc d'adapter le fichier ucf.

La communication donnée en exemple vous permet de lire l'état des boutons de la carte FPGA et les renvoyer sur les leds (en passant par le MSP430).

Ensuite vous allez prévoir la câblage des capteurs infra-rouge de manière provisoire pour faire des tests de lecture de valeurs analogiques sur la carte MSP430.

Réaliser un circuit complet capable d'accueillir le Launchpad et le capteur infra-rouge et le SPI. La valeur envoyée par le SPI doit dépendre de ce qui est perçu par l'infra-rouge.


Voir aussi[modifier | modifier le wikicode]