IMA4 2018/2019 P5 : Différence entre versions

De Wiki de Projets IMA
(Partie 1 : Conception du prototype)
(Documents Rendus)
 
(167 révisions intermédiaires par le même utilisateur non affichées)
Ligne 13 : Ligne 13 :
 
* '''STM32F412ZG''' contre '''STM32F412VGT6''' (NumWorks)
 
* '''STM32F412ZG''' contre '''STM32F412VGT6''' (NumWorks)
  
Il est également nécessaire de réaliser un PCB afin d'y installer les boutons ainsi que la LED RGB pour le mode examens.  
+
Il est également nécessaire de réaliser un PCB afin d'y installer les boutons ainsi que la LED RGB pour le mode examen.  
 
Ce PCB doit également fonctionner comme un shield intermédiaire pour le shield Nucleo où se trouve l'écran LCD.
 
Ce PCB doit également fonctionner comme un shield intermédiaire pour le shield Nucleo où se trouve l'écran LCD.
  
 
'''Tout ceci sera à vérifier grâce aux datasheets/schematics des éléments concernés.'''
 
'''Tout ceci sera à vérifier grâce aux datasheets/schematics des éléments concernés.'''
  
le PCB intermédiaire devra également pallier aux problèmes de connexions des pins dû aux différences entre le '''ZGT6''' et le '''VGT6''' de la NumWorks.
+
Le PCB intermédiaire devra également pallier aux problèmes de connexions des pins dû aux différences entre le '''ZGT6''' et le '''VGT6''' de la NumWorks.
  
