Changes between Version 1 and Version 2 of Peri19_T04


Ignore:
Timestamp:
Mar 8, 2019, 1:26:40 PM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Peri19_T04

    v1 v2  
    1 {{{#!comment
    21Ce TME a été créé par Julien Peeters et modifié par Franck Wajsbürt
    32
     
    4847|| D4, D5, D6, D7  || 22, 23, 24, 25 ||
    4948
    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.
     49Dans la documentation de l'afficheur, on peut savoir :
    5150* Comment faut-il configurer les GPIOs pour les différents signaux de l'afficheur LCD ?
    5251* Comment écrire des valeurs vers le LCD ?
     
    5554* Comment envoyer des commandes telles que : l'effacement de l'écran, le déplacement du curseur, etc. ?
    5655
    57 Page 11 de la documentation : [[http://www.newhavendisplay.com/specs/NHD-0420DZ-FL-YBW.pdf | Datasheet du LCD de la plateforme]]
     56En 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.
    5857* 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).
    5958* 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).
     
    121120Pour créer un front descendant:
    122121* 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.
    126123
    127124[[Image(htdocs:png/command_lcd.png, width=900px, nolink)]]
     
    129126Nous 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.
    130127
    131 ||**Question:**\\Compléter la fonction lcd_write4bits en vous aidant du cours.
    132 
    133128Nous 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.
    134129
    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 
    137130Vous ê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.
     131erry Pi.
    140132
    141133Il peut être utile de manipuler la position du curseur pour choisir où placer les caractères sur l'afficheur.
     
    151143On souhaites utiliser toutes les lignes
    152144
    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.
    154146
    155147== 4. Driver pour le LCD ==
    156148
    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.
    158150{{{#!bash
    159151$ echo "Bonjour" > /dev/lcd_xy
    160152}}}
     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.
    161155
    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).