IMA4 2018/2019 EC2 : Différence entre versions
(→Travail effectué) |
(→Travail effectué) |
||
(43 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 26 : | Ligne 26 : | ||
{| class="wikitable" | {| class="wikitable" | ||
! Description !! Fabricant !! Référence Fabricant !! Fournisseur !! Quantité !! Lien fournisseur | ! Description !! Fabricant !! Référence Fabricant !! Fournisseur !! Quantité !! Lien fournisseur | ||
+ | |- | ||
+ | |LEDs CMS boîtier 0603 | ||
+ | | | ||
+ | | | ||
+ | |RS-Online | ||
+ | |3 | ||
+ | | | ||
+ | |- | ||
+ | |LEDs CMS boîtier 0805 | ||
+ | |ROHM | ||
+ | |SMLMN2BCTT86C | ||
+ | |RS-Online | ||
+ | |64 | ||
+ | |[https://fr.rs-online.com/web/p/led/1612768/ LEDs matrice] | ||
+ | |- | ||
+ | |Résistance 220 Ohms CMS | ||
+ | |Panasonic | ||
+ | |ERJ3EKF2200V | ||
+ | |RS-Online | ||
+ | |3 | ||
+ | |[https://fr.rs-online.com/web/p/resistances-cms/1058479/ Résistance 220 Ohms] | ||
+ | |- | ||
+ | |Résistance 2.2 kOhms CMS | ||
+ | |Panasonic | ||
+ | |ERA3ARB222V | ||
+ | |RS-Online | ||
+ | |3 | ||
+ | |[https://fr.rs-online.com/web/p/resistances-cms/8921295/ Résistance 2.2 kOhms] | ||
+ | |- | ||
+ | |Résistance 10 kOhms CMS | ||
+ | |Panasonic | ||
+ | |ERA3AEB103V | ||
+ | |RS-Online | ||
+ | |1 | ||
+ | |[https://fr.rs-online.com/web/p/resistances-cms/7419789/ Résistance 10 kOhms] | ||
+ | |- | ||
+ | |Résistance 33 kOhms CMS | ||
+ | |Panasonic | ||
+ | |ERA3ARB333V | ||
+ | |RS-Online | ||
+ | |1 | ||
+ | |[https://fr.rs-online.com/web/p/resistances-cms/8921356/ Résistance 33 kOhms] | ||
+ | |- | ||
+ | |Résistance 1 MOhms CMS | ||
+ | |Panasonic | ||
+ | |ERJ3EKF1004V | ||
+ | |RS-Online | ||
+ | |1 | ||
+ | |[https://fr.rs-online.com/web/p/resistances-cms/1051157/ 1 Résistance MOhms] | ||
+ | |- | ||
+ | |Condensateurs 10 pF CMS | ||
+ | |KEMET | ||
+ | |C0603C100J5GACAUTO | ||
+ | |RS-Online | ||
+ | |2 | ||
+ | |[https://fr.rs-online.com/web/p/condensateurs-ceramique-multicouche/1806466/ Condensateurs 10 pF] | ||
+ | |- | ||
+ | |Condensateurs 100 nF CMS | ||
+ | |KEMET | ||
+ | |C0603C104K9RACTU | ||
+ | |RS-Online | ||
+ | |1 | ||
+ | |[https://fr.rs-online.com/web/p/condensateurs-ceramique-multicouche/1806419/ Condensateurs 100 nF] | ||
+ | |- | ||
+ | |Condensateurs 10 µF CMS | ||
+ | |Murata | ||
+ | |GRT188R61E106ME13D | ||
+ | |RS-Online | ||
+ | |3 | ||
+ | |[https://fr.rs-online.com/web/p/condensateurs-ceramique-multicouche/1656414/ Condensateurs 10 µF] | ||
+ | |- | ||
+ | |TLC5947 CMS | ||
+ | |Texas Instrument | ||
+ | |TLC5947DAP | ||
+ | |RS-Online | ||
+ | |3 | ||
+ | |[https://fr.rs-online.com/web/p/drivers-dafficheur-a-led/9236775/ TLC5947] | ||
+ | |- | ||
+ | |Atmega328p CMS | ||
+ | |Microchip Technology | ||
+ | |ATMEGA328P-AN | ||
+ | |RS-Online | ||
+ | |1 | ||
+ | |[https://fr.rs-online.com/web/p/microcontroleurs/1310270/ Atmega328p] | ||
+ | |- | ||
+ | |Régulateur 3.3V | ||
+ | |Linear Technology | ||
+ | |LT1117CM-3.3#PBF | ||
+ | |RS-Online | ||
+ | |1 | ||
+ | |[https://fr.rs-online.com/web/p/regulateurs-de-tension-a-faible-chute-ldo/1533570/ Régulateur de tension] | ||
+ | |- | ||
+ | |Connecteur ICSP | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |1 | ||
+ | | | ||
+ | |- | ||
+ | |Connecteur femelle 6 ports | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |1 | ||
+ | | | ||
+ | |- | ||
+ | |Quartz | ||
+ | |QANTEK | ||
+ | |QCS8.00000F18B23R | ||
+ | |RS-Online | ||
+ | |1 | ||
+ | |[https://fr.rs-online.com/web/p/quartz/1734743/ Quartz] | ||
+ | |- | ||
+ | |Bouton poussoir CMS | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |1 | ||
+ | | | ||
|- | |- | ||
|} | |} | ||
=== Planning prévisionnel === | === Planning prévisionnel === | ||
+ | *Vendredi 15 Février 2019 : lecture de l'énoncé et début des recherches; | ||
+ | *Semaine du 18 au 24 Février 2019 : conception et validation du schématique puis routage et commande des composants; | ||
+ | *Semaine du 25 Février au 03 Mars 2019 : Réalisation du PCB (si matériel disponible), test avec un Arduino Uno (si partie contrôle non fonctionnelle); | ||
+ | *Semaine du 4 au 10 Mars 2019 : finalisation des test. | ||
+ | |||
+ | Objectif : rendre fonctionnelle la partie matrice de LED avant le 05 Avril 2019. | ||
== Travail effectué == | == Travail effectué == | ||
− | Cette section est consacrée à la réalisation du PCB de la partie Matrice de LED. Afin de comprendre le travail à réaliser, voyons voir d'abord les composants | + | Cette section est consacrée à la réalisation du PCB de la partie Matrice de LED. Afin de comprendre le travail à réaliser, voyons voir d'abord les différentes parties de plus près. |
+ | |||
+ | |||
+ | '''Partie Hardware : CONCEPTION DU PCB''' | ||
+ | |||
+ | La première partie du travail est consacrée à la conception et la mise en marche de la carte pour la partie matrice de LEDs. | ||
+ | |||
+ | '''''La matrice de LED''''' | ||
+ | |||
+ | La matrice de LEDs est entièrement réalisée à partir de LEDs CMS de boîtier 0803 . | ||
+ | Le principe du montage est similaire à celui de la matrice de LEDs 8x8 de Sparkfun. Les anodes de chaque LEDs sont reliées entre elles à un régulateur de tension qui fournira 3.3 V à sa sortie (sachant qu'on lui impose une certaine tension en entrée sans dépasser les 15 V), suffisant pour alimenter les LEDs. Chacune des broches de sortie des TLC (OUT0...OUT23) est reliée à la cathode d'une LED. | ||
+ | |||
+ | |||
+ | '''''Le TLC5947''''' | ||
+ | |||
+ | Il s'agit d'un driver de contrôle de LED composé de 24 pins de sorties et 8 pin dédiées à la communication avec l'Atmega328p et les autres TLC5947 utilisés dans le montage. Son schématique est le suivant : | ||
+ | [[Fichier:TLC5947.png|200px|thumb|center|TLC5947]] | ||
+ | En le connectant via le connecteur ICSP de l'Arduino, on peut contrôler l'allumage des LEDs par le biais de ce driver. Dans notre cas, on souhaite pouvoir allumer les LEDs de notre matrice tout en contrôlant leur luminosité. Chaque TLC doit pouvoir contrôler chaque LED indépendamment. | ||
+ | |||
+ | Ces paramètres étant pris en compte, nous aboutissons au schématique suivant : | ||
+ | [[Fichier:MatriceLEDRex_schema.png|200px|thumb|center|Matrice de LED]] | ||
+ | |||
+ | Et donc le PCB suivant : | ||
+ | [[Fichier:MatriceLEDRex_circuit_imprime.png|200px|thumb|center|Matrice de LED]] | ||
+ | |||
+ | Le PCB étant créé, il reste à encore à faire graver la carte et souder les composants. | ||
+ | Une fois la carte gravée et les composants soudés, nous obtenons le montage suivant : | ||
+ | [[Fichier:Carte_matrice.jpg|200px|thumb|center|Carte matrice de LEDs]] | ||
+ | |||
+ | Vous l'aurez constatez, des fils ont été ajoutés sur la carte. La LED servant à la vérification de l'alimentation de la carte ne s'allumait pas malgré que la carte était alimentée. Cela provenait du fait que celle-ci était isolée du montage, c'est-à-dire ses pins étaient bien connectées aux pins correspondantent du 328p mais n'étaient pas reliées à la masse et au +5V de la carte : ainsi la LED était fonctionnelle mais non alimentée. Nous avons donc créé un pont électrique (ou strap) entre l'anode de LED et le +5V de la carte et un autre pont entre la sortie de la résistance connectée à la cathode de la LED et la masse de carte par le biais de ces fils. | ||
+ | |||
+ | La carte est donc opérationnelle et prête à l'emploi comme vous pourrez le voir sur l'image suivante : | ||
+ | [[Fichier:Carte_matrice_allumee.jpg|thumb|200px|center|Carte matrice de LEDs fonctionnelle]] | ||
+ | |||
+ | '''Partie Software : GESTION DE LA LIAISON SPI''' | ||
+ | |||
+ | La deuxième partie est dédiée à la programmation du micro-contrôleur de la matrice. Le micro-contrôleur doit attendre l'état des LEDs qui lui sera transmis via la communication SPI. Cela signifie donc que l'ATMega328p de la matrice doit donc être configuré dans le mode SPI esclave. Via cette communication, nous transmettons 64 octets de donnée codant chacun l'intensité lumineuse de la matrice. | ||
+ | |||
+ | Les LEDs n'étant pas soudées dans l'ordre prévu afin de mieux organiser l'espace sur la carte, nous avons dû effectuer une remise en ordre au préalable des LEDs. Pour cela, nous avons construit un 8 tableaux ou groupes auxquels nous avons affecté chacun un tableau de pointeurs. Le but du tableau de pointeur est d'aller récupérer l'adresse de la LED à allumer contenue dans le tableau correspondant. De cette manière on réorganise l'ordre d'allumage de nos LEDs. | ||
+ | [[Fichier:Remise en ordre matrice.png|200px|thumb|center|Tableaux et pointeurs de tableaux pour la mise en ordre]] | ||
+ | |||
+ | Grâce à la fonction void matrice, nous récupérons le message reçu sur la liaison ISP et les tableaux de pointeurs créés afin de bien répartir le message reçu sur nos 8 tableaux de pointeurs. Nous gérons également la luminosité grâce à un facteur que nous appliquons sur les tableaux (facteur fixé, ici, à 255). | ||
+ | [[Fichier:Tableau_pt.png|200px|thumb|center|Création des tableaux de pointeurs]] | ||
− | + | Afin de communiquer via la liaison ISP, nous utilisons la fonction spi_exch(uint8_t output) grâce à laquelle notre 328p en mode "Slave" reçoit les octets émis par la partie contrôle qui est en mode "Master". Nous les stockons dans une variable chacun et utilisons la fonction matrice pour les dispatcher dans nos tableaux de pointeurs. | |
+ | [[Fichier:spi_exch.png|200px|thumb|center|Fonction de réception des octets]] | ||
− | + | Ceci étant fait, nous avons programmé en Arduino la partie maître (car la parte contrôle n'était pas encore terminée) dans laquelle nous avons construit une fonction sendISP qui prend en paramètre l'octet à envoyer et sélectionne l'esclave qui le reçoit. | |
− | |||
+ | Ceci étant terminé, nous sommes désormais en mesure d'afficher un caractère sur la matrice de LED via la liaison ISP. Dans l'exemple ci-après, nous avons affichons un "1" sur notre matrice. Vous remarquerez que 2 LEDs sont éteintes. Cela provient sans doute d'une mauvaise affectation des LEDs dans notre tableau de pointeurs. Le programme est améliorable mais reste tout de même fonctionnel. Si le caractère souhaité ne s'affiche pas immédiatement, d'ébranchez puis rebranchez l'Arduino. | ||
+ | [[Fichier:Matrice_char_un.jpg|thumb|200px|center|Affichge du caractère "1"]] | ||
− | + | [[Fichier:Vue_moniteur_serie.jpg|thumb|200px|center|Vue sur le moniteur série du maître]] | |
== Documents == | == Documents == | ||
+ | [[Fichier:EC2_Matrice_LEDS.zip]] |
Version actuelle datée du 6 avril 2019 à 22:41
Sommaire
Présentation du projet
Contexte
L'élève continue son semestre S8 à l'école.
Objectif
Le but est de concevoir une partie d'une platine de travaux pratiques pour l'ordonnancement. Il faut aussi programmer le micro-contrôleur intégré.
Description du projet
La platine sera constituée de 3 parties bien distinctes :
- la partie "contrôle" composée d'un ATMega328p, d'un FT232, d'un connecteur USB, de deux LED et de deux boutons, l'ordonnanceur doit être chargé sur ce micro-contrôleur ;
- la partie matrice de LED, il s'agit d'une matrice de 8x8 LED CMS monochromes contrôlées par un ATMega328p et 3 pilotes de LED TLC5947 ;
- la partie afficheur 7-segments, il s'agit de 6 afficheurs 7-segments implantés avec des LED CMS monochromes et contrôlés par un ATMega328p et 2 pilotes de LED TLC5947.
La communication entre la partie "contrôle" et les deux autres parties s'effectue via un bus SPI. Les trois parties sont conçues et réalisées séparément mais doivent s'interconnecter facilement. Les 3 PCB sont rectangulaires et doivent s'assembler aussi sous la forme d'un rectangle. Pour passer les lignes SPI et l'alimentation, des connecteurs doivent être prévus sur les 3 PCB. Vous commencerez par vous mettre d'accord sur les dimensions des PCB et sur l'emplacement des connecteurs. Une première phase de conception des PCB avec placement des composants peut être nécessaire pour cette étape.
Vous êtes chargé de réaliser la matrice de LED. Vous trouverez, sur les Wiki IMA, des exemples de cartes avec ATMega328p et TLC5947. Partez de l'un de ces exemples. Utilisez le logiciel Fritzing pour la conception de la carte. N'oubliez pas le connecteur ICSP pour la première programmation du micro-contrôleur.
Une fois la carte fonctionnelle vous programmerez le micro-contrôleur pour attendre l'état des LED par communication SPI. Votre ATMega328p doit donc être configuré dans le mode SPI esclave. Utilisez le même protocole de transmission des données que la matrice de LED RGB de SparkFun. Il y aura donc transfert de 64 octets de données. Pour votre matrice chaque octet ne codera pas la couleur de la LED correspondante mais son intensité lumineuse. Si la partie contrôle n'est pas opérationnelle, il sera possible de tester votre matrice avec un Arduino Uno et l'exemple de programme disponible sur le site de SparkFun.
Matériel nécessaire
Description | Fabricant | Référence Fabricant | Fournisseur | Quantité | Lien fournisseur |
---|---|---|---|---|---|
LEDs CMS boîtier 0603 | RS-Online | 3 | |||
LEDs CMS boîtier 0805 | ROHM | SMLMN2BCTT86C | RS-Online | 64 | LEDs matrice |
Résistance 220 Ohms CMS | Panasonic | ERJ3EKF2200V | RS-Online | 3 | Résistance 220 Ohms |
Résistance 2.2 kOhms CMS | Panasonic | ERA3ARB222V | RS-Online | 3 | Résistance 2.2 kOhms |
Résistance 10 kOhms CMS | Panasonic | ERA3AEB103V | RS-Online | 1 | Résistance 10 kOhms |
Résistance 33 kOhms CMS | Panasonic | ERA3ARB333V | RS-Online | 1 | Résistance 33 kOhms |
Résistance 1 MOhms CMS | Panasonic | ERJ3EKF1004V | RS-Online | 1 | 1 Résistance MOhms |
Condensateurs 10 pF CMS | KEMET | C0603C100J5GACAUTO | RS-Online | 2 | Condensateurs 10 pF |
Condensateurs 100 nF CMS | KEMET | C0603C104K9RACTU | RS-Online | 1 | Condensateurs 100 nF |
Condensateurs 10 µF CMS | Murata | GRT188R61E106ME13D | RS-Online | 3 | Condensateurs 10 µF |
TLC5947 CMS | Texas Instrument | TLC5947DAP | RS-Online | 3 | TLC5947 |
Atmega328p CMS | Microchip Technology | ATMEGA328P-AN | RS-Online | 1 | Atmega328p |
Régulateur 3.3V | Linear Technology | LT1117CM-3.3#PBF | RS-Online | 1 | Régulateur de tension |
Connecteur ICSP | 1 | ||||
Connecteur femelle 6 ports | 1 | ||||
Quartz | QANTEK | QCS8.00000F18B23R | RS-Online | 1 | Quartz |
Bouton poussoir CMS | 1 |
Planning prévisionnel
- Vendredi 15 Février 2019 : lecture de l'énoncé et début des recherches;
- Semaine du 18 au 24 Février 2019 : conception et validation du schématique puis routage et commande des composants;
- Semaine du 25 Février au 03 Mars 2019 : Réalisation du PCB (si matériel disponible), test avec un Arduino Uno (si partie contrôle non fonctionnelle);
- Semaine du 4 au 10 Mars 2019 : finalisation des test.
Objectif : rendre fonctionnelle la partie matrice de LED avant le 05 Avril 2019.
Travail effectué
Cette section est consacrée à la réalisation du PCB de la partie Matrice de LED. Afin de comprendre le travail à réaliser, voyons voir d'abord les différentes parties de plus près.
Partie Hardware : CONCEPTION DU PCB
La première partie du travail est consacrée à la conception et la mise en marche de la carte pour la partie matrice de LEDs.
La matrice de LED
La matrice de LEDs est entièrement réalisée à partir de LEDs CMS de boîtier 0803 . Le principe du montage est similaire à celui de la matrice de LEDs 8x8 de Sparkfun. Les anodes de chaque LEDs sont reliées entre elles à un régulateur de tension qui fournira 3.3 V à sa sortie (sachant qu'on lui impose une certaine tension en entrée sans dépasser les 15 V), suffisant pour alimenter les LEDs. Chacune des broches de sortie des TLC (OUT0...OUT23) est reliée à la cathode d'une LED.
Le TLC5947
Il s'agit d'un driver de contrôle de LED composé de 24 pins de sorties et 8 pin dédiées à la communication avec l'Atmega328p et les autres TLC5947 utilisés dans le montage. Son schématique est le suivant :
En le connectant via le connecteur ICSP de l'Arduino, on peut contrôler l'allumage des LEDs par le biais de ce driver. Dans notre cas, on souhaite pouvoir allumer les LEDs de notre matrice tout en contrôlant leur luminosité. Chaque TLC doit pouvoir contrôler chaque LED indépendamment.
Ces paramètres étant pris en compte, nous aboutissons au schématique suivant :
Et donc le PCB suivant :
Le PCB étant créé, il reste à encore à faire graver la carte et souder les composants. Une fois la carte gravée et les composants soudés, nous obtenons le montage suivant :
Vous l'aurez constatez, des fils ont été ajoutés sur la carte. La LED servant à la vérification de l'alimentation de la carte ne s'allumait pas malgré que la carte était alimentée. Cela provenait du fait que celle-ci était isolée du montage, c'est-à-dire ses pins étaient bien connectées aux pins correspondantent du 328p mais n'étaient pas reliées à la masse et au +5V de la carte : ainsi la LED était fonctionnelle mais non alimentée. Nous avons donc créé un pont électrique (ou strap) entre l'anode de LED et le +5V de la carte et un autre pont entre la sortie de la résistance connectée à la cathode de la LED et la masse de carte par le biais de ces fils.
La carte est donc opérationnelle et prête à l'emploi comme vous pourrez le voir sur l'image suivante :
Partie Software : GESTION DE LA LIAISON SPI
La deuxième partie est dédiée à la programmation du micro-contrôleur de la matrice. Le micro-contrôleur doit attendre l'état des LEDs qui lui sera transmis via la communication SPI. Cela signifie donc que l'ATMega328p de la matrice doit donc être configuré dans le mode SPI esclave. Via cette communication, nous transmettons 64 octets de donnée codant chacun l'intensité lumineuse de la matrice.
Les LEDs n'étant pas soudées dans l'ordre prévu afin de mieux organiser l'espace sur la carte, nous avons dû effectuer une remise en ordre au préalable des LEDs. Pour cela, nous avons construit un 8 tableaux ou groupes auxquels nous avons affecté chacun un tableau de pointeurs. Le but du tableau de pointeur est d'aller récupérer l'adresse de la LED à allumer contenue dans le tableau correspondant. De cette manière on réorganise l'ordre d'allumage de nos LEDs.
Grâce à la fonction void matrice, nous récupérons le message reçu sur la liaison ISP et les tableaux de pointeurs créés afin de bien répartir le message reçu sur nos 8 tableaux de pointeurs. Nous gérons également la luminosité grâce à un facteur que nous appliquons sur les tableaux (facteur fixé, ici, à 255).
Afin de communiquer via la liaison ISP, nous utilisons la fonction spi_exch(uint8_t output) grâce à laquelle notre 328p en mode "Slave" reçoit les octets émis par la partie contrôle qui est en mode "Master". Nous les stockons dans une variable chacun et utilisons la fonction matrice pour les dispatcher dans nos tableaux de pointeurs.
Ceci étant fait, nous avons programmé en Arduino la partie maître (car la parte contrôle n'était pas encore terminée) dans laquelle nous avons construit une fonction sendISP qui prend en paramètre l'octet à envoyer et sélectionne l'esclave qui le reçoit.
Ceci étant terminé, nous sommes désormais en mesure d'afficher un caractère sur la matrice de LED via la liaison ISP. Dans l'exemple ci-après, nous avons affichons un "1" sur notre matrice. Vous remarquerez que 2 LEDs sont éteintes. Cela provient sans doute d'une mauvaise affectation des LEDs dans notre tableau de pointeurs. Le programme est améliorable mais reste tout de même fonctionnel. Si le caractère souhaité ne s'affiche pas immédiatement, d'ébranchez puis rebranchez l'Arduino.