« SE4Binome2023-5 » : différence entre les versions
Ligne 63 : | Ligne 63 : | ||
* une matrice de touches de 4 par 8, ce qui nous fait 32 touches soient les 26 lettres de l'alphabet + 6 autre touches, | * une matrice de touches de 4 par 8, ce qui nous fait 32 touches soient les 26 lettres de l'alphabet + 6 autre touches, | ||
* 2 Leds de test + 1 Led d'alimentation | * 2 Leds de test + 1 Led d'alimentation | ||
* une | * un ATmega328p | ||
La programmation de notre carte | * un connecteur HE10 8 pins pour un bus SPI + une ligne d'interruption pour communiquer avec la carte mère | ||
* un connecteur 6 pins(2x3) pour un bus SPI afin de programmer la carte. | |||
La programmation de notre carte se fera via un AVR ISP | |||
Pour cela, on utilise une carte arduino uno dans laquelle on televerse le programme Arduino ISP, disponible dans les exemples de l'IDE arduino, pour permettre a l'arduino uno d'envoyer notre code vers la carte clavier via le bus SPI. | |||
[[Fichier:Schéma AVR ISP.png|centré|vignette|400x400px]] | |||
Pour flasher notre carte clavier 2 solutions : | |||
* utiliser l'IDE arduino, en utilisant le paramètre "upload using programmer" qui permet de televerser du code dans une atmega en passant par le bus SPI. Mais cela néccesite d'écrire le code sur l'IDE arduino. Cette solution permettra simplement de faire des testes rapides en utilisant par exemple l'exemple Blink. | |||
* Créer un Makefil qui permet de televerser notre code C vers la carte fille en passant par l'arduino uno : | |||
[[Fichier:Makefil.png|centré|cadre]] | |||
Les résistances de pull up serviront à avoir un 1L par défaut puisque les lignes sont des sorties sur lesquelles nous écriront un 0L sur chaque sortie l'une après l'autre. Les colonnes sont des entrées, lorsqu'on lira un 0L sur une des colonnes, alors il suffira de voir laquelle des lignes est à 0L et ainsi connaitre le bouton qui est appuyé. | Les résistances de pull up serviront à avoir un 1L par défaut puisque les lignes sont des sorties sur lesquelles nous écriront un 0L sur chaque sortie l'une après l'autre. Les colonnes sont des entrées, lorsqu'on lira un 0L sur une des colonnes, alors il suffira de voir laquelle des lignes est à 0L et ainsi connaitre le bouton qui est appuyé. | ||
[[Fichier:Schematique_clavier.png|centré|sans_cadre| | [[Fichier:Schematique_clavier.png|centré|sans_cadre|511x511px]] | ||
Voici le routage de la schématique : Tous les condensateurs se trouvent à côté d'un VCC, le crystal est au plus proche du microcontrôleur et nous avons pris soin d'avoir des longueurs de pistes égales sur XTAL1 et XTAL2 du Crystal. | Voici le routage de la schématique : Tous les condensateurs se trouvent à côté d'un VCC, le crystal est au plus proche du microcontrôleur et nous avons pris soin d'avoir des longueurs de pistes égales sur XTAL1 et XTAL2 du Crystal. | ||
[[Fichier:Routage fini.png|sans_cadre]] | [[Fichier:Routage fini.png|sans_cadre]][[Fichier:3d view.png|sans_cadre|235x235px]][[Fichier:3d view bottom.png|sans_cadre|235x235px]] | ||
Après avoir reçu la carte imprimée, nous l'avons directement soudée avec tous les composants. On retrouve finalement l'allure d'un réél clavier avec toutes les touches (ici 32) : | |||
[[Fichier:Carte_soude.jpg|centré|sans_cadre|383x383px]] | |||
Nous somme ensuite passée au différents testes de la carte : | |||
====== <u>Premier test : la carte est elle programmable ?</u> ====== | |||
On utilise un programme très simple qui allume une des LEDs de la carte, le Blink disponible dans les exemple de l'IDE arduino. | |||
Mais en essayant de programmer la carte, aucune LEDs ne glignotait. Nous avons donc tester notre carte au multimètre. Il y avait un court-circuit au niveau du crystal qui empechait forcement son fonctionnement. l'erreur vient de notre footprint qui était décalé a 90°. Pour remedier a notre problème, nous avons désouder le crystal et l'avons tourné de 90°. | |||
Une fois le crystal resoudé dans la bon sens, nous avons pu flasher la carte clavier avec le programme Blink | |||
[[Fichier:Led_allumee_clavier.png|centré|sans_cadre|241x241px]] | |||
La LED est allumé, ce qui nous permet de valider le faite que la carte est programmable via notre AVR ISP | |||
====== <u>Deuxième test : la lecture des boutons</u> ====== | |||
Pour commencer les testes, nous cherchons à allumer une led quand on appuie sur n'importe quel bouton. Pour cela on nous avons programmer notre matrice de LED : | |||
[[Fichier:Test clavier.png|centré|vignette]] | |||
[[Fichier:Premier_test_clavier.mp4|néant|cadre]] | [[Fichier:Premier_test_clavier.mp4|néant|cadre]] | ||
Version du 10 janvier 2024 à 11:45
Voici le lien de notre Git : https://archives.plil.fr/mnorman1/PICO.git
Puis le zip de notre routage (vérifié par M. Redon) : Fichier:Gerber B5.zip
Ordonnanceur
Soudure
Nous avons commencé par souder le redresseur de niveau, le lecteur de carte puis les résistances et les Leds :
Également, nous avons partiellement soudé la carte de Leds suivante :
Puis, nous avons soudé entièrement la carte 7 segments comme suit :
Et pour finir, la carte Shield est entièrement soudée :
Câble pont Shield Arduino
En parallèle, nous avons réalisé les câbles qui se situent entre la carte Shield et la carte Arduino :
Programmation
Nous avons écris un programme d'ordonnancement qui permet de faire clignoter 2 Leds (Led1 et Led2) avec une durée différente :
Remarque : Les temps ne sont pas réels, c'est pour ça que l'objectif est d'endormir les tâches.
Carte FPGA/VHDL
Dans cette partie, nous devons implémenter un contrôleur de bus série SPI.
Tout d'abord, voici comment fonctionne un bus SPI :
Dans un bus SPI, il y a 1 maître et 1 ou plusieurs esclaves. Le transmission des données se font sur 2 fils : MISO et MOSI :
- MOSI : Données du maître vers l'esclave,
- MISO : Données de l'esclave vers le maître.
Puisqu'il y a plusieurs esclaves, le SS (Ship Select) permet d'autoriser 1 esclaves précis en l'activant à 0.
Les échanges se font sur front et sont synchronisés par le maître.
Lorsqu'un octet du maître passe dans le registre de l'escalve, celui de l'esclave passe dans le registre du maître simultanément comme représenté sur l'image ci-dessous.
Carte électronique numérique
Type de carte choisie
Nous avons choisi de travailler sur la carte fille clavier "matrice de touches"
Schéma Électronique
Voici le schéma électronique fini de notre carte
Nous avons opté pour :
- une matrice de touches de 4 par 8, ce qui nous fait 32 touches soient les 26 lettres de l'alphabet + 6 autre touches,
- 2 Leds de test + 1 Led d'alimentation
- un ATmega328p
- un connecteur HE10 8 pins pour un bus SPI + une ligne d'interruption pour communiquer avec la carte mère
- un connecteur 6 pins(2x3) pour un bus SPI afin de programmer la carte.
La programmation de notre carte se fera via un AVR ISP
Pour cela, on utilise une carte arduino uno dans laquelle on televerse le programme Arduino ISP, disponible dans les exemples de l'IDE arduino, pour permettre a l'arduino uno d'envoyer notre code vers la carte clavier via le bus SPI.
Pour flasher notre carte clavier 2 solutions :
- utiliser l'IDE arduino, en utilisant le paramètre "upload using programmer" qui permet de televerser du code dans une atmega en passant par le bus SPI. Mais cela néccesite d'écrire le code sur l'IDE arduino. Cette solution permettra simplement de faire des testes rapides en utilisant par exemple l'exemple Blink.
- Créer un Makefil qui permet de televerser notre code C vers la carte fille en passant par l'arduino uno :
Les résistances de pull up serviront à avoir un 1L par défaut puisque les lignes sont des sorties sur lesquelles nous écriront un 0L sur chaque sortie l'une après l'autre. Les colonnes sont des entrées, lorsqu'on lira un 0L sur une des colonnes, alors il suffira de voir laquelle des lignes est à 0L et ainsi connaitre le bouton qui est appuyé.
Voici le routage de la schématique : Tous les condensateurs se trouvent à côté d'un VCC, le crystal est au plus proche du microcontrôleur et nous avons pris soin d'avoir des longueurs de pistes égales sur XTAL1 et XTAL2 du Crystal.
Après avoir reçu la carte imprimée, nous l'avons directement soudée avec tous les composants. On retrouve finalement l'allure d'un réél clavier avec toutes les touches (ici 32) :
Nous somme ensuite passée au différents testes de la carte :
Premier test : la carte est elle programmable ?
On utilise un programme très simple qui allume une des LEDs de la carte, le Blink disponible dans les exemple de l'IDE arduino.
Mais en essayant de programmer la carte, aucune LEDs ne glignotait. Nous avons donc tester notre carte au multimètre. Il y avait un court-circuit au niveau du crystal qui empechait forcement son fonctionnement. l'erreur vient de notre footprint qui était décalé a 90°. Pour remedier a notre problème, nous avons désouder le crystal et l'avons tourné de 90°.
Une fois le crystal resoudé dans la bon sens, nous avons pu flasher la carte clavier avec le programme Blink
La LED est allumé, ce qui nous permet de valider le faite que la carte est programmable via notre AVR ISP
Deuxième test : la lecture des boutons
Pour commencer les testes, nous cherchons à allumer une led quand on appuie sur n'importe quel bouton. Pour cela on nous avons programmer notre matrice de LED :
Dans notre code, nous avons fait en sorte d'avoir les boutons dans l'ordre alphabétique, c'est la raison pour laquelle les lettres ne sont pas dans l'odre dans notre code :
Nous voulions mettre notre clavier en AZERTY, malheureusement notre matrice ne nous le permet pas.
Par la suite, l'idée est d'envoyer les boutons appuyés à la carte mère via l'ISP. Pour cela, lorsque l'ISP enverra les octets 0x01 nous devrons envoyer le nombre de touches qui ont été appuyés depuis la dernière fois qu'il a envoyé cet octet. Après ça, la carte mère devra nous envoyer autre chose que 0x00 ou 0x01 et autant de fois que de touches touchées. Voici un exemple :
Carte mère : 0x01
Clavier : 2 (2 touches ont été touchées)
Carte mère : 0x00
Clavier : 'M'
Carte mère : 0x00
Clavier : 'S'
Aussi, il se peut que la carte mère envoie l'octet 0x00, dans ce cas c'est une demande d'identification, alors la clavier devra répondre 0x1.