Carte contrôleur de matrice de LEDs
Cahier des charges
Présentation générale du projet
Il est vous est demandé de réaliser une carte électronique avec des composants de surface pour gérer une matrice de LEDs. La matrice de LEDs peut être monochrome mais sa taille sera au minimum 8x8. Le contrôle de la matrice se fera par un micro-contrôleur ATMega328P à l'aide de registres de décalage. Il faut prévoir des connecteurs pour envoyer les données à votre carte par bus SPI. A chaque réception de paquets de 8 octets l'affichage est mis à jour sur la matrice.
Le programme de gestion de la matrice sera écrit en C pour avr-gcc. Pour la partie SPI, aidez-vous éventuellement des programmes déjà écrits pour le projet "ordonnanceur" de 2014/2015 (Malette Arduino éducative I).
Liste de matériel
Comme le stipule le cahier des charges, les composants suivants doivent être des CMS (composants montés en surface). Voici les divers composants nécessaires à la réalisation du projet :
- Un microcontrôleur Atmega328p qui permettra le contrôle de la carte.
- Une matrice de leds 8x8 pour l'affichage.
- Des barrettes de connexion afin d'y placer notre matrice de leds et la connexion spi.
- Un registre à décalage pour l'envoi des données.
- Un quartz pour établir une fréquence de travail sur la carte.
- Un buffer d'amplification de courant en entrée des leds.
- Des condensateurs pour le montage oscillateur du quartz.
- Des résistances de protection sur les entrées du microcontrôleur.
- Une LED (accompagnée d'un condensateur et d'une résistance) pour s'assurer que le montage soit bien alimenté.
Avancement du Projet
Choix techniques
- Le système fonctionnera sous une tension de 5 V.
- Afin de piloter notre matrice de leds sur la carte, on propose d'insérer des connecteurs (barrettes).
- Pour fournir un signal d'horloge à notre microcontrôleur, afin qu'il puisse générer des signaux à intervalles réguliers, on pourra utiliser un montage oscillateur à quartz d'une fréquence de 16MHz afin d'utiliser les deux entrées du microcontrôleur prévues à cet effet.
- On utilisera un registre à décalage et une sélection de ligne via l'Atmega pour notre matrice.
- On intègrera un buffer à base de montages "Darlington" afin d'effectuer une amplification de courant en entrée de la matrice.
- L'alimentation externe ainsi que la masse s'effectueront via la connexion spi.
- On inclura un connecteur afin de programmer l'Atmega sans passer par un Arduino mais directement par une broche de programmation.
- La création de la schématique ainsi que la réalisation du PCB se feront via le logiciel Eagle.
Première version schématique
La première version schématique comprend le microcontrôleur pilotant les deux registres à décalage. Il présente également le montage "oscillateur à quartz". Il montre aussi l'envoi des données vers les différents ports de la matrice leds. Cependant, les connecteurs spi (entrée et sortie) ne sont pas représentés schématiquement, il faudra insérer les empreintes ou les créer si le montage est validé.
Modifications de la première version schématique
La seconde schématique comprend un autre "reference design" pour l'atmega328p. Un registre à décalage a été supprimé (en effet certaines sorties du microcontrôleur serviront au choix de la ligne de la matrice). Les composants qui n'étaient pas "de surface" le sont désormais. Deux barrettes femelles ont été placées afin de pouvoir y connecter la matrice de leds. Afin de réaliser une amplification de courant en entrée des lignes de la matrice, on placera un buffer qui contient des montages "Darlington". Enfin, un "spi header" a été ajouté. On place également une LED (ainsi qu'une résistance et un condensateur) qui serviront au déboggage de la carte. Si la LED n'est pas allumée, c'est qu'il y des court-circuits. Enfin, un connecteur a été placé afin de pouvoir programmer le microcontrôleur à tout moment.
Création du PCB
Après avoir énuméré les composants nécessaires à la réalisation de la carte et avoir fait validé la schématique, nous pouvons passer à la création du PCB. Il s'agit de construire le routage des composants en dessinant les pistes qui les relient. Dans ce PCB, on place les deux barrettes femelles 1x8 sur une couche (en l'occurence la couche "bottom") afin de réserver une partie pour la matrice. De l'autre côté (la couche "top"), on place tous les autres composants. Finalement, le buffer a également été placé sur la couche "bottom" afin de faciliter le routage. En effet, de trop nombreuses pistes se chevauchaient et il a fallu y remédier. La contrainte de taille ne permet pas beacoup de marge de manoeuvres en terme de routage puisque notre carte électronique fait la taille de l'afficheur, soit 60,3 x 60,3 mm. Le côté rouge correspond à la couche "top", quant au côté bleu, il s'agit de la couche "bottom". En ce qui concerne les paramètres, la largeur des pistes est de 0,3 mm, la largeur des vias est de 0,6 mm et l'espace entre deux pistes vaut 0,3 mm (sauf sur certaines parties comme les sorties de l'Atmega par exemple qui, vues les dimensions du composants, ne permettent pas de tels espaces entre les pistes).
Modification du PCB
Suite aux remarques de l'encadrant, il a fallu modifier le premier PCB. L'empreinte du microcontrôleur a été changée. Le "design rule check" a été effectué et aucune erreur ne subsiste. Le nombre de via a été diminué. Toutes les pistes qui étaient à angle droit ont été supprimées, désormais les angles sont à 45° au maximum. Certains paramètres ont également été changés. De ce fait, nous avons maintenant des largeurs de piste de 0.01 pouce, des tailles de via de 0.02 pouce ainsi que des espacements entre les pistes de 0.006 pouce. D'autre part, une LED a été ajoutée pour vérifier l'alimentation de la carte.
Livrables
Schématique
Voici la schématique de la solution proposée :
Etat : Validé
Liste de composants
Etat : Validé
Carte électronique
Ci-dessous se trouve le PCB de la carte électronique :
Etat : Validé
Programme C
Pour cette partie, il s'agit d'écrire un code permettant de communiquer via un bus SPI. Sur le port SPI input, il s'agira d'envoyer des mots de 8 bits sur notre microcontrôleur pour que celui-ci soit capable d'afficher un message sur la matrice. Le protocole SPI nécessite un maître et un voire plusieurs esclaves. Ceux ci interagissent de la manière suivante :
Le SPI input ainsi que le programmeur sont maîtres de l'atmega. Nous n'utilisons pas ici de SS (slave select) puisqu'aucun maître ne possède plusieurs esclaves. Nous ne nous intéressons pas dans notre cas au SPI output, qui lui sert dans le cas d'un chînage de matrices.
Ci-dessous un code permettant d'initialiser la connectique SPI au sein du microcontrôleur :
Fichiers annexes
Ci-dessous, différents fichiers nécessaires à la réalisation du projet :
- Les fichiers "gerber" pour la gravure de la carte : Média:EC5.zip