Carte contrôleur de matrice de LEDs : Différence entre versions
(→Avancement du Projet) |
(→Avancement du Projet) |
||
Ligne 70 : | Ligne 70 : | ||
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. | 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. | Les vias sous les composants ont été supprimés et espacés des pads s'ils étaient trop proches. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Soudage et tests de la carte=== | ===Soudage et tests de la carte=== |
Version du 9 septembre 2016 à 15:12
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.
Soudage et tests de la carte
La première étape de la réalisation fut de souder la carte. La carte utilisée n'est pas celle présentée ici puisque la gravure n'était pas faite au moment de la réalisation. Voci ci-dessous le PCB de la carte réalisée :
photo à venir
Il a fallut ensuite tester chaque partie. Tout d'abord, l'alimentation doit être vérifiée en effectuant la soudure de la partie LED. On injecte ensuite 5 V dans le spi input . Ce test a été concluant. Ensuite nous avons testé le fonctionnement du microcontrôleur et du montage oscillateur. Pour cela, nous avons implémenté un bootloader et un programme de test qui s'est avéré fonctionnel. Enfin, nous plaçons le registre ainsi que le buffer et testons l'état des sorties selon un programme de test également, ce qui s'est avéré concluant également. Finalement, voici à quoi la carte ressemble une fois tous les composants incorporés :
photo à venir
Le bootloader et les programmes tests
Dans un premier temps, nous avons décidé de programmer notre Atmega via un Arduino Duemilanove en utilisant l'ICSP disponible sur notre carte. Pour cela il nous faut relier chaque pin de l'Arduino (à savoir VCC, GND, SCK, RESET, MISO et MOSI) sur celui qui lui correspond sur la carte. Dans un premier temps, il s'agit d'implémenter un bootloader qui servira à pouvoir programmer dans notre configuration (Atmega328p à 16 MHz). Ceci a d'ailleurs permis de vérifier que le quartz était fonctionnel. Après que le bootloader soit installé, on peut choisir d'utiliser notre Arduino en tant que programmateur.
Nous avons dans un premier temps importé un simple programme "Blink" pour vérifier que nous pouvons réellement programmer et que le microcontrôleur soit capable de piloter la carte. Ce programme permet juste de faire clignoter un LED via le SCK mais nous conforte dans le fait que la programmation ainsi que le fonctionnement de la carte soient fonctionnels. Dans un second temps nous avons voulu tester les sorties du buffer et du registre à décalage. Pour cela nous avons choisis dans un premier temps de mettre des sorties du buffer à 1 et d'autre à 0 pour voir si l'on récupérait bien 5 V là où il fallait. Pour le registre, nous vérifions également les entrées sorties en vérifiant les tensions.
Test de la matrice de LEDs et problème rencontrés
- Dans un premier temps nous avons remarqué que sur cette carte nous ne pouvions pas insérer la matrice directement puisque les pins des barrettes n'étaient pas situés dans le bon sens. Pour palier à celà nous avons placé les broches 1 à 8 directement et relié les autres via des câbles.
- Dans un second temps, il s'agissait de tester les LEDs afin de voir si elles s'allumaient ou non. Nous avions au début des LEDs aléatoires puis nous avons trouvés comment les sélectionner. A l'heure actuellement seule la première ligne est opérationnelle. Nous pouvons la choisir en passannt à l'état "HIGH" notre variable qui gère cette sortie. Ensuite, pour allumer les LEDs, il s'agit de mettre la LED souhaitée à 0 et les autres à 1. Par exemple pour choisir le led de la colonne 4, nous implémentons ~0x08 dans le registre à décalage. Ci-dessous, voici ce que nous pouvons afficher :
- Concernant les problèmes rencontrés, il semblerait que le colonne 3 ne soit pas opérationnelle. De plus, seule la ligne 1 a pu être sélectionnée. Pour tenter de résoudre cela, j'ai vérifié que chaque pin du registre et du buffer étaient reliés correctement à la matrice et au microcontrôleur. Ensuite, nous avons n'avons pas pu afficher de ligne complète, seulement une LED par une LED, peut être cela est-il dû au dysfonctionnement de la colonne 3. Il ne semble pourtant pas y avoir de courts-circuits au sein de la carte donc c
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:nwegrzyn.zip
photo à venir