IMA4 2016/2017 ECP5 : Différence entre versions

De Wiki d'activités IMA
(Avancement du Projet)
(Programmation de l'Atmega)
Ligne 369 : Ligne 369 :
  
 
===Programmation de l'Atmega===
 
===Programmation de l'Atmega===
 +
 +
L'objectif est de programmer notre Atmega en utilisant un Arduino Uno et ce grâce à la connexion ICSP de notre carte.
 +
 +
La première étape est d'installer un bootloader sur l'Arduino afin de pouvoir ensuite l'utiliser comme un programmateur in situ pour implémenter un programme sur notre Atmega. Un fichier basique de bootloader a été rédigé ''(cf livrable 'sketch_init_SPI')'' puis finalement le fichier disponible avec l'IDE Arduino a été utilisé.
 +
 +
Le programme à implémenter a pour but de permettre l'affichage d'une image simple telle qu'un smiley:
 +
 +
[[Fichier:Matrice_Symbole.png|1000px|thumb|center|Schematic]]
 +
 +
Afin d'afficher le dessin en continu, nous n'allons afficher qu'une LED à la fois. Étant donné la conception de la matrice de LED, on peut par exemple allumer la LED située ligne 2 colonne 1 en mettant la branche 14 à 1 et la branche 13 à la masse. Compte tenu de l'affichage 'par balayage' que nous allons réaliser, nous allumerons toutes les LED d'une même ligne en même temps, et nous ferons une rotation sur les 3 lignes possédant des LEDs que nous souhaitons allumer.
 +
 +
Il faut alors ordonner les valeurs en sorties du buffer et du registre à décalage ''(cf livrable sketch_affichage_matrice)''.
  
 
===Tests===
 
===Tests===

Version du 5 juillet 2017 à 17:59

Cahier des charges

Contexte

L'élève est en stage à l'INRIA donc peut se déplacer à l'école.

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. Appuyez-vous sur les erreurs commises dans le projet original pour obtenir une carte opérationnelle : Carte_contrôleur_de_matrice_de_LEDs.

En particulier l'empreinte pour le buffer n'était pas correcte ni le câblage des connecteurs. Le routage n'était pas optimal non plus.

Il est aussi demandé de partir sur la même liste de composants (voir ci-après).

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


Avancement du Projet

Calendrier synthétique

  • Semaine du 5 juin: appropriation du sujet, compréhension des objectifs, analyse du travail de l'an dernier et modifications en fonctions des datasheets de chacun des composants essentiels
  • Semaine du 12 juin: j'ai été dans l'incapacité de travailler pour une raison personnelle qui a été justifiée
  • Semaine du 19 juin: création de la première schematic, du premier PCB et prise de rendez-vous avec M. Flamen (première soumission en fin de semaine)
  • Semaine du 26 juin: avancement sur la partie programmation, nombreuses modifications du PCB (une impression non conforme a été réalisée)
  • Semaine du 3 juillet: carte enfin disponible, soudage sur une journée entière, tests

Choix techniques

  • La carte sera alimentée avec une tension continue de 5V; l'alimentation se fera par connecteur SPI ;
  • Un montage oscillateur à quartz sera implémenté afin de fournir un signal d'horloge d'une fréquence de 16 MHz au micro-contrôleur ;
  • La matrice de LED 8x8 sera connectée avec des barrettes de connexion femelles située sur la couche 'bottom' de notre carte ;
  • Un registre à décalage (fonctionnant en SIPO de l'Atmega vers la matrice) permettra de choisir directement les rangées de la matrice à activer via l'Atmega ;
  • Un buffer permettra de réaliser une amplification de courant en entrée de la matrice et permettra d'activer les colonnes de la matrice ;
  • Un Spi-header permettra de programmer l'Atmega de notre carte ;
  • Une LED de contrôle est ajoutée pour s'assurer de la qualité du soudage qui sera effectué ;
  • Le logiciel Eagle sera utilisé pour la conception de la carte ;

Liste des composants

Aucun composant n'a été commandé, tout a été réalisé avec les stocks de l'école. De ce fait, je n'ai pas eu accès aux références de composants comme les résistances ou les condensateurs utilisés.

Description Fabricant Référence Fabricant Quantité Lien fournisseur
Microcontrôleur ATMEL ATMEGA328P-AU 1 http://fr.farnell.com/atmel/atmega328p-au/mcu-8bit-atmega-20mhz-tqfp-32/dp/1715486
Afficheur matrice de point 8x8 KINGBRIGHT TC23-11EWA 1 http://fr.farnell.com/kingbright/tc23-11ewa/display-dot-matrix-2-3-8x8-red/dp/2290408
Barrette femelle 1x6 SAMTEC SSM-106-L-SV 2 http://fr.farnell.com/samtec/ssm-106-l-sv/embase-2-54mm-vert-6voies/dp/1668257
Barrette femelle 1x3 traversant 2
Barrette femelle 1x8 traversant 2
Registre à décalage NXP 74HC595D 1 http://fr.farnell.com/nxp/74hc595d/circuit-logique-74hc-cms/dp/1201269
Quartz EPSON Q22FA23800181 FA-238 16 MHZ 12.5PF 1 http://fr.farnell.com/epson/q22fa23800181-fa-238-16-mhz-12-5pf/quartz-fa-238-16mhz-50ppm-12pf/dp/1712816
Buffer TEXAS INSTRUMENTS ULN2803ADWR 1 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 22 pF 2
Résistance 10 KOhm 1
Résistance 1 MOhm 1
Résistance 294 Ohm 1
LED KINGBRIGHT KP-1608MGC 1 http://fr.farnell.com/kingbright/kp-1608mgc/led-0603-vert/dp/8529825


Schématique

La bibliothèque Sparkfun a été utilisée afin d'avoir des modèles pour les composants utilisés. La schématique proposée se base sur celle proposée l'an dernier. Plusieurs différences sont à noter:

  • Le modèle de l'Atmega utilisé semble différent (au moins pour sa représentation sur PCB) ;
  • De même pour le modèle du registre à décalage (désormais de la bonne dimension) ;
  • Les connecteurs utilisés sont bien des connecteurs femelles CMS contrairement à l'année dernière où il s'agissait de connecteurs traversants ;
  • Le buffer a été modifié et possède désormais un modèle correspondant à la taille réelle du composant (c'était l'un des problèmes majeur de l'année dernière) ;
  • Les branchements entre le registre à décalage et la matrice, et entre le buffer et la matrice ont été réalisés en suivant la documentation de la matrice de LED (ci-dessous).
Documentation de la matrice de LED

La première schematic proposée est la suivante:

Schematic

Après multiples modifications, la schematic finale proposée est présentée ci-dessous. Toutes les modifications apportées ne sont pas nécessairement visibles sur la schématic, parfois seul le modèle du composant sur le PCB change. On peut cependant remarquer ici que:

  • Le modèle de l'Atmega a été modifié et comporte désormais le bon nombre de 4*8=32 broches (contre 33 sur le modèle précédent) ;
  • Le modèle du quartz a également été modifié et les condensateurs qui l'accompagne ont été corrigés et sont désormais de 22pF, valeur usuelle utilisée pour un tel montage d'oscillateur à quartz ;
  • Les composants accompagnant la LED ont été modifiés, la valeur de la résistance étant désormais adaptée à la LED utilisée et à la tension de 5V sous laquelle on souhaite travailler.
Schematic finale


PCB

Pour la réalisation du PCB le point le plus important est de correctement placer les connecteurs pour la matrice. Le modèle de la carte à comme dimension 59,7*59,7mm. Comme visible sur le PCB, les connecteurs de la matrice ont été espacés de 45,72 mm ce qui correspond à la valeur recommandée sur la documentation de la matrice LED. De plus, il a fallut s'assurer de placer l'un des connecteurs dans le sens inverse (pivoté de 180°) afin de s'assurer que les branchements avec la matrice soient conformes.

Les connecteurs pour la matrice ont été placés sur la face bottom. Après avoir fait au mieux pour placer tous les composants, il a été décidé de tous les conserver sur la face top car après modélisation, le routage ne gagnait pas vraiment en efficacité en plaçant des composants supplémentaires sur la face bottom.

Finalement, seul le circuit de la LED de contrôle semble un peu trop éloigné.

Le premier PCB proposé est le suivant:

PCB

Après de multiples considérations auprès de M. Thierry Flamen, le PCb a été revu et optimisé à plusieurs reprises. La solution finale proposée est présentée ci-dessous. On remarquera les modifications suivantes:

  • Les barrettes de connexion pour la matrice ont été modifiées pour être des composants traversants. De toute évidence, il aurait été quasi impossible de connecter la matrice à des connecteurs de surface, ceux-ci auraient été beaucoup trop fragiles ;
  • Le micro-contrôleur possède désormais un modèle plus grand et donc correct ;
  • Le quartz possède désormais un modèle plus grand et donc correct ;
  • L'orientation des composants a été largement modifiée afin d'optimiser le routage ;
  • Les via situés sous certains composants ont été proscrits car ils ne peuvent pas être réalisés à l'atelier de Polytech (cf Impression & Soudage pour plus de détail) ;
  • Les tailles des vias et des pistes ont été augmentées ;
  • Le connecteur de droite s'étant finalement avéré dispensable, il n'a pas été routé.
PCB final

Impression & Soudage

L'impression et le soudage de la carte ont été réalisés à l'atelier de Polytech (sous l'encadrement de M. Thierry Flamen que je remercie pour le temps qu'il m'a consacré afin que je mène à bien la réalisation de ma carte).

Une fois que mon PCB a été conforme aux normes d'impression de la machine de Polytech, la carte a été validée et imprimée.

Le soudage des composants CMS a été réalisé avec l'application de pâte à braser suivi d'un passage au four. Le connecteur femelle CMS 1*6 n'ayant pas tenu, il a été soudé à la main par la suite.

Les vias ne pouvant pas être rendus conducteurs (Polytech ne possède pas l'encre nécessaire), il a été soudé un fil au travers de chacun d'eux. Cela explique l'impossibilité de placer un via sous un composant CMS (car cette soudure créée un relief trop important). Il a fallu faire de même avec un fil plus fin pour les trous des connecteurs qui possédaient une liaison sur la face opposée à la soudure (afin de permettre aux pâtes de passer dans les trous en plus du fil.

Les traversants ont ensuite été soudés à la main.

L'emplacement prévu pour la LED étant trop grand, celle-ci n'a pas été soudée mais une LED traversante sera utilisée pour réaliser un test rapide.

Finalement, un fil a été rajouté sur la piste correspondant au signal 'reset' de l'Atmega afin de pouvoir la connecter à la branche 'reset' du connecteur SPI. Cette liaison a en effet été oubliée au moment de la conception du circuit.

Programmation de l'Atmega

L'objectif est de programmer notre Atmega en utilisant un Arduino Uno et ce grâce à la connexion ICSP de notre carte.

La première étape est d'installer un bootloader sur l'Arduino afin de pouvoir ensuite l'utiliser comme un programmateur in situ pour implémenter un programme sur notre Atmega. Un fichier basique de bootloader a été rédigé (cf livrable 'sketch_init_SPI') puis finalement le fichier disponible avec l'IDE Arduino a été utilisé.

Le programme à implémenter a pour but de permettre l'affichage d'une image simple telle qu'un smiley:

Schematic

Afin d'afficher le dessin en continu, nous n'allons afficher qu'une LED à la fois. Étant donné la conception de la matrice de LED, on peut par exemple allumer la LED située ligne 2 colonne 1 en mettant la branche 14 à 1 et la branche 13 à la masse. Compte tenu de l'affichage 'par balayage' que nous allons réaliser, nous allumerons toutes les LED d'une même ligne en même temps, et nous ferons une rotation sur les 3 lignes possédant des LEDs que nous souhaitons allumer.

Il faut alors ordonner les valeurs en sorties du buffer et du registre à décalage (cf livrable sketch_affichage_matrice).

Tests

La LED manquante a pu être remplacée par une LED traversante le temps d'un test: apposer les pâtes de la LED aux endroits prévus a permis de voir la LED s'allumer, confirmant le routage de l'alimentation (en plus des tests effectués avec un multimètre).

Malheureusement, les tests n'ont pas pu avoir lieu car je n'ai pas réussi à flasher mon Atmega. L’implémentation avec l'IDE Arduino n'a rien donné, pas plus que celui par lignes de commandes, les deux résultants en un problème de synchronisation empêchant l'implémentation de mon programme. Je n'ai même pas pu réaliser le burn du bootloader

Le problème vient probablement de ce fil 'reset' qui a été rajouté. Malgré toutes les vérifications que j'ai effectuées, peut-être ai-je manqué une connexion défaillante.

Je n'ai finalement pas pu résoudre ce problème car j'ai manqué de temps pour mes tests, la réalisation de ma carte m'ayant pris beaucoup plus de temps que prévu.

Rendus