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

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

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

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/8 MHz" 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

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
#### Première étape

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

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

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

#### Quatrième étape

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é.