Une fois le prototype assemblé, il faudra y installer le système d'exploitation (Epsilon) et vérifier son bon fonctionnement en effectuant les modifications nécessaires.
+
Une fois le prototype assemblé, il faudra y installer le système d'exploitation '''Epsilon''' et vérifier son bon fonctionnement en effectuant les modifications nécessaires.
  
 
<s>
 
<s>
Ligne 46 : Ligne 46 :
  
 
'''Partie 1''' : Conception du prototype
 
'''Partie 1''' : Conception du prototype
* conception et réalisation du bouclier clavier / LED ;
+
* conception et réalisation du bouclier clavier / LED
* éventuellement réalisation d'un bouclier de reroutage pour connecter correctement l'écran sur la Nucleo (respecter les connexions décrites dans le fichier ion/src/device/display.h d'Epsilon ;
+
* éventuellement réalisation d'un bouclier de reroutage pour connecter correctement l'écran sur la Nucleo (respecter les connexions décrites dans le fichier ion/src/device/display.h d'Epsilon)
* compiler et charger Epsilon ;
+
* compiler et charger Epsilon
 
* tester et revoir le prototype jusqu'à qu'Epsilon fonctionne correctement sur le prototype réalisé à partir du bouclier écran.
 
* tester et revoir le prototype jusqu'à qu'Epsilon fonctionne correctement sur le prototype réalisé à partir du bouclier écran.
  
Ligne 70 : Ligne 70 :
 
'''NUCLEO-F412ZG'''
 
'''NUCLEO-F412ZG'''
  
* Utiliser Arduino IDE pour vérifier le fonctionnement de l'écran avec la NUCLEO
+
* <s>Utiliser Arduino IDE pour vérifier le fonctionnement de l'écran avec la NUCLEO</s>
 
* Implémenter Epsilon et effectuer les modifications nécessaires pour le fonctionnement de base
 
* Implémenter Epsilon et effectuer les modifications nécessaires pour le fonctionnement de base
* Déterminer s'il est possible d'utiliser une Numworks pour en mettre à jour une autre (USB OTG)
+
* Tester l'implémentation d'Epsilon en utilisant l'écran d'une des NumWorks via le PCB qui devra être réalisé
* Développer le système de mise à jour d'une Numworks via une autre
+
* Tester avec un des écrans employés sur un autre projet qui concerne le clonage d'une NumWorks
  
 
'''PCB (clavier et LED RGB) entre la carte NUCLEO et le shield LCD'''
 
'''PCB (clavier et LED RGB) entre la carte NUCLEO et le shield LCD'''
  
* Création d'un PCB sous fritzing pour y placer le clavier (les commutateurs tactiles), la led RGB servant au mode examen
+
* Création d'un PCB sous fritzing pour y placer le clavier (les commutateurs tactiles) et la LED RGB servant au mode examen
 +
* Implémenter la Carte NUCLEO-F412ZG sous Fritzing car manquante dans les composants de base (seule une version antérieure est proposée) pour réaliser le PCB
  
 
==Choix techniques : matériel et logiciel==
 
==Choix techniques : matériel et logiciel==
Ligne 84 : Ligne 85 :
 
* 1x NUCLEO-F412ZG [https://fr.farnell.com/stmicroelectronics/nucleo-f412zg/carte-de-dev-nucleo-32-mcu/dp/2546572?CMP=GRHB-OCTOPART Farnell ref: NUCLEO-F412ZG]
 
* 1x NUCLEO-F412ZG [https://fr.farnell.com/stmicroelectronics/nucleo-f412zg/carte-de-dev-nucleo-32-mcu/dp/2546572?CMP=GRHB-OCTOPART Farnell ref: NUCLEO-F412ZG]
 
* 47x Boutons (clavier+reset) [https://fr.rs-online.com/web/p/interrupteurs-tactiles/4791491/ RS ref: 2-1437565-7]
 
* 47x Boutons (clavier+reset) [https://fr.rs-online.com/web/p/interrupteurs-tactiles/4791491/ RS ref: 2-1437565-7]
* 1x Résistance (reset) CMS 0603 10 kΩ [https://fr.rs-online.com/web/p/resistances-cms/6620681/ RS ref: ERA3APB103V]
+
* 1x Résistance (reset) 10 kΩ, CMS, Boitier: 0603 [https://fr.rs-online.com/web/p/resistances-cms/6620681/ RS ref: ERA3APB103V]
 
* 1x LED RGB [https://www.mouser.fr/ProductDetail/Lite-On/LTST-S310F2KT?qs=%2fha2pyFaduhUesG3HP2%252bqMX20OwVrcdB1hTndVaqTXz0WEN1WZFWYA%3d%3d Mouser ref: LTST-S310F2KT]
 
* 1x LED RGB [https://www.mouser.fr/ProductDetail/Lite-On/LTST-S310F2KT?qs=%2fha2pyFaduhUesG3HP2%252bqMX20OwVrcdB1hTndVaqTXz0WEN1WZFWYA%3d%3d Mouser ref: LTST-S310F2KT]
* 3x Résistance (SOT-23) CMS 0603 1 MΩ [https://fr.rs-online.com/web/p/resistances-cms/6662279/ RS ref: CPF0603B1M0E]
+
* 3x Résistance (SOT-23) 1 MΩ, CMS, Boitier: 0603 [https://fr.rs-online.com/web/p/resistances-cms/6662279/ RS ref: CPF0603B1M0E]
* 1x Résistance R-led CMS 0603 100 Ω [https://fr.rs-online.com/web/p/resistances-cms/6661951/ RS ref: CPF0603B100RE]
+
* 1x Résistance R-led 100 Ω, CMS, Boitier: 0603 [https://fr.rs-online.com/web/p/resistances-cms/6661951/ RS ref: CPF0603B100RE]
* 2x Résistance G-led/B-led CMS 0603 56 Ω [https://fr.rs-online.com/web/p/resistances-cms/0566519/ RS ref: ERA3AEB560V]
+
* 2x Résistance G-led/B-led 56 Ω, CMS, Boitier: 0603 [https://fr.rs-online.com/web/p/resistances-cms/0566519/ RS ref: ERA3AEB560V]
* 3x AO3424 SOT-23 [https://www.mouser.fr/ProductDetail/Infineon-Technologies/IRLML6346TRPBF?qs=%2fha2pyFadujQqUKUUm2J2Tjq0jvk%2fu1I8qEbV9q8%2fL2sJ%252bSNKEtLYuSBehKZupSx RS ref: 942-IRLML6346TRPBF]
+
* 3x Transistors, Modèle: AO3424, Boitier: SOT-23 [https://www.mouser.fr/ProductDetail/Infineon-Technologies/IRLML6346TRPBF?qs=%2fha2pyFadujQqUKUUm2J2Tjq0jvk%2fu1I8qEbV9q8%2fL2sJ%252bSNKEtLYuSBehKZupSx RS ref: 942-IRLML6346TRPBF]
  
 
===Logiciels===
 
===Logiciels===
  
*OS (Epsilon) : SDK [https://www.numworks.com/resources/engineering/software/sdk/]  
+
*OS (Epsilon) : [https://www.numworks.com/resources/engineering/software/sdk/ SDK]  
  
*Réalisation du PCB : Fritzing [http://fritzing.org/home/]
+
*Réalisation du PCB : [http://fritzing.org/home/ Fritzing]
 +
 
 +
*Réalisation des composants manquants pour Fritzing : [https://inkscape.org/fr/release/0.92.3/ InkScape]
  
 
==Liste des tâches à effectuer==
 
==Liste des tâches à effectuer==
Ligne 103 : Ligne 106 :
 
* Examiner les caractéristiques d'une NumWorks standard et établir un cahier des charges avec les encadrants du projet.
 
* Examiner les caractéristiques d'une NumWorks standard et établir un cahier des charges avec les encadrants du projet.
 
* Déterminer la liste des éléments qui correspondent au cahier des charges.
 
* Déterminer la liste des éléments qui correspondent au cahier des charges.
* Réaliser le PCB (Fritzing) (shield pour Shield Nucleo) permettant l'ajout des boutons et de la LED RGB.
+
* Réaliser le PCB (Fritzing) (shield pour Nucleo) permettant l'ajout des boutons et de la LED RGB.
 
* Procéder à l'assemblage et aux tests d'implémentation de l'OS.
 
* Procéder à l'assemblage et aux tests d'implémentation de l'OS.
* Effectuer les corrections si nécessaire.
+
* Effectuer les corrections au niveau d'Epsilon si nécessaire.
*
 
  
 
+
<s>
 
 
ST7781 (Controlleur LCD [http://www.hpinfotech.ro/ST7781.pdf ST7781.pdf])
 
 
 
ST7781R (Controlleur LCD [http://image.dfrobot.com/image/data/DFR0241/ST7781R_datasheet.pdf ST7781R.pdf])
 
  
 
===Partie 2 : Mise à jour d'une NumWorks via une autre NumWorks===
 
===Partie 2 : Mise à jour d'une NumWorks via une autre NumWorks===
  
*[] Déterminer s'il est possible ou non de réaliser cette fonctionnalité via USB.
+
* Déterminer s'il est possible ou non de réaliser cette fonctionnalité via USB.
*[] Développer, implémenter puis tester la fonctionnalité, au moyen des deux NumWorks fournies si nécessaire.
+
* Développer, implémenter puis tester la fonctionnalité, au moyen des deux NumWorks fournies si nécessaire.
*[] Dans le cas où il est impossible de réaliser en USB, chercher une méthode alternative pour communiquer avec le STM32
+
* Dans le cas où il est impossible de réaliser en USB, chercher une méthode alternative pour communiquer avec le STM32
 +
</s>
  
 
==Calendrier prévisionnel==
 
==Calendrier prévisionnel==
  
 
*Soutenance intermédiare : Vendredi 26 Octobre 16H-18H
 
*Soutenance intermédiare : Vendredi 26 Octobre 16H-18H
*Soutenance : 19 Décembre (à reconfirmer)
+
*Soutenance : Jeudi 20 Décembre
  
 
=Réalisation du Projet=
 
=Réalisation du Projet=
==Feuille d'heures==
+
== Semaine 1 - 17/09 - 21/09 ==
 +
 
 +
=== Analyse et appropriation du Projet ===
 +
 
 +
Le projet étant de réaliser le prototype de la calculatrice NumWorks qui est un projet Open-Source, j'ai commencé par me documenter sur leur site afin de déterminer quels choix ont été effectué pour la conception de cette dernière.
 +
 
 +
J'ai pu trouver sur [https://www.numworks.com/ numworks.com] les deux parties distinctes de mon projet. La première correspond à la partie [https://www.numworks.com/resources/engineering/hardware/ Hardware Engineering] et la seconde au [https://www.numworks.com/resources/engineering/software/ Software Engineering]
 +
 
 +
La partie Hardware comporte deux sections,
 +
* [https://www.numworks.com/resources/engineering/hardware/mechanical/ Mechanical Engineering] qui concerne les pièces plastiques de la calculatrice mais qui ne nous concerne pas dans le cadre d'un prototype.
 +
* La deuxième section, [https://www.numworks.com/resources/engineering/hardware/electrical/ Electrical Engineering] correspond à ce que nous voulons étudier afin de pouvoir réaliser un prototype.
 +
 
 +
Dans cette section nous pouvons y trouver les éléments/composants ainsi que leurs Schematics et Datasheets et le PCB de la NumWorks.
 +
 
 +
[[Fichier:NumWorks-Specifications.PNG]]
  
{| class="wikitable"
+
* Nous pouvons voir qu'ils utilisent un STM32 F412 VGT6 comme MCU, dans notre cas, il est proposé d'utiliser également un STM32, le F412ZGT6 dont les caractéristiques sont similaires, par son appartenance à la série G des STM32F412.
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total
+
Ils comportent tous deux un ARMv7-M Cortex-M4 fréquencé à 100MHz, 1Mo de mémoire flash et 256Ko de RAM.
 +
 
 +
* Le pilote d'affichage du contrôleur LCD : ST7789V
 +
Conformément au pilote, il sera nécessaire de rechercher un écran qui respecte les caractéristiques suivantes :
  
|-
+
- Affichage en 320*240 pixels
| Analyse du projet
 
| 0
 
| Mercredi 19/09 : 4h
 
Jeudi 20/09 : 6h
 
  
Vendredi 21/09 : 6h
+
- Bus 16-Bits
| Lundi 24/09 : 2h
 
Mercredi 26/09 : 3h
 
  
Jeudi 27/09 : 3h
+
- Pilote ST7789V (ou similaire pouvant répondre aux caractéristiques)
 +
 
 +
* LED RVB : LTST-S310F2KT
  
Vendredi 28/09 : 2h
+
== Semaine 2 - 24/09 - 28/09 ==
|
 
|
 
|
 
|
 
|
 
|
 
|
 
|
 
|
 
  
|-
+
=== Analyse des schematics et d'Epsilon sur Numworks.com ===
| Partie 1
 
| 0
 
| 0
 
| Lundi 24/09 : 1h
 
Mercredi 26/09 : 1h
 
  
Jeudi 27/09 : 2h
+
À l'adresse suivante, on peut consulter les schematics réalisés lors de la conception de la Numworks
  
Vendredi 28/09 : 2h
+
* [https://www.numworks.com/resources/engineering/hardware/electrical/schematics/ Numworks.com - Schematics]
| Lundi 01/10 : 3h
 
Mercredi 03/10 : 3h
 
  
Jeudi 04/10 : 3h
+
On remarque en premier un schéma avec le MCU et les pins utilisés, puis dans chaque section nous pouvons ensuite étudier chaque élément de la calculatrice.
  
Vendredi 05/10 : 3h
+
==== Matrice Clavier ====
| Lundi 01/10 : 3h
 
Mercredi 10/10 : 4h
 
  
| 0
+
Dans un premier temps, nous allons nous intéresser à la matrice clavier.
| Lundi 22/10 : 2h
 
Mercredi 24/10 : 5h
 
| 0
 
| 0
 
| 0
 
| 0
 
|
 
  
|-
+
C'est précisé, mais on peut remarquer l'absence de diode d'anti-ghosting. (voir liens plus bas "concevoir un clavier")
| Partie 2
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
|
 
  
|-
+
[[Fichier:Matrix-Keyboard.png |500px]]
| Rédaction du wiki
 
| 1h
 
| 1h30
 
| 1h
 
| 0
 
| 2h
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
| 0
 
|
 
|}
 
  
==Prologue==
+
Les signaux étant "Actifs à zéro" il est tout à fait possible de réaliser cette matrice clavier avec des boutons
==Semaine 1==
 
===Analyse et appropriation du Projet===
 
Le projet étant de réaliser le prototype de la calculatrice NumWorks qui est un projet Open-Source, j'ai commencé par me documenter sur leur site afin de déterminer quels choix ont été effectué pour la conception de cette dernière.
 
  
J'ai pu trouver sur [https://www.numworks.com/ numworks.com] les deux parties distinctes de mon projet. La première correspond à la partie [https://www.numworks.com/resources/engineering/hardware/ Hardware Engineering] et la seconde au [https://www.numworks.com/resources/engineering/software/ Software Engineering]
+
[https://bepo.fr/wiki/Atelier_referencestechniques Concevoir un clavier]
  
La partie Hardware comporte deux sections,
+
[https://www.dribin.org/dave/keyboard/one_html/ Keyboard Matrix Help]
* [https://www.numworks.com/resources/engineering/hardware/mechanical/ Mechanical Engineering] qui concerne les pièces plastiques de la calculatrices mais qui ne nous concerne pas dans le cadre d'un prototype.
 
* La deuxième section, [https://www.numworks.com/resources/engineering/hardware/electrical/ Electrical Engineering] est correspond à ce que nous voulons étudier afin de pouvoir réaliser un prototype.
 
  
Dans cette section nous pouvons y trouver les éléments/composants ainsi que leur Schematics et Datasheets et le PCB de la NumWorks.
+
==== LED RGB ====
  
[[Fichier:NumWorks-Specifications.PNG]]
+
Pour ce qui est de la LED, il s'agit d'un modèle qui comporte 4 entrées, une pour chaque couleur et une pour l'alimentation.
  
* Nous pouvons voir qu'ils utilisent un STM32 F412 VGT6 comme MCU, dans notre cas, il est proposé d'utiliser également un STM32, le F412ZGT6 dont les caractéristiques sont similaires, par son appartenance à la série G des STM32F412.
+
Chaque couleur est gérée via un transistor lui même géré par le pin associé.
Ils comportent tout deux un ARMv7-M Cortex-M4 fréquencé à 100MHz, 1Mo de mémoire flash et 256Ko de RAM.  
 
  
* Le pilote d'affichage du contrôleur LCD : ST7789V
+
[[Fichier:RGB-LED.png|500px]]
Conformément au pilote, il sera nécessaire de rechercher un écran qui respecte les caractéristiques suivantes :
 
  
- Affichage en 320*240
+
==== Bouton Reset ====
  
- bus 16-Bit
+
Rien de plus simple qu'un bouton poussoir, on pourra utiliser le même type de bouton que ceux de la matrice clavier en cas de surplus.
  
- Pilote ST7789V (ou similaire pouvant répondre aux caractéristiques)
+
[[Fichier:Reset-Button.png|500px]]
  
* LED RVB : LTST-S310F2KT
+
== Semaine 3 - 01/10 - 05/10 ==
  
==Semaine 2/3==
 
 
===Recherche de matériel===
 
===Recherche de matériel===
 +
 +
==== MCU ====
  
 
Nous allons utiliser une carte NUCLEO-F412ZG pour mettre en oeuvre le prototype.
 
Nous allons utiliser une carte NUCLEO-F412ZG pour mettre en oeuvre le prototype.
Ligne 249 : Ligne 203 :
 
Il faudra cependant réaliser un PCB pour une matrice clavier similaire à celle utilisée par la Numworks ainsi que la LED RGB.
 
Il faudra cependant réaliser un PCB pour une matrice clavier similaire à celle utilisée par la Numworks ainsi que la LED RGB.
  
'''Matrice Clavier'''
+
==== Le clavier ====
 +
 
 +
Nous voulons réaliser une matrice clavier, pour cela nous allons utiliser des boutons poussoirs à 4 pins [https://fr.rs-online.com/web/p/interrupteurs-tactiles/4791491/ RS: 479-1491]
  
[[Fichier:Matrix-Keyboard.png]]
+
[[Fichier:Bouton-schema.png]]
  
Les signaux étant "Actifs à zéro" il est tout à fait possible de réaliser cette matrice clavier avec des boutons
+
Ces derniers, grâce à leurs dimensions, présentent l'avantage de permettre à une route de passer sous le composant, entre les pattes, et ainsi éviter de court-circuiter l'ensemble.
 +
 
 +
NB: Sur le schéma 1 et 2 ainsi que 3 et 4 sont '''toujours''' connectés, lorsque le bouton est enclenché, 2-4 et 1-3 sont connectés.
 +
 
 +
==== La Led et les transistors ====
 +
 
 +
En ce qui concerne les transistors, nous avons besoin d'un modèle qui correspond à celui utilisé par la Numworks:
 +
 
 +
* Datasheet [http://aosmd.com/pdfs/datasheet/AO3424.pdf AO3424]
 +
* Boitier : SOT23
 +
 
 +
Initialement j'avais proposé le transistor [https://www.mouser.fr/ProductDetail/Infineon-Technologies/IRLML6346TRPBF?qs=%2fha2pyFadujQqUKUUm2J2Tjq0jvk%2fu1I8qEbV9q8%2fL2sJ%252bSNKEtLYuSBehKZupSx IRLML6346TRPBF] d'Infineon dans la fiche de commande mais ça a ensuite été regroupé avec le [https://fr.rs-online.com/web/p/transistors-numeriques/0287667/ RS: 287-667] utilisé par un autre projet.
 +
 
 +
Au niveau de la LED, le modèle utilisé par la Numworks était directement disponible.
 +
 
 +
* [https://www.mouser.fr/ProductDetail/Lite-On/LTST-S310F2KT?qs=%2fha2pyFaduhUesG3HP2%252bqMX20OwVrcdB1hTndVaqTXz0WEN1WZFWYA== LTST-S310F2KT]
 +
 
 +
==== L'écran LCD ====
 +
 
 +
La Numworks utilise un écran LCD fait sur mesure en 16 bits parallèles.
 +
 
 +
Dans le cadre de ce projet, il serait possible d'utiliser l'écran d'une des deux Numworks à disposition mais cela nécessite l'ajout d'un '''connecteur 31 pins''' sur le PCB
 +
 
 +
[[Fichier:LCD Numworks.png]]
 +
 
 +
Nous savons que le driver utilisé par leur LCD est le '''ST7789V'''.
 +
 
 +
Un shield a été proposé en raison de son appartenance à la même famille de contrôleur ('''ST77XX''').
 +
 
 +
Il s'agit d'un [http://www.smokeandwires.co.nz/blog/a-2-4-tft-touchscreen-shield-for-arduino/ shield pour Arduino] (la NUCLEO-F412ZG possède des pins compatible avec Arduino)
 +
 
 +
N'étant plus disponible, une petite recherche a cependant permit de trouver un écran aux caractéristiques similaires dont le contrôleur est indiqué comme étant le '''ST7781R''' ([https://www.ebay.fr/itm/Keyes-240x320-Touch-Colour-LCD-Shield-EB-071-2-4-inch-RGB-UNO-Flux-Workshop/122629960673?hash=item1c8d50b3e1:g:wb4AAOSwTQhZgv~~ LCD TFT Keyes])
 +
 
 +
== Semaine 4 - 08/10 - 12/10 ==
 +
 
 +
=== Vérifications sur le Shield LCD TFT ===
 +
 
 +
L'écran est arrivé en milieu de semaine, j'ai pu commencer à vérifier son fonctionnement.
 +
 
 +
==== Test avec Selectronic UNO (Arduino) ====
 +
 
 +
Afin de vérifier le contrôleur d'affichage du shield ainsi que son bon fonctionnement, j'ai utilisé une carte Selectronic UNO (via Arduino IDE).
 +
 
 +
[[Fichier:Selectronic uno bochage.png|300px]]
 +
 
 +
J'ai utilisé un des scripts fournis dans la bibliothèque d'Adafruit-TFTLCD pour utiliser l'écran.
 +
 
 +
Après avoir modifié quelques lignes de code, j'ai réussi à faire fonctionner l'écran.
 +
 
 +
J'ai également pu, conformément aux datasheets des pilotes des contrôleurs, à afficher celui utilisé par ce dernier dans le moniteur série. Il se trouve dans le registre 0x0
 +
 
 +
[[Fichier:Test Arduino.jpg|400px]]
 +
 
 +
Cependant, le contrôleur de l'écran n'est finalement pas le ST7781R (0x7783) comme annoncé dans la fiche produit lorsque l'écran a été commandé mais le ILI9325 (0x9325).
 +
 
 +
Le fonctionnement et les caractéristiques qui diffèrent du ST7781R sont encore à déterminer.
 +
 
 +
=== Documentation sur les Drivers ST7789V, ST7781R et ILI9325 ===
 +
 
 +
'''Type et taille de bus :'''
  
[https://bepo.fr/wiki/Atelier_referencestechniques Concevoir un clavier]
+
*[https://www.newhavendisplay.com/appnotes/datasheets/LCDs/ST7789V.pdf ST7789V] (Numworks) : 16 Bits parallèles
 +
*[http://image.dfrobot.com/image/data/DFR0241/ST7781R_datasheet.pdf ST7781R] (Prévu) : 16 Bits parallèles
 +
*[https://cdn-shop.adafruit.com/datasheets/ILI9325.pdf ILI9325] (Actuel) : 16 Bits parallèles
  
[https://www.dribin.org/dave/keyboard/one_html/ Keyboard Matrix Help]
+
==== Test avec la NUCLEO ====
  
'''LED RGB'''
+
Je vais également avoir à tester l'écran sur la NUCLEO avant de tenter d'implémenter Epsilon et directement effectuer les modifications nécessaires.
  
[[Fichier:RGB-LED.png]]
+
Il y a également moyen d'utiliser Arduino IDE sur la NUCLEO : [https://www.instructables.com/id/Quick-Start-to-STM-Nucleo-on-Arduino-IDE/ Quick Start to STM Nucleo on Arduino IDE]
  
'''Bouton Reset'''
+
== Semaine 5 - 15/10 - 19/10 ==
  
[[Fichier:Reset-Button.png]]
+
===Réception des commandes Farnell et Mouser, vérification et test du matériel===
  
==Semaine 4/5/6==
+
Les commandes sont arrivées au cours de la semaine,
  
===Vérification et test du matériel===
+
* Farnell : Mardi 16 Octobre
 +
* Mouser : Vendredi 19 Octobre
  
 
====NUCLEO-F412ZG====
 
====NUCLEO-F412ZG====
Ligne 285 : Ligne 303 :
 
[[Fichier:STM32F412xG caracteristics.PNG|400px]]
 
[[Fichier:STM32F412xG caracteristics.PNG|400px]]
  
'''LQFP100 (NumWorks - STM32F412VGT6)'''
+
==== LQFP100 (NumWorks - STM32F412VGT6) ====
  
 
[[Fichier:Schematic LQFP100.PNG|600px]]
 
[[Fichier:Schematic LQFP100.PNG|600px]]
  
'''LQFP144 (NUCLEO-F412ZG - STM32F412ZGT6)'''
+
==== LQFP144 (NUCLEO-F412ZG - STM32F412ZGT6) ====
  
 
[[Fichier:Schematic LQFP144.PNG|600px]]
 
[[Fichier:Schematic LQFP144.PNG|600px]]
  
[[Fichier:NUCLEO-F412ZG-PINS.PNG|400px]] [[Fichier:TFT-LCD-Shield-01.jpg|400px]]
+
==== Les pins et correspondances ====
 +
 
 +
===== keyboard.h =====
 +
 
 +
Les pins présentés au niveau des broches sont indiqués sur la figure 13 de la datasheet (Page 35/82)
 +
 
 +
[[Fichier:NUCLEO-F412ZG-PINS.PNG|400px]]
 +
 
 +
On peut par exemple remarquer l'absence de certains pins nécessaires qui sont mentionnés dans les fichier '''.h''' d'Epsilon (<code>ion/src/device</code>) ([https://github.com/numworks/epsilon/tree/master/ dépot git d'Epsilon]).
 +
 
 +
Par exemple, pour la réalisation de la matrice clavier, il est indiqué que les GPIO C et GPIO E sont utilisés de PC0 à PC5 ainsi que PE0 à PE8 ([https://github.com/numworks/epsilon/blob/master/ion/src/device/keyboard.h keyboard.h])
 +
 
 +
Cependant, sur la figure 13,
 +
 
 +
*'''<code>PE0</code>''' est sur '''CN10 (33)'''
 +
*'''<code>PE1</code>''' est '''absent'''
 +
*'''<code>PE2</code>''' est sur '''CN9 (14)'''
 +
*'''<code>PE3</code>''' est sur '''CN9 (22)'''
 +
*'''<code>PE4</code>''' est sur '''CN9 (16)'''
 +
*'''<code>PE5</code>''' est sur '''CN9 (18)'''
 +
*'''<code>PE7</code>''' est sur '''CN10 (20)'''
 +
*'''<code>PE8</code>''' est sur '''CN10 (18)'''
 +
 
 +
Dans le cas du clavier, cela ne pose pas un grand soucis, il serait possible d'utiliser un autre pin disponible et effectuer la modification dans le fichier keyboard.h
 +
 
 +
----
 +
 
 +
'''EDIT S13''' : Toutefois le pin '''PE1''' est présent sur '''CN11 (61)''' qui est sur le côté gauche de la carte NUCLEO
 +
 
 +
* Page 15/82 de la datasheet)
 +
 
 +
[[Fichier:CN11-CN12.png|400px]]
 +
 
 +
L'organisation des pins sur '''CN11''' et '''CN12''' est décrite aux pages 70 et 71 de la manière suivante
 +
 
 +
[[Fichier:CN11-CN12-P70.png|400px]]
 +
 
 +
== Semaine 6 - 22/10 - 26/10 ==
 +
 
 +
* Remise en forme du wiki en vue de la soutenance intermédiaire
 +
* Progression sur l'étude des pins de la NUCLEO
 +
 
 +
=== Soutenance Intermédiaire ===
 +
 
 +
Au vue de l'absence de résultat à cette date (Vendredi 26/10), les objectifs du projet ont été revu à la baisse.
 +
 
 +
* Suppression de la partie USB du projet (nécessité de compétences en programmation embarquée)
 +
* Conception et réalisation du shield clavier / LED
 +
* Éventuellement réalisation d'un shield de reroutage pour connecter correctement l'écran sur la Nucleo (respecter les connexions décrites dans le fichier ion/src/device/display.h d'Epsilon)
 +
* Compiler et charger Epsilon
 +
* Tester et revoir le prototype jusqu'à ce qu'Epsilon fonctionne correctement
 +
 
 +
== Semaine 7 - 29/10 - 02/11 ==
 +
 
 +
=== Vacances Scolaires ===
 +
 
 +
* première étude au brouillon et début de schémas papier en vue de réaliser le routage du PCB
 +
 
 +
== Semaine 8 - 05/11 - 21/11 ==
 +
 
 +
=== Étude sur la nécessité d'un reroutage au niveau des pins ===
 +
 
 +
En prenant en compte les nouveaux objectifs, j'ai commencé à étudier la liste des pins dans les fichiers .h d'Epsilon en comparant avec les pins disponibles sur la carte NUCLEO
 +
 
 +
L'étude des pins a été réalisé en fonction de la datasheet de la carte NUCLEO-F412ZG (Partie des pins : [https://archives.plil.fr/jdupont3/P5-Numworks/blob/master/Doc/stm32f412_pin-description.pdf stm32F412_pin-description.pdf])
 +
 
 +
* '''REMARQUE''' : Les pins appartenant aux '''CN11''' et '''CN12''' dans les tableaux qui suivent ont été découverts à l'issue de la semaine 13.
 +
(Lors d'une relecture de la datasheet vis-à-vis d'une incohérence sur le fait de ne pas avoir trouvé les pins en question et qu'ils étaient irremplaçable en raison d'une fonction précise)
 +
 
 +
==== backlight.h ====
 +
 
 +
{| class="wikitable"
 +
! PIN !! Rôle !! Mode  !! Fonction !! Localisation sur la NUCLEO
 +
 
 +
|-
 +
| PC6
 +
| Backlight Enable
 +
| Output
 +
|
 +
| '''CN7 (1)'''
 +
 
 +
|}
 +
 
 +
Par rapport au schematic, PC6 est connecté au '''LCD_LIGHT''' du '''RT9365GQW'''
 +
 
 +
[[Fichier:Backlight.png|400px]]
 +
 
 +
NB: Initialement, il n'était pas prévu d'utiliser un écran de NumWorks, mais un shield LCD.
 +
 
 +
//TODO : vérifier si l'absence du RT9365GQW peut poser problème
 +
 
 +
==== base64.h ====
 +
 
 +
À priori aucun changement à effectuer
 +
 
 +
==== battery.h ====
 +
 
 +
{| class="wikitable"
 +
! PIN !! Rôle !! Mode  !! Fonction !! Localisation sur la NUCLEO
 +
 
 +
|-
 +
| PA0
 +
| BAT_CHRG
 +
| Input, pulled up
 +
| Low = charging, high = full
 +
| '''CN10 (29)'''
 +
|-
 +
| PA1
 +
| VBAT_SNS
 +
| Analog
 +
| ADC1_1
 +
| '''CN11 (30)'''
 +
 
 +
|}
 +
 
 +
[[Fichier:VBAT Mesure.png|400px]]
 +
 
 +
* On pourrait voir pour remplacer VBAT par un PIN +3V3 pour ignorer l'aspect mesure de la batterie
 +
 
 +
==== console.h ====
 +
 
 +
{| class="wikitable"
 +
! PIN !! Rôle !! Mode  !! Fonction !! Localisation sur la NUCLEO
 +
 
 +
|-
 +
| PC11
 +
| UART3 RX
 +
| Alternate Function
 +
| USART3_RX
 +
| '''CN8 (10)'''
 +
|-
 +
| PD8
 +
| UART3 TX
 +
| Alternate Function
 +
| USART3_TX
 +
| '''CN12 (10)'''
 +
 
 +
|}
 +
 
 +
* Dans le cas de la fonction '''USART3_TX''' le pin '''PD8 (CN12 (10))''' peut être remplacé par '''PB10 (Présent sur CN10 (32))''' ou '''PC10 (Présent sur CN8 (6))''' qui disposent également de ces fonctions alternatives
 +
 
 +
[[Fichier:USART PD8 console h.png|400px]]
 +
 
 +
==== device.h ====
 +
 
 +
Aucune modification prévue
 +
 
 +
==== display.h ====
 +
 
 +
{| class="wikitable"
 +
! PIN !! Rôle !! Mode  !! Fonction !! Localisation sur la NUCLEO
 +
 
 +
|-
 +
| PA2
 +
| LCD D4
 +
| Alternate Function 12
 +
| FSMC_D4
 +
| '''CN10 (11)'''
 +
|-
 +
| PA3
 +
| LCD D5
 +
| Alternate Function 12
 +
| FSMC_D5
 +
| '''CN9 (1)'''
 +
|-
 +
| PA4
 +
| LCD D6
 +
| Alternate Function 12
 +
| FSMC_D6
 +
| '''CN7 (17)'''
 +
|-
 +
| PB12
 +
| LCD D13
 +
| Alternate Function 12
 +
| FSMC_D13
 +
| '''CN7 (7)'''
 +
|-
 +
| PB14
 +
| LCD Power
 +
| Output
 +
|
 +
| '''CN12 (28)'''
 +
|-
 +
| PD0
 +
| LCD D2
 +
| Alternate Function 12
 +
| FSMC_D2
 +
| '''CN9 (25)'''
 +
|-
 +
| PD1
 +
| LCD D3
 +
| Alternate Function 12
 +
| FSMC_D3
 +
| '''CN9 (27)'''
 +
|-
 +
| PD4
 +
| LCD Read Signal
 +
| Alternate Function 12
 +
| FSMC_NOE
 +
| '''CN9 (8)'''
 +
|-
 +
| PD5
 +
| LCD Write Signal
 +
| Alternate Function 12
 +
| FSMC_NWE
 +
| '''CN9 (6)'''
 +
|-
 +
| PD7
 +
| LCD Chip Select
 +
| Alternate Function 12
 +
| FSMC_NE1
 +
| '''CN7 (17)'''
 +
|-
 +
| PD9
 +
| LCD D14
 +
| Alternate Function 12
 +
| FSMC_D14
 +
| '''CN11 (69)'''
 +
|-
 +
| PD10
 +
| LCD D15
 +
| Alternate Function 12
 +
| FSMC_D15
 +
| '''CN12 (65)'''
 +
|-
 +
| PD11
 +
| LCD data/command
 +
| Alternate Function 12
 +
| FSMC_A16
 +
| '''CN10 (23)'''
 +
|-
 +
| PD14
 +
| LCD D0
 +
| Alternate Function 12
 +
| FSMC_D0
 +
| '''CN7 (16)'''
 +
|-
 +
| PD15
 +
| LCD D1
 +
| Alternate Function 12
 +
| FSMC_D1
 +
| '''CN7 (16)'''
 +
|-
 +
| PE9
 +
| LCD Reset
 +
| Output
 +
|
 +
| '''CN10 (4)'''
 +
|-
 +
| PE10
 +
| LCD D7
 +
| Alternate Function 12
 +
| FSMC_D7
 +
| '''CN10 (24)'''
 +
|-
 +
| PE11
 +
| LCD D8
 +
| Alternate Function 12
 +
| FSMC_D8
 +
| '''CN10 (6)'''
 +
|-
 +
| PE12
 +
| LCD D9
 +
| Alternate Function 12
 +
| FSMC_D9
 +
| '''CN10 (26)'''
 +
|-
 +
| PE13
 +
| LCD D10
 +
| Alternate Function 12
 +
| FSMC_D10
 +
| '''CN10 (10)'''
 +
|-
 +
| PE14
 +
| LCD D11
 +
| Alternate Function 12
 +
| FSMC_D11
 +
| '''CN10 (28)'''
 +
|-
 +
| PE15
 +
| LCD D12
 +
| Alternate Function 12
 +
| FSMC_D12
 +
| '''CN10 (30)'''
 +
 
 +
|}
 +
 
 +
* LCD_EXTC : PB10 (CN10 (32))
 +
* LCD_TE : PB13 (CN12 (30))
 +
 
 +
[[Fichier:LCD Numworks.png]]
 +
 
 +
==== flash.h ====
 +
 
 +
Aucune modification prévue
 +
 
 +
==== led.h ====
 +
 
 +
{| class="wikitable"
 +
! PIN !! Rôle !! Mode  !! Fonction !! Localisation sur la NUCLEO
 +
 
 +
|-
 +
| PB0
 +
| LED Blue
 +
| Alternate Function 2
 +
| TIM3_CH3
 +
| '''CN10 (31)'''
 +
|-
 +
| PB1
 +
| LED Green
 +
| Alternate Function 2
 +
| TIM3_CH4
 +
| '''CN10 (7)'''
 +
|-
 +
| PC7
 +
| LED Red
 +
| Alternate Function 2
 +
| TIM3_CH2
 +
| '''CN7 (11)'''
 +
 
 +
|}
 +
 
 +
==== sd_card.h ====
 +
 
 +
{| class="wikitable"
 +
! PIN !! Rôle !! Mode  !! Fonction !! Localisation sur la NUCLEO
 +
 
 +
|-
 +
| PA8
 +
| SDIO D1
 +
| Alternate Function 12
 +
| SDIO_D1
 +
| '''CN12 (23)'''
 +
|-
 +
| PB4
 +
| SDIO D0
 +
| Alternate Function 12
 +
| SDIO_D0
 +
| '''CN7 (19)'''
 +
|-
 +
| PB5
 +
| SDIO D3
 +
| Alternate Function 12
 +
| SDIO_D3
 +
| '''CN7 (13)'''
 +
|-
 +
| PB15
 +
| SDIO CLK
 +
| Alternate Function 12
 +
| SDIO_CK
 +
| '''CN7 (3)'''
 +
|-
 +
| PC10
 +
| SDIO D2
 +
| Alternate Function 12
 +
| SDIO_D2
 +
| '''CN8 (6)'''
 +
|-
 +
| PD2
 +
| SDIO CMD
 +
| Alternate Function 12
 +
| SDIO_CMD
 +
| '''CN8 (12)'''
 +
 
 +
|}
  
====L'écran LCD====
+
* '''PA8''' pour '''SDIO_D1''' peut être remplacé par '''PC9 (CN8 (4))'''
  
Afin de vérifier le contrôleur d'affichage du shield ainsi que son bon fonctionnement, j'ai utilisé une carte Selectronic UNO (via Arduino IDE).
+
* Manquant : SD_POW_EN -> PB9 (CN7 (4))
 +
 
 +
==== swd.h ====
 +
 
 +
{| class="wikitable"
 +
! PIN !! Rôle !! Mode  !! Fonction !! Localisation sur la NUCLEO
 +
 
 +
|-
 +
| PA13
 +
| SWDIO
 +
| Alternate Function 0
 +
| JTMS-SWDIO
 +
| '''CN11 (13)'''
 +
|-
 +
| PA14
 +
| SWCLK
 +
| Alternate Function 0
 +
| JTCK-SWCLK
 +
| '''CN11 (15)'''
 +
|-
 +
| PB3
 +
| SWO
 +
| Alternate Function 0
 +
| JTDO-SWO
 +
| '''CN7 (15)'''
 +
 
 +
|}
 +
 
 +
==== timing.h ====
 +
 
 +
Aucune modification prévue
 +
 
 +
==== usb.h ====
 +
 
 +
{| class="wikitable"
 +
! PIN !! Rôle !! Mode  !! Fonction !! Localisation sur la NUCLEO
 +
 
 +
|-
 +
| PA9
 +
| VBUS
 +
| Input, pulled down
 +
|
 +
| '''CN12 (21)'''
 +
|-
 +
| PA11
 +
| USB D-
 +
| Alternate Function 10
 +
| USB_FS_DM
 +
| '''CN12 (14)'''
 +
|-
 +
| PA12
 +
| USB D+
 +
| Alternate Function 10
 +
| USB_FS_DP
 +
| '''CN12 (12)'''
 +
 
 +
|}
 +
 
 +
==== wakeup.h ====
 +
 
 +
Aucune modification prévue
 +
 
 +
== Semaine 9 - 12/11 - 21/11 ==
 +
 
 +
=== Implémentation de la NUCLEO-F412ZG sous Fritzing ===
 +
 
 +
Cette partie a été modifiée à plusieures reprises en fonction des changements que j'ai apporté à mes fichiers durant les semaines 10/11/12
 +
 
 +
==== Récupération des fichiers d'une carte Arduino Uno ====
 +
 
 +
En raison de l'indisponibilité sous Fritzing de la carte NUCLEO-F412ZG utilisée dans le cadre du projet, j'ai du réaliser moi même les différentes vues du composant (Breadboard, Schematic et PCB) sous InkScape puis les implémenter avec l'utilitaire de création de composant.
 +
 
 +
Afin d'éviter un éventuel problème de dimensionnement, et en sachant que les pins présents sur la carte physique qui sont à réaliser sous Fritzing sont agencés de manière similaire à ceux d'une Arduino UNO,
 +
 
 +
J'ai commencé par extraire les vues d'une carte Arduino UNO pour y ajouter les pins nécessaires.
 +
 
 +
'''Ce que nous cherchons à réaliser : '''
 +
 
 +
* Les pins roses sont ceux de l'Arduino
 +
* Les bleus sont ceux à ajouter
 +
 
 +
[[Fichier:NUCLEO-F412ZG-PINS.PNG|400px]]
 +
 
 +
* Ouvrir Fritzing, trouver le composant dans les listes puis clic-droit, '''Créer un nouveau composant...''' pour arriver à la vue '''Platine d'essai''' ('''Breadboard''')
 +
