Carte contrôleur de matrice de LEDs

De Wiki d'activités IMA
Révision datée du 1 septembre 2016 à 13:36 par Nwegrzyn (discussion | contributions) (Fichiers annexes)

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 (excepté sur les pads de l'Atmega qui sont trop rapprochés). 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 12 mil, des tailles de via de 24 mil ainsi que des espacements entre les pistes de 12 mil. D'autre part, une LED a été ajoutée pour vérifier l'alimentation de la carte. Les vias sous les composants ont été supprimés et espacés des pads s'ils étaient trop proches.

Livrables

Schématique

Voici la schématique de la solution proposée :

Schématique

Etat : Validé

Liste de composants

Description Fabricant Référence Fabricant Fournisseur Code commande Quantité Prix unitaire HT Lien fournisseur
Microcontrôleur ATMEL ATMEGA328P-AU Farnell 1715486 1 2,74 http://fr.farnell.com/atmel/atmega328p-au/mcu-8bit-atmega-20mhz-tqfp-32/dp/1715486
Afficheur matrice de point 8x8 KINGBRIGHT TC23-11EWA Farnell 2290408 1 6,16 http://fr.farnell.com/kingbright/tc23-11ewa/display-dot-matrix-2-3-8x8-red/dp/2290408
Barrette femelle 1x6 SAMTEC SSM-106-L-SV Farnell 1668257 1 1,98 http://fr.farnell.com/samtec/ssm-106-l-sv/embase-2-54mm-vert-6voies/dp/1668257
Barrette mâle 1x6 SAMTEC TSM-106-02-L-SH-K-TR Farnell 2417064 1 1,01 http://fr.farnell.com/samtec/tsm-106-02-l-sh-k-tr/connecteur-header-2-54mm-1x6/dp/2417064
Barrette femelle 1x8 SAMTEC SSM-108-L-SV Farnell 1668259 2 2,26 http://fr.farnell.com/samtec/ssm-108-l-sv/embase-2-54mm-vert-8voies/dp/1668259
Barrette mâle 2x3 TE CONNECTIVITY 5-146130-2 Farnell 2311147 1 1,1 http://fr.farnell.com/te-connectivity/5-146130-2/connecteur-male-2-54mm-6-voies/dp/2311147
Registre à décalage NXP 74HC595D Farnell 1201269 1 0,469 http://fr.farnell.com/nxp/74hc595d/circuit-logique-74hc-cms/dp/1201269
Quartz EPSON Q22FA23800181 FA-238 16 MHZ 12.5PF Farnell 1712816 1 0,61 http://fr.farnell.com/epson/q22fa23800181-fa-238-16-mhz-12-5pf/quartz-fa-238-16mhz-50ppm-12pf/dp/1712816
Buffer TEXAS INSTRUMENTS ULN2803ADWR Farnell 1652419 1 0,93 http://fr.farnell.com/texas-instruments/uln2803adwr/array-darlington-8-x-50v-18soic/dp/1652419?CMP=os_Google-FR_ProductDetail_Redirect&_ga=1.205781847.597929948.1454953943
Condensateur 100 nF MULTICOMP MC0201X104K6R3CT Farnell 2320753 3 0,0116 http://fr.farnell.com/multicomp/mc0201x104k6r3ct/condensateur-mlcc-x5r-100nf-6/dp/2320753
Résistance 10 KOhm MULTICOMP MCMR04X1002FTL Farnell 2072517 1 0,0134 http://fr.farnell.com/multicomp/mcmr04x1002ftl/res-ceramique-10k-1-0-063w-0402/dp/2072517
Résistance 1 MOhm MULTICOMP MCMR04X1004FTL Farnell 2072521 1 0,0134 http://fr.farnell.com/multicomp/mcmr04x1004ftl/res-ceramique-1m-1-0-0625w-0402/dp/2072521
Résistance 470 Ohm MULTICOMP MC0063W06035470R Farnell 9332146 1 0,0097 http://fr.farnell.com/multicomp/mc0063w06035470r/res-couche-epaisse-470r-5-0-063w/dp/9332146
LED KINGBRIGHT KP-1608MGC Farnell 8529825 1 0,281 http://fr.farnell.com/kingbright/kp-1608mgc/led-0603-vert/dp/8529825

Etat : Validé

Carte électronique

Ci-dessous se trouve le PCB de la carte électronique :

PCB
PCB

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 :

Relations maître/esclave

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 :

Média:init_spi.zip

Fichiers annexes

Ci-dessous, différents fichiers nécessaires à la réalisation du projet :