Changes between Version 1 and Version 2 of Peri19_T04
- Timestamp:
- Mar 8, 2019, 1:26:40 PM (6 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Peri19_T04
v1 v2 1 {{{#!comment2 1 Ce TME a été créé par Julien Peeters et modifié par Franck Wajsbürt 3 2 … … 48 47 || D4, D5, D6, D7 || 22, 23, 24, 25 || 49 48 50 Pour contrôler l'afficheur nous devons répondre aux questions ci-après. Les réponses à ces questions se trouve dans la documentation de l'afficheur. Les réponses sont partiellement données dans les morceaux de codes mais vous devez quand même comprendre ce que vous faites. 49 Dans la documentation de l'afficheur, on peut savoir : 51 50 * Comment faut-il configurer les GPIOs pour les différents signaux de l'afficheur LCD ? 52 51 * Comment écrire des valeurs vers le LCD ? … … 55 54 * Comment envoyer des commandes telles que : l'effacement de l'écran, le déplacement du curseur, etc. ? 56 55 57 Page 11 de la documentation : [[http://www.newhavendisplay.com/specs/NHD-0420DZ-FL-YBW.pdf | Datasheet du LCD de la plateforme]] 56 En particulier, page 11 de la documentation ([[http://www.newhavendisplay.com/specs/NHD-0420DZ-FL-YBW.pdf | Datasheet du LCD de la plateforme]]) se trouve du pseudo-code pour l'usage de l'afficheur. 58 57 * P1 est un registre dont l'état est recopié sur les broches D0 à D7 (bit7 de P1 sur D7, bit6 sur D6, etc. jusqu'à D4). 59 58 * D_I est un registre dont l'état est recopié sur RS qui indique si on envoie un caractère (D) ou une instruction (I). … … 121 120 Pour créer un front descendant: 122 121 * on place la donnée, 123 * puis le signal E est mis à 1 pendant 1µs puis remis à 0 pendant une 1µs supplémentaire pour garantir le délai entre deux commandes. 124 125 ||**Question:**\\Compléter la fonction lcd_strobe (nommée nybble dans le cours) qui permet de générer le signal E. 122 * puis le signal E est mis à 1 pendant 1µs. 126 123 127 124 [[Image(htdocs:png/command_lcd.png, width=900px, nolink)]] … … 129 126 Nous utilisons l'afficheur LCD en mode 4 bits. Or, les commandes et les données sont transmises sur 8 bits ou 1 octet. Ainsi, toutes les commandes et toutes les données sont transmises en deux étapes: les 4 bits de poids fort et ensuite les 4 bits de poids faible. 130 127 131 ||**Question:**\\Compléter la fonction lcd_write4bits en vous aidant du cours.132 133 128 Nous avons toutes les fonctions dont nous avons besoin. Maintenant regardons d'un peu plus près la phase d'initialisation de l'afficheur LCD. Au démarrage, l'afficheur est dans un mode non défini (8 bits ou 4 bits). Il faut donc le forcer en mode 4 bits. 134 129 135 ||**Question:**\\Compléter la fonction lcd_init qui réalise la séquence d'initialisation telle que vue en cours. Vérifiez son fonctionnement sur une carte Raspberry Pi. Vous devez être en mode 4 bits, 2 lignes, matrix5x8 ; allumer l'écran sans curseur ; demander d'écrire de gauche à droite sans déplacement des caractères.136 137 130 Vous êtes prêt à tester votre code et vérifier qu'il affiche correctement une chaine de caractère. 138 139 ||**Question:**\\Ecrivez un programme qui affiche la chaine de caractère "Hello World" sur l'afficheur. Vérifiez son fonctionnement sur une carte Raspberry Pi. 131 erry Pi. 140 132 141 133 Il peut être utile de manipuler la position du curseur pour choisir où placer les caractères sur l'afficheur. … … 151 143 On souhaites utiliser toutes les lignes 152 144 153 || **Question :**\\1. Ecrire une fonction lcd_set_cursor qui positionne le curseur aux coordonnées (x,y) avec x la colonne, y la ligne.\\2. Ecrire un programme qui affiche "Hello World"sur chacune des lignes de l'afficheur.145 || **Questions:**\\1. Répondez aux questions qui se trouve dans le code [attachment:lcd_user.c lcd_user.c] \\2. Ecrire une fonction lcd_set_cursor qui positionne le curseur aux coordonnées (x,y) avec x la colonne, y la ligne.\\3. Ecrire un programme qui affiche la chaine passée en paramètre sur chacune des lignes de l'afficheur. 154 146 155 147 == 4. Driver pour le LCD == 156 148 157 Reprenez le pilote que vous aviez écrit pour les leds et modifiez la commande `write` de telle sorte que si vous appelez votre device /dev/lcd_xy (où xy sont les initiales de votre binôme), vous puissiez écrire.149 * Reprenez le pilote que vous aviez écrit pour les leds et modifiez la commande `write` de telle sorte que si vous appelez votre device /dev/lcd_xy (où xy sont les initiales de votre binôme), vous puissiez écrire. 158 150 {{{#!bash 159 151 $ echo "Bonjour" > /dev/lcd_xy 160 152 }}} 153 Vous allez devoir remplacer usleep() par udelay() et ajouter un `#include <asm/delay.h>` au début du code de votre module (merci Arthur). 154 Vous devez (en principe) allouer de la mémoire noyau pour ce driver et utiliser la fonction `copy_from_user(unsigned long dest, unsigned long src, unsigned long len);` pour le message à écrire. 161 155 162 Vous allez devoir remplacer usleep() par udelay() et ajouter un `#include <asm/delay.h>` au début du code de votre module (merci Arthur). 163 164 }}} 156 * Ajoutez la gestion de l'appel système ioctl() pour 157 * effacer l'écran : LCDIOCT_CLEAR 158 * position le curseur : LCDIOCT_SETXY (vous pouvez coder les coordonnées dans l'argument).