Dans l'onglet '''Fichier''' aller dans '''Voir dans le dossier'''
 +
 
 +
[[Fichier:Fritzing recuperation arduino uno.png|400px]]
 +
 
 +
* Récupérer le fichier svg
 +
 
 +
[[Fichier:Fritzing liste breadboard svg.png|400px]]
 +
 
 +
* Répeter l'opération pour la vue '''Circuit imprimé'''
 +
 
 +
* Pour la vue '''Schématique''' on peut la récupérer également mais on ne l'utilisera que pour s'en inspirer afin de réaliser notre propre fichier.
 +
 
 +
===== Commandes utiles et réglages sous Inkscape =====
 +
 
 +
* L'onglet '''Fichier''' > '''Propriétés du document''' / <code>Maj + Ctrl + X</code> : Permet de définir l''''unité''' utilisée, les '''dimensions''' du document, mais aussi la '''grille''' et ses dimensions
 +
[[Fichier:Inkscape reglage document.JPG|400px]]
 +
* L'onglet '''Objet''' > '''Objets...''' : Donne accès au objets présents sur l'esquisse
 +
* <code>Maj + Ctrl + X</code> : Ouvre l'éditeur XML
 +
* <code>Maj + Ctrl + A</code> : Permet de positionner un objet ou un groupe d'objets relativement à un autre objet ou groupe
 +
* <code>Maj + Ctrl + F</code> : L'éditeur de formes et contours
 +
 
 +
*'''Remarque''' : L'ordre dans lequel les objets apparaissent dans la fenêtre des objets est l'inverse de celui dans lequel ils sont listés dans la fenêtre XML
 +
*'''Remarque 2''' : Donner un nom dans la fenêtre objet ne donne qu'un '''label''' ('''inkscape:label''' dans la fenêtre XML), l''''id''' d'un objet doit être modifié directement dans la partie XML
 +
 
 +
==== L'onglet Connecteurs ====
 +
 
 +
Dans cette partie vous avez le nombre de connecteurs suivi de la liste de ces derniers.
 +
 
 +
Chacun comporte:
 +
*Un nom
 +
*Une description
 +
*Un id
 +
 
 +
Le nom et la description sont les noms utilisés dans les 3 premières vues et s'affichera lorsque vous connecterez des pins/pads dans les différentes vues.
 +
 
 +
L'id lui est important pour la partie XML, l'idée est de faire le XML lors de la réalisation des vues sous Inkscape pour ENSUITE générer les pins/pad qui seront finalement détectés automatiquement lors de l'ajout des vue pour le composant
 +
 
 +
==== Les Métadonnées ====
 +
 
 +
Facultatif dans le cadre d'un composant partiel, à remplir selon les besoins.
 +
 
 +
==== La vue Breadboard (Platine d'essai) ====
 +
 
 +
Ici, il s'agit simplement de donner l'aspect visuel qu'aura le composant dans la partie Platine d'essai où nous réaliserons les câblages sans prêter attention au fait que les fils se croisent.
 +
 
 +
Dans notre cas, nous avons uniquement besoin d'ajouter les broches manquantes.
 +
 
 +
Les paramètres importants sont :
 +
* Les distances entre chaque pin (0.1" entre chaque pin, soit 2.54 mm -> réglage de la grille à 0.1" en X et en Y)
 +
* Les dimensions de la carte (Dans notre cas, c'est un composant partiel réalisé à partir d'un composant déjà présent)
 +
* Le futur '''id''' de chaque pin (nous avons 100 pins femelles donc : de '''connector0pin''' à '''connector99pin''')
 +
 
 +
En partant d'une Arduino Uno comme indiqué précédemment, après les modification minimales nécessaires nous arrivons à ce résultat
 +
 
 +
[[Fichier:Fritzing breadboard 2.JPG|800px]]
 +
 
 +
* '''Pour cette vue''', on remarque dans l'éditeur XML que seuls les pins ont un id correctement formaté, le reste n'est pas absolument nécessaire
 +
 
 +
==== La vue Schematic (Schématique) ====
 +
 
 +
[[Fichier:Fritzing Schematics 1.JPG|800px]]
 +
 
 +
//TODO : refaire une version mieux organisée (par CN) de la vue Schematic
 +
 
 +
==== La vue PCB (Circuit Imprimé) ====
 +
 
 +
En partant de la vue PCB de l'Arduino Uno on arrive en effectuant les modification nécessaires sur les parties '''silkscreen''' (le dessus) et '''silkscreen0''' (le dessous)
 +
 
 +
*Remarque: le groupe silkscreen0 pourrait être completement supprimée dans notre cas
 +
 
 +
[[Fichier:Fritzing PCB 1.JPG|800px]]
 +
 
 +
*'''Fonctionnement de Fritzing''' : les pins/pads doivent être placés dans le groupe '''copper0''' lui-même placé dans le groupe '''copper1'''
 +
 
 +
Après les modifications effectuées, nous obtenons la vue PCB de notre carte NUCLEO
 +
 
 +
[[Fichier:Fritzing PCB 2.JPG|800px]]
 +
 
 +
==== L'icône ====
 +
 
 +
Il est possible via l'onglet '''Fichier''' de copier directement l'une des 3 vues précédentes pour en faire l'icone
 +
 
 +
== Semaine 10 - 19/11 - 21/11 ==
 +
 
 +
=== Correctifs apportés successivement aux vues Breadboard, Schematics et PCB ===
 +
 
 +
* Utilisation des codes couleurs indiqués dans les [http://fritzing.org/fritzings-graphic-standards/ normes graphiques de Fritzing]
 +
 
 +
[[Fichier:Fritzing normes.JPG]]
 +
 
 +
* Utilisation de la police [http://fritzing.org/media/uploads/learning/graphic_standards/fontsandtemplates.zip OCRA], les autres polices n'étant pas supportées.
 +
 
 +
== Semaine 11 - 26/11 - 30/11 ==
 +
 
 +
=== Correctifs apportés successivement aux vues Schematics et PCB ===
 +
 
 +
* Reparamétrage des propriétés du document (unités et grille) avec vérification des distances et corrections si besoin
 +
* Résolution de l'absence et/ou l'incohérence dans la détection des pins (différence entre l''''id''' et le '''inkscape:label''')
 +
* Résolution dans la vue PCB du non-affichage de la carte et des pins invisible à l'exception de certains pins aux id incohérents (l'ordre dans lequel les groupes doivent être placés dans l'éditeur XML)
 +
 
 +
== Semaine 12 - 3/12 - 7/12 ==
 +
 
 +
=== Correctifs et Réalisation du PCB sous Fritzing ===
 +
 
 +
* Résolution du conflit dans la vue PCB sous Fritzing entre '''copper1''' et '''copper0''' en modifiant l'indentation des noeuds
 +
 
 +
== Semaine 13 - 10/12 - 14/12 ==
 +
 
 +
=== Ajout de la Led et du clavier au PCB ===
 +
 
 +
=== Nécessité de réaliser un connecteur incluant 31 pins pour Fritzing ===
 +
 
 +
L'écran de la NumWorks étant fait sur mesure, le connecteur 31 pins l'est également.
 +
 
 +
Ainsi, Il va falloir implémenter un autre composant sous Fritzing qui correspond au connecteur 31 pins pour ensuite faire le routage sur le PCB
 +
 
 +
Comme il s'agit de réaliser l'adaptation d'un format pins vers un format compatible avec un écran LCD nous pouvons utiliser [https://www.amazon.fr/gp/product/B01MRXIDKE/ref=oh_aui_detailpage_o00_s01?ie=UTF8&psc=1&fbclid=IwAR1ExvBULf9HsFyMw3j5sVDIsf6RBdVLtXAEjVa_VecU4t2x_Gm4DVBxotg ceci] comme exemple, attention, il s'agit d'un modèle à 34 pins
 +
 
 +
Celui-ci comporte 34 pins et deux faces, l'une avec des connecteurs espacés de '''0.5 mm''' et l'autre de '''0.1 mm'''
  
[[Fichier:Selectronic uno bochage.png|300px]]
+
[[Fichier:Connecteur-34.jpg|400px]] [[Fichier:Connecteur-34-verso.jpg|400px]]
  
J'ai utilisé un des scripts fournis dans la bibliothèque d'Adafruit-TFTLCD pour utiliser l'écran.
+
Toutefois, au niveau du maintient, en l'absence de connecteur pour maintenir la bande il faudrait soit souder directement la bande à l'adaptateur soit maintenir la bande en place manuellement
  
Après avoir modifié quelques lignes de code, j'ai réussi a faire fonctionner l'écran.
+
== Semaine 14 - 17/12 - 20/12 ==
  
J'ai également pu, conformément aux datasheets des pilotes de contrôleurs afficher celui utilisé par ce dernier dans le moniteur série, il se trouve dans le registre 0x0
+
* Mise à jour du wiki
 +
* Soudure des connecteurs
  
[[Fichier:Test Arduino.jpg|400px]]
+
=== Corrections apportées aux schémas ===
  
Cependant, le contrôleur de l'écran n'est finalement pas le ST7781R (0x7783) comme annoncé dans la fiche produit lorsque l'écran a été commandé mais le ILI9325 (0x9325).
+
* Schéma des pins de la NUCLEO uniquement
  
Le fonctionnement et les caractéristiques qui diffèrent du ST7781R sont encore à déterminer.
+
[[Fichier:SCHEMA PINS NUCLEO.jpg|800px]]
  
'''Type et taille de bus :'''
+
* Schéma brouillon du PCB avec le clavier, la LED, et le connecteur écran
 +
'''Remarque''' : S'agissant d'un schéma, les distances ont été modifiées pour un minimum de lisibilité, il ne s'agit que d'un '''ASPECT''', les positions sont susceptibles de changer légèrement
  
*[https://www.newhavendisplay.com/appnotes/datasheets/LCDs/ST7789V.pdf ST7789V] (Numworks) :
+
[[Fichier:SCHEMA PCB GLOBAL.jpg|800px]]
*[http://image.dfrobot.com/image/data/DFR0241/ST7781R_datasheet.pdf ST7781R] (Prévu) :
 
*[https://cdn-shop.adafruit.com/datasheets/ILI9325.pdf ILI9325] (Actuel) :
 
  
'''Timing :'''
+
* Vue du dessus
  
*ST7789V :
+
[[Fichier:SCHEMA PCB DESSUS.jpg|800px]]
*ST7781R :
 
*ILI9325 :
 
  
'''Fonctionnement :'''
+
* Vue du dessous
  
*ST7789V :
+
[[Fichier:SCHEMA PCB DESSOUS.jpg|800px]]
*ST7781R :
 
*ILI9325 :
 
  
Je vais également avoir à tester l'écran sur la NUCLEO avant de tenter d'implémenter Epsilon et directement effectuer les modifications nécessaires.
+
==Liste des liens externes==
  
Il y a également moyen d'utiliser Arduino IDE sur la NUCLEO : [https://www.instructables.com/id/Quick-Start-to-STM-Nucleo-on-Arduino-IDE/ Quick Start to STM Nucleo on Arduino IDE]
+
*[http://www.hpinfotech.ro/ST7781.pdf ST7781]
 +
*[http://image.dfrobot.com/image/data/DFR0241/ST7781R_datasheet.pdf ST7781R]
 +
*[https://cdn-shop.adafruit.com/datasheets/ILI9325.pdf ILI9325]
 +
*[https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/26/49/90/2e/33/0d/4a/da/DM00244518/files/DM00244518.pdf/jcr:content/translations/en.DM00244518.pdf datasheet de la carte NUCLEO-F412ZG]
 +
*[https://bepo.fr/wiki/Atelier_referencestechniques Concevoir un clavier]
 +
*[https://www.dribin.org/dave/keyboard/one_html/ Keyboard Matrix Help]
 +
*[https://github.com/numworks/epsilon/blob/master/ion/src/device/display.h display.h '''@numworks/epsilon''']
  
 
=Documents Rendus=
 
=Documents Rendus=
 +
 +
*[https://archives.plil.fr/jdupont3/P5-Numworks/blob/master/Rapport-P5-NumWorks.pdf Rapport final - Lien vers archives.plil.fr]
 +
*[https://archives.plil.fr/jdupont3/P5-Numworks/blob/master/P5-Numworks-Presentation.pdf Présentation - Lien vers archives.plil.fr]

Version actuelle datée du 20 décembre 2018 à 01:16

Sommaire


Présentation générale

Description

Réalisation d'un prototype de NumWorks

Dans le cadre de ce projet, il s'agira dans une première partie de réaliser un prototype de calculatrice NumWorks à base de plateforme Nucleo.

L'idée proposée est de se baser sur une carte Nucleo qui présente des caractéristiques similaires à celle utilisée dans la NumWorks

  • STM32F412ZG contre STM32F412VGT6 (NumWorks)

Il est également nécessaire de réaliser un PCB afin d'y installer les boutons ainsi que la LED RGB pour le mode examen. Ce PCB doit également fonctionner comme un shield intermédiaire pour le shield Nucleo où se trouve l'écran LCD.

Tout ceci sera à vérifier grâce aux datasheets/schematics des éléments concernés.

Le PCB intermédiaire devra également pallier aux problèmes de connexions des pins dû aux différences entre le ZGT6 et le VGT6 de la NumWorks.

Une fois le prototype assemblé, il faudra y installer le système d'exploitation Epsilon et vérifier son bon fonctionnement en effectuant les modifications nécessaires.

Partie 2 : Mise à jour d'une NumWorks via une autre NumWorks

Dans cette partie, il s'agit d'essayer de développer une méthode par USB permettant à une NumWorks en version X de mettre à jour une autre NumWorks en version Y (Y < X).

Une méthode par UART étant déjà disponible, il est proposé, en dernier recours, de regarder s'il est possible d'ajouter un connecteur sur une NumWorks standard pour réaliser la programmation par une autre méthode de communication avec le STM32. (Dans le cas où la méthode par USB n'est pas possible à cause du bootloader)

La seconde partie ne peut pas être simplifiée en utilisant une méthode de transfert UART pour flasher une NumWorks. Pour flasher une NumWorks il faut qu'elle soit connectée à un hôte USB (mode DFU).

Remarques

On ne prendra pas en compte les parties telles que la gestion de l'énergie étant donné que nous utiliserons une alimentation puisqu'il s'agit d'un prototype.

Bilan séance Intermédiaire

Partie 2 abandonnée en raison d'une nécessité de compétences en programmation embarquée. (Intégration d'un mode USB hôte à l'OS de la NumWorks)

Objectifs

Partie 1 : Conception du prototype

  • conception et réalisation du bouclier clavier / LED
  • éventuellement réalisation d'un bouclier de reroutage pour connecter correctement l'écran sur la Nucleo (respecter les connexions décrites dans le fichier ion/src/device/display.h d'Epsilon)
  • compiler et charger Epsilon
  • tester et revoir le prototype jusqu'à qu'Epsilon fonctionne correctement sur le prototype réalisé à partir du bouclier écran.
  • possibilité de passer par une phase de test en utilisant un écran d'une des NumWorks fournies (utilisation non destructive imposée)

Partie 2 : Mise à jour d'une NumWorks via une autre NumWorks via USB

Préparation du projet

Cahier des charges

Écran LCD TFT 2.4 avec shield

  • Sélectionner un shield LCD utilisable sur la NUCLEO-F412ZG respectant les caractéristiques imposées
  • Tester le bon fonctionnement de l'écran avec une carte Selectronic UNO (Arduino UNO)
  • Comparer le contrôleur de l'écran avec celui utilisé par la NumWorks (Schematics) pour déterminer la nécessité d'une carte de reroutage.

NUCLEO-F412ZG

  • Utiliser Arduino IDE pour vérifier le fonctionnement de l'écran avec la NUCLEO
  • Implémenter Epsilon et effectuer les modifications nécessaires pour le fonctionnement de base
  • Tester l'implémentation d'Epsilon en utilisant l'écran d'une des NumWorks via le PCB qui devra être réalisé
  • Tester avec un des écrans employés sur un autre projet qui concerne le clonage d'une NumWorks

PCB (clavier et LED RGB) entre la carte NUCLEO et le shield LCD

  • Création d'un PCB sous fritzing pour y placer le clavier (les commutateurs tactiles) et la LED RGB servant au mode examen
  • Implémenter la Carte NUCLEO-F412ZG sous Fritzing car manquante dans les composants de base (seule une version antérieure est proposée) pour réaliser le PCB

Choix techniques : matériel et logiciel

Matériels

Logiciels

  • OS (Epsilon) : SDK
  • Réalisation des composants manquants pour Fritzing : InkScape

Liste des tâches à effectuer

Partie 1 : Conception du prototype

  • Examiner les caractéristiques d'une NumWorks standard et établir un cahier des charges avec les encadrants du projet.
  • Déterminer la liste des éléments qui correspondent au cahier des charges.
  • Réaliser le PCB (Fritzing) (shield pour Nucleo) permettant l'ajout des boutons et de la LED RGB.
  • Procéder à l'assemblage et aux tests d'implémentation de l'OS.
  • Effectuer les corrections au niveau d'Epsilon si nécessaire.

Partie 2 : Mise à jour d'une NumWorks via une autre NumWorks

  • Déterminer s'il est possible ou non de réaliser cette fonctionnalité via USB.
  • Développer, implémenter puis tester la fonctionnalité, au moyen des deux NumWorks fournies si nécessaire.
  • Dans le cas où il est impossible de réaliser en USB, chercher une méthode alternative pour communiquer avec le STM32

Calendrier prévisionnel

  • Soutenance intermédiare : Vendredi 26 Octobre 16H-18H
  • Soutenance : Jeudi 20 Décembre

Réalisation du Projet

Semaine 1 - 17/09 - 21/09

Analyse et appropriation du Projet

Le projet étant de réaliser le prototype de la calculatrice NumWorks qui est un projet Open-Source, j'ai commencé par me documenter sur leur site afin de déterminer quels choix ont été effectué pour la conception de cette dernière.

J'ai pu trouver sur numworks.com les deux parties distinctes de mon projet. La première correspond à la partie Hardware Engineering et la seconde au Software Engineering

La partie Hardware comporte deux sections,

  • Mechanical Engineering qui concerne les pièces plastiques de la calculatrice mais qui ne nous concerne pas dans le cadre d'un prototype.
  • La deuxième section, Electrical Engineering correspond à ce que nous voulons étudier afin de pouvoir réaliser un prototype.

Dans cette section nous pouvons y trouver les éléments/composants ainsi que leurs Schematics et Datasheets et le PCB de la NumWorks.

NumWorks-Specifications.PNG

  • Nous pouvons voir qu'ils utilisent un STM32 F412 VGT6 comme MCU, dans notre cas, il est proposé d'utiliser également un STM32, le F412ZGT6 dont les caractéristiques sont similaires, par son appartenance à la série G des STM32F412.

Ils comportent tous deux un ARMv7-M Cortex-M4 fréquencé à 100MHz, 1Mo de mémoire flash et 256Ko de RAM.

  • Le pilote d'affichage du contrôleur LCD : ST7789V

Conformément au pilote, il sera nécessaire de rechercher un écran qui respecte les caractéristiques suivantes :

- Affichage en 320*240 pixels

- Bus 16-Bits

- Pilote ST7789V (ou similaire pouvant répondre aux caractéristiques)

  • LED RVB : LTST-S310F2KT

Semaine 2 - 24/09 - 28/09

Analyse des schematics et d'Epsilon sur Numworks.com

À l'adresse suivante, on peut consulter les schematics réalisés lors de la conception de la Numworks

On remarque en premier un schéma avec le MCU et les pins utilisés, puis dans chaque section nous pouvons ensuite étudier chaque élément de la calculatrice.

Matrice Clavier

Dans un premier temps, nous allons nous intéresser à la matrice clavier.

C'est précisé, mais on peut remarquer l'absence de diode d'anti-ghosting. (voir liens plus bas "concevoir un clavier")

Matrix-Keyboard.png

Les signaux étant "Actifs à zéro" il est tout à fait possible de réaliser cette matrice clavier avec des boutons

Concevoir un clavier

Keyboard Matrix Help

LED RGB

Pour ce qui est de la LED, il s'agit d'un modèle qui comporte 4 entrées, une pour chaque couleur et une pour l'alimentation.

Chaque couleur est gérée via un transistor lui même géré par le pin associé.

RGB-LED.png

Bouton Reset

Rien de plus simple qu'un bouton poussoir, on pourra utiliser le même type de bouton que ceux de la matrice clavier en cas de surplus.

Reset-Button.png

Semaine 3 - 01/10 - 05/10

Recherche de matériel

MCU

Nous allons utiliser une carte NUCLEO-F412ZG pour mettre en oeuvre le prototype.

Il faudra cependant réaliser un PCB pour une matrice clavier similaire à celle utilisée par la Numworks ainsi que la LED RGB.

Le clavier

Nous voulons réaliser une matrice clavier, pour cela nous allons utiliser des boutons poussoirs à 4 pins RS: 479-1491

Bouton-schema.png

Ces derniers, grâce à leurs dimensions, présentent l'avantage de permettre à une route de passer sous le composant, entre les pattes, et ainsi éviter de court-circuiter l'ensemble.

NB: Sur le schéma 1 et 2 ainsi que 3 et 4 sont toujours connectés, lorsque le bouton est enclenché, 2-4 et 1-3 sont connectés.

La Led et les transistors

En ce qui concerne les transistors, nous avons besoin d'un modèle qui correspond à celui utilisé par la Numworks:

  • Datasheet AO3424
  • Boitier : SOT23

Initialement j'avais proposé le transistor IRLML6346TRPBF d'Infineon dans la fiche de commande mais ça a ensuite été regroupé avec le RS: 287-667 utilisé par un autre projet.

Au niveau de la LED, le modèle utilisé par la Numworks était directement disponible.

L'écran LCD

La Numworks utilise un écran LCD fait sur mesure en 16 bits parallèles.

Dans le cadre de ce projet, il serait possible d'utiliser l'écran d'une des deux Numworks à disposition mais cela nécessite l'ajout d'un connecteur 31 pins sur le PCB

LCD Numworks.png

Nous savons que le driver utilisé par leur LCD est le ST7789V.

Un shield a été proposé en raison de son appartenance à la même famille de contrôleur (ST77XX).

Il s'agit d'un shield pour Arduino (la NUCLEO-F412ZG possède des pins compatible avec Arduino)

N'étant plus disponible, une petite recherche a cependant permit de trouver un écran aux caractéristiques similaires dont le contrôleur est indiqué comme étant le ST7781R (LCD TFT Keyes)

Semaine 4 - 08/10 - 12/10

Vérifications sur le Shield LCD TFT

L'écran est arrivé en milieu de semaine, j'ai pu commencer à vérifier son fonctionnement.

Test avec Selectronic UNO (Arduino)

Afin de vérifier le contrôleur d'affichage du shield ainsi que son bon fonctionnement, j'ai utilisé une carte Selectronic UNO (via Arduino IDE).

Selectronic uno bochage.png

J'ai utilisé un des scripts fournis dans la bibliothèque d'Adafruit-TFTLCD pour utiliser l'écran.

Après avoir modifié quelques lignes de code, j'ai réussi à faire fonctionner l'écran.

J'ai également pu, conformément aux datasheets des pilotes des contrôleurs, à afficher celui utilisé par ce dernier dans le moniteur série. Il se trouve dans le registre 0x0

Test Arduino.jpg

Cependant, le contrôleur de l'écran n'est finalement pas le ST7781R (0x7783) comme annoncé dans la fiche produit lorsque l'écran a été commandé mais le ILI9325 (0x9325).

Le fonctionnement et les caractéristiques qui diffèrent du ST7781R sont encore à déterminer.

Documentation sur les Drivers ST7789V, ST7781R et ILI9325

Type et taille de bus :

  • ST7789V (Numworks) : 16 Bits parallèles
  • ST7781R (Prévu) : 16 Bits parallèles
  • ILI9325 (Actuel) : 16 Bits parallèles

Test avec la NUCLEO

Je vais également avoir à tester l'écran sur la NUCLEO avant de tenter d'implémenter Epsilon et directement effectuer les modifications nécessaires.

Il y a également moyen d'utiliser Arduino IDE sur la NUCLEO : Quick Start to STM Nucleo on Arduino IDE

Semaine 5 - 15/10 - 19/10

Réception des commandes Farnell et Mouser, vérification et test du matériel

Les commandes sont arrivées au cours de la semaine,

  • Farnell : Mardi 16 Octobre
  • Mouser : Vendredi 19 Octobre

NUCLEO-F412ZG

La carte NUCLEO-F412ZG sur laquelle nous souhaitons réaliser le prototype présente un STM32 F412 ZGT6.

Ce dernier, par rapport au STM32 F412 VGT6 de la NumWorks, dispose d'une plus grande quantité d'entrées/sorties (81 contre 114)

Par conséquent, il est nécessaire de déterminer s'il y aura lieu de réaliser une carte de reroutage dans le cas où l'écran que nous utilisons est branché à des pins différents via les broches.

Dans cette fiche (Page 35/82 de la datasheet de la carte NUCLEO-F412ZG), nous pouvons voir que nos deux STM32 ont des packages différents

(le VG en avant dernier et le ZG en dernier)

STM32F412xG caracteristics.PNG

LQFP100 (NumWorks - STM32F412VGT6)

Schematic LQFP100.PNG

LQFP144 (NUCLEO-F412ZG - STM32F412ZGT6)

Schematic LQFP144.PNG

Les pins et correspondances

keyboard.h

Les pins présentés au niveau des broches sont indiqués sur la figure 13 de la datasheet (Page 35/82)

NUCLEO-F412ZG-PINS.PNG

On peut par exemple remarquer l'absence de certains pins nécessaires qui sont mentionnés dans les fichier .h d'Epsilon (ion/src/device) (dépot git d'Epsilon).

Par exemple, pour la réalisation de la matrice clavier, il est indiqué que les GPIO C et GPIO E sont utilisés de PC0 à PC5 ainsi que PE0 à PE8 (keyboard.h)

Cependant, sur la figure 13,

  • PE0 est sur CN10 (33)
  • PE1 est absent
  • PE2 est sur CN9 (14)
  • PE3 est sur CN9 (22)
  • PE4 est sur CN9 (16)
  • PE5 est sur CN9 (18)
  • PE7 est sur CN10 (20)
  • PE8 est sur CN10 (18)

Dans le cas du clavier, cela ne pose pas un grand soucis, il serait possible d'utiliser un autre pin disponible et effectuer la modification dans le fichier keyboard.h


EDIT S13 : Toutefois le pin PE1 est présent sur CN11 (61) qui est sur le côté gauche de la carte NUCLEO

  • Page 15/82 de la datasheet)

CN11-CN12.png

L'organisation des pins sur CN11 et CN12 est décrite aux pages 70 et 71 de la manière suivante

CN11-CN12-P70.png

Semaine 6 - 22/10 - 26/10

  • Remise en forme du wiki en vue de la soutenance intermédiaire
  • Progression sur l'étude des pins de la NUCLEO

Soutenance Intermédiaire

Au vue de l'absence de résultat à cette date (Vendredi 26/10), les objectifs du projet ont été revu à la baisse.

  • Suppression de la partie USB du projet (nécessité de compétences en programmation embarquée)
  • Conception et réalisation du shield clavier / LED
  • Éventuellement réalisation d'un shield de reroutage pour connecter correctement l'écran sur la Nucleo (respecter les connexions décrites dans le fichier ion/src/device/display.h d'Epsilon)
  • Compiler et charger Epsilon
  • Tester et revoir le prototype jusqu'à ce qu'Epsilon fonctionne correctement

Semaine 7 - 29/10 - 02/11

Vacances Scolaires

  • première étude au brouillon et début de schémas papier en vue de réaliser le routage du PCB

Semaine 8 - 05/11 - 21/11

Étude sur la nécessité d'un reroutage au niveau des pins

En prenant en compte les nouveaux objectifs, j'ai commencé à étudier la liste des pins dans les fichiers .h d'Epsilon en comparant avec les pins disponibles sur la carte NUCLEO

L'étude des pins a été réalisé en fonction de la datasheet de la carte NUCLEO-F412ZG (Partie des pins : stm32F412_pin-description.pdf)

  • REMARQUE : Les pins appartenant aux CN11 et CN12 dans les tableaux qui suivent ont été découverts à l'issue de la semaine 13.

(Lors d'une relecture de la datasheet vis-à-vis d'une incohérence sur le fait de ne pas avoir trouvé les pins en question et qu'ils étaient irremplaçable en raison d'une fonction précise)

backlight.h

PIN Rôle Mode Fonction Localisation sur la NUCLEO
PC6 Backlight Enable Output CN7 (1)

Par rapport au schematic, PC6 est connecté au LCD_LIGHT du RT9365GQW

Backlight.png

NB: Initialement, il n'était pas prévu d'utiliser un écran de NumWorks, mais un shield LCD.

//TODO : vérifier si l'absence du RT9365GQW peut poser problème

base64.h

À priori aucun changement à effectuer

battery.h

PIN Rôle Mode Fonction Localisation sur la NUCLEO
PA0 BAT_CHRG Input, pulled up Low = charging, high = full CN10 (29)
PA1 VBAT_SNS Analog ADC1_1 CN11 (30)

VBAT Mesure.png

  • On pourrait voir pour remplacer VBAT par un PIN +3V3 pour ignorer l'aspect mesure de la batterie

console.h

PIN Rôle Mode Fonction Localisation sur la NUCLEO
PC11 UART3 RX Alternate Function USART3_RX CN8 (10)
PD8 UART3 TX Alternate Function USART3_TX CN12 (10)
  • Dans le cas de la fonction USART3_TX le pin PD8 (CN12 (10)) peut être remplacé par PB10 (Présent sur CN10 (32)) ou PC10 (Présent sur CN8 (6)) qui disposent également de ces fonctions alternatives

USART PD8 console h.png

device.h

Aucune modification prévue

display.h

PIN Rôle Mode Fonction Localisation sur la NUCLEO
PA2 LCD D4 Alternate Function 12 FSMC_D4 CN10 (11)
PA3 LCD D5 Alternate Function 12 FSMC_D5 CN9 (1)
PA4 LCD D6 Alternate Function 12 FSMC_D6 CN7 (17)
PB12 LCD D13 Alternate Function 12 FSMC_D13 CN7 (7)
PB14 LCD Power Output CN12 (28)
PD0 LCD D2 Alternate Function 12 FSMC_D2 CN9 (25)
PD1 LCD D3 Alternate Function 12 FSMC_D3 CN9 (27)
PD4 LCD Read Signal Alternate Function 12 FSMC_NOE CN9 (8)
PD5 LCD Write Signal Alternate Function 12 FSMC_NWE CN9 (6)
PD7 LCD Chip Select Alternate Function 12 FSMC_NE1 CN7 (17)
PD9 LCD D14 Alternate Function 12 FSMC_D14 CN11 (69)
PD10 LCD D15 Alternate Function 12 FSMC_D15 CN12 (65)
PD11 LCD data/command Alternate Function 12 FSMC_A16 CN10 (23)
PD14 LCD D0 Alternate Function 12 FSMC_D0 CN7 (16)
PD15 LCD D1 Alternate Function 12 FSMC_D1 CN7 (16)
PE9 LCD Reset Output CN10 (4)
PE10 LCD D7 Alternate Function 12 FSMC_D7 CN10 (24)
PE11 LCD D8 Alternate Function 12 FSMC_D8 CN10 (6)
PE12 LCD D9 Alternate Function 12 FSMC_D9 CN10 (26)
PE13 LCD D10 Alternate Function 12 FSMC_D10 CN10 (10)
PE14 LCD D11 Alternate Function 12 FSMC_D11 CN10 (28)
PE15 LCD D12 Alternate Function 12 FSMC_D12 CN10 (30)
  • LCD_EXTC : PB10 (CN10 (32))
  • LCD_TE : PB13 (CN12 (30))

LCD Numworks.png

flash.h

Aucune modification prévue

led.h

PIN Rôle Mode Fonction Localisation sur la NUCLEO
PB0 LED Blue Alternate Function 2 TIM3_CH3 CN10 (31)
PB1 LED Green Alternate Function 2 TIM3_CH4 CN10 (7)
PC7 LED Red Alternate Function 2 TIM3_CH2 CN7 (11)

sd_card.h

PIN Rôle Mode Fonction Localisation sur la NUCLEO
PA8 SDIO D1 Alternate Function 12 SDIO_D1 CN12 (23)
PB4 SDIO D0 Alternate Function 12 SDIO_D0 CN7 (19)
PB5 SDIO D3 Alternate Function 12 SDIO_D3 CN7 (13)
PB15 SDIO CLK Alternate Function 12 SDIO_CK CN7 (3)
PC10 SDIO D2 Alternate Function 12 SDIO_D2 CN8 (6)
PD2 SDIO CMD Alternate Function 12 SDIO_CMD CN8 (12)
  • PA8 pour SDIO_D1 peut être remplacé par PC9 (CN8 (4))
  • Manquant : SD_POW_EN -> PB9 (CN7 (4))

swd.h

PIN Rôle Mode Fonction Localisation sur la NUCLEO
PA13 SWDIO Alternate Function 0 JTMS-SWDIO CN11 (13)
PA14 SWCLK Alternate Function 0 JTCK-SWCLK CN11 (15)
PB3 SWO Alternate Function 0 JTDO-SWO CN7 (15)

timing.h

Aucune modification prévue

usb.h

PIN Rôle Mode Fonction Localisation sur la NUCLEO
PA9 VBUS Input, pulled down CN12 (21)
PA11 USB D- Alternate Function 10 USB_FS_DM CN12 (14)
PA12 USB D+ Alternate Function 10 USB_FS_DP CN12 (12)

wakeup.h

Aucune modification prévue

Semaine 9 - 12/11 - 21/11

Implémentation de la NUCLEO-F412ZG sous Fritzing

Cette partie a été modifiée à plusieures reprises en fonction des changements que j'ai apporté à mes fichiers durant les semaines 10/11/12

Récupération des fichiers d'une carte Arduino Uno

En raison de l'indisponibilité sous Fritzing de la carte NUCLEO-F412ZG utilisée dans le cadre du projet, j'ai du réaliser moi même les différentes vues du composant (Breadboard, Schematic et PCB) sous InkScape puis les implémenter avec l'utilitaire de création de composant.

Afin d'éviter un éventuel problème de dimensionnement, et en sachant que les pins présents sur la carte physique qui sont à réaliser sous Fritzing sont agencés de manière similaire à ceux d'une Arduino UNO,

J'ai commencé par extraire les vues d'une carte Arduino UNO pour y ajouter les pins nécessaires.

Ce que nous cherchons à réaliser :

  • Les pins roses sont ceux de l'Arduino
  • Les bleus sont ceux à ajouter

NUCLEO-F412ZG-PINS.PNG

  • Ouvrir Fritzing, trouver le composant dans les listes puis clic-droit, Créer un nouveau composant... pour arriver à la vue Platine d'essai (Breadboard)

Dans l'onglet Fichier aller dans Voir dans le dossier

Fritzing recuperation arduino uno.png

  • Récupérer le fichier svg

Fritzing liste breadboard svg.png

  • Répeter l'opération pour la vue Circuit imprimé
  • Pour la vue Schématique on peut la récupérer également mais on ne l'utilisera que pour s'en inspirer afin de réaliser notre propre fichier.
Commandes utiles et réglages sous Inkscape
  • L'onglet Fichier > Propriétés du document / Maj + Ctrl + X : Permet de définir l'unité utilisée, les dimensions du document, mais aussi la grille et ses dimensions

Inkscape reglage document.JPG

  • L'onglet Objet > Objets... : Donne accès au objets présents sur l'esquisse
  • Maj + Ctrl + X : Ouvre l'éditeur XML
  • Maj + Ctrl + A : Permet de positionner un objet ou un groupe d'objets relativement à un autre objet ou groupe
  • Maj + Ctrl + F : L'éditeur de formes et contours
  • Remarque : L'ordre dans lequel les objets apparaissent dans la fenêtre des objets est l'inverse de celui dans lequel ils sont listés dans la fenêtre XML
  • Remarque 2 : Donner un nom dans la fenêtre objet ne donne qu'un label (inkscape:label dans la fenêtre XML), l'id d'un objet doit être modifié directement dans la partie XML

L'onglet Connecteurs

Dans cette partie vous avez le nombre de connecteurs suivi de la liste de ces derniers.

Chacun comporte:

  • Un nom
  • Une description
  • Un id

Le nom et la description sont les noms utilisés dans les 3 premières vues et s'affichera lorsque vous connecterez des pins/pads dans les différentes vues.

L'id lui est important pour la partie XML, l'idée est de faire le XML lors de la réalisation des vues sous Inkscape pour ENSUITE générer les pins/pad qui seront finalement détectés automatiquement lors de l'ajout des vue pour le composant

Les Métadonnées

Facultatif dans le cadre d'un composant partiel, à remplir selon les besoins.

La vue Breadboard (Platine d'essai)

Ici, il s'agit simplement de donner l'aspect visuel qu'aura le composant dans la partie Platine d'essai où nous réaliserons les câblages sans prêter attention au fait que les fils se croisent.

Dans notre cas, nous avons uniquement besoin d'ajouter les broches manquantes.

Les paramètres importants sont :

  • Les distances entre chaque pin (0.1" entre chaque pin, soit 2.54 mm -> réglage de la grille à 0.1" en X et en Y)
  • Les dimensions de la carte (Dans notre cas, c'est un composant partiel réalisé à partir d'un composant déjà présent)
  • Le futur id de chaque pin (nous avons 100 pins femelles donc : de connector0pin à connector99pin)

En partant d'une Arduino Uno comme indiqué précédemment, après les modification minimales nécessaires nous arrivons à ce résultat

Fritzing breadboard 2.JPG

  • Pour cette vue, on remarque dans l'éditeur XML que seuls les pins ont un id correctement formaté, le reste n'est pas absolument nécessaire

La vue Schematic (Schématique)

Fritzing Schematics 1.JPG

//TODO : refaire une version mieux organisée (par CN) de la vue Schematic

La vue PCB (Circuit Imprimé)

En partant de la vue PCB de l'Arduino Uno on arrive en effectuant les modification nécessaires sur les parties silkscreen (le dessus) et silkscreen0 (le dessous)

  • Remarque: le groupe silkscreen0 pourrait être completement supprimée dans notre cas

Fritzing PCB 1.JPG

  • Fonctionnement de Fritzing : les pins/pads doivent être placés dans le groupe copper0 lui-même placé dans le groupe copper1

Après les modifications effectuées, nous obtenons la vue PCB de notre carte NUCLEO

Fritzing PCB 2.JPG

L'icône

Il est possible via l'onglet Fichier de copier directement l'une des 3 vues précédentes pour en faire l'icone

Semaine 10 - 19/11 - 21/11

Correctifs apportés successivement aux vues Breadboard, Schematics et PCB

Fritzing normes.JPG

  • Utilisation de la police OCRA, les autres polices n'étant pas supportées.

Semaine 11 - 26/11 - 30/11

Correctifs apportés successivement aux vues Schematics et PCB

  • Reparamétrage des propriétés du document (unités et grille) avec vérification des distances et corrections si besoin
  • Résolution de l'absence et/ou l'incohérence dans la détection des pins (différence entre l'id et le inkscape:label)
  • Résolution dans la vue PCB du non-affichage de la carte et des pins invisible à l'exception de certains pins aux id incohérents (l'ordre dans lequel les groupes doivent être placés dans l'éditeur XML)

Semaine 12 - 3/12 - 7/12

Correctifs et Réalisation du PCB sous Fritzing

  • Résolution du conflit dans la vue PCB sous Fritzing entre copper1 et copper0 en modifiant l'indentation des noeuds

Semaine 13 - 10/12 - 14/12

Ajout de la Led et du clavier au PCB

Nécessité de réaliser un connecteur incluant 31 pins pour Fritzing

L'écran de la NumWorks étant fait sur mesure, le connecteur 31 pins l'est également.

Ainsi, Il va falloir implémenter un autre composant sous Fritzing qui correspond au connecteur 31 pins pour ensuite faire le routage sur le PCB

Comme il s'agit de réaliser l'adaptation d'un format pins vers un format compatible avec un écran LCD nous pouvons utiliser ceci comme exemple, attention, il s'agit d'un modèle à 34 pins

Celui-ci comporte 34 pins et deux faces, l'une avec des connecteurs espacés de 0.5 mm et l'autre de 0.1 mm

Connecteur-34.jpg Connecteur-34-verso.jpg

Toutefois, au niveau du maintient, en l'absence de connecteur pour maintenir la bande il faudrait soit souder directement la bande à l'adaptateur soit maintenir la bande en place manuellement

Semaine 14 - 17/12 - 20/12

  • Mise à jour du wiki
  • Soudure des connecteurs

Corrections apportées aux schémas

  • Schéma des pins de la NUCLEO uniquement

SCHEMA PINS NUCLEO.jpg

  • Schéma brouillon du PCB avec le clavier, la LED, et le connecteur écran

Remarque : S'agissant d'un schéma, les distances ont été modifiées pour un minimum de lisibilité, il ne s'agit que d'un ASPECT, les positions sont susceptibles de changer légèrement

SCHEMA PCB GLOBAL.jpg

  • Vue du dessus

SCHEMA PCB DESSUS.jpg

  • Vue du dessous

SCHEMA PCB DESSOUS.jpg

Liste des liens externes

Documents Rendus