Changes between Version 1 and Version 2 of SujetTP4-2015


Ignore:
Timestamp:
Mar 5, 2015, 5:18:36 AM (10 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP4-2015

    v1 v2  
    1515
    1616Ressources:
     17* [[http://www.newhavendisplay.com/specs/NHD-0420DZ-FL-YBW.pdf | Datasheet du LCD de la plateforme]]
    1718* [[http://en.wikipedia.org/wiki/Hitachi_HD44780_LCD_controller | LCD Display HD44780]]
    1819* [[https://www.sparkfun.com/datasheets/LCD/HD44780.pdf | Datasheet du HD44780]]
    1920* [[http://web.alfredstate.edu/weimandn/lcd/lcd_addressing/lcd_addressing_index.html | Adressage de la mémoire interne de l'afficheur]]
    2021
    21 Prenez le temps de lire le document sur les afficheurs LCD HD44780 avant de commencer le TP.
     22Prenez le temps de parcourir les documents sur les afficheurs LCD HD44780 avant de commencer le TP.
    2223
    23 Modalités d'évaluation:
    24 * Vous devez rendre un compte rendu au format PDF '''exclusivement''' de '''maximum''' 2 pages et structuré de la manière suivante:
    25   * Introduction: quel problème vous devez résoudre; en d'autres mots quelles sont les fonctionnalités à implémenter.
     24Dans votre compte-rendu, faîtes apparaitre clairement:
     25  * Le problème vous devez résoudre; en d'autres mots quelles sont les fonctionnalités à implémenter.
    2626  * Le fonctionnement de principe: quelle solution avez vous choisi, quels sont vos choix techniques.
    2727  * Implémentation et résultats: vos observations, quels problèmes avez-vous rencontrez et comment les avez-vous résolus.
    28   * Conclusion
    29 * Vous devez également rendre votre code sous la forme d'une archive tar.gz; le nom de fichier est formatté comme suit: nom1_nom2.tar.gz (binôme) nom1_nom2_nom3.tar.gz (trinôme). Faites attention, la qualité de code (indentation, structure, nom des fonctions et variables...) sont également notés.
     28  * Vous pouvez aussi inclure du code commenté et correctement indenté.
    3029
    3130== 1. Configuration des GPIO pour le pilotage de l'écran ==
    3231
    33 Pour commencer le TP, copier le contenu du répertoire /users/enseig/jpeeters/m1.peri/lab2 dans votre répertoire de travail.
    34 {{{
    35 $ cp -r /users/enseig/jpeeters/m1.peri/lab2 ~/peri/lab2
    36 }}}
     32L'écran LCD de type HD44780 dispose de plusieurs signaux de contrôle et de données. Les signaux de contrôle sont au nombre de 3: RS, RW et E. Les signaux de données sont au nombre de 4 ou 8 suivant le mode.
    3733
    38 Comme vous pouvez le voir dans le document ci-joint, un écran LCD de type HD44780 dispose de plusieurs signaux de contrôle et de données. Les signaux de contrôle sont au nombre de 3: RS, RW et EN. Les signaux de données sont au nombre de 4 ou 8 suivant le mode.
     34Dans ce TP, nous utiliserons l'écran en mode 4-bit car la carte Raspberry Pi dispose d'un nombre limité de GPIO. De plus, le signal RW sera connecté directement à la masse car nous allons gérer que les opérations d'écriture (Note: les GPIO de la carte Raspberry Pi ne supporte pas les niveaux de tension 5V émis par l'afficheur).
    3935
    40 Dans ce TP, nous utiliserons l'écran en mode 4-bit car la carte Raspberry Pi dispose d'un nombre limité de GPIO. De plus, le signal RW sera connecté directement à la masse car nous allons gérer que les opérations d'écriture (Note: les GPIO ne supporte pas les niveaux de tension 0-5V émis par l'afficheur).
    41 
    42 Les signaux de contrôle RS et EN sont utilisés de la manière suivante:
     36Les signaux de contrôle RS et E sont utilisés de la manière suivante:
    4337* RS vaut 1 pour l'envoi d'une donnée (e.g. un caractère) et vaut 0 pour l'envoi d'une commande.
    44 * EN correspond à l'horloge; la valeur sur le bus de données (4 bits) est pris en compte à chaque front descendant de ce signal.
     38* E est un signal de validation; la valeur sur le bus de données (4 bits) est pris en compte à chaque front descendant de ce signal.
    4539
    4640Voici le mapping des GPIO pour les différents signaux:
    4741{{{
    48 -----------------+---------------+
    49 |   Signal LCD   |     GPIO      |
    50 -----------------+---------------+
    51 | RS             | 18            |
    52 | EN             | 23            |
    53 | D0, D1, D2, D3 | 4, 17, 27, 22 |
    54 +----------------+---------------+
     42-----------------+----------------+
     43|   Signal LCD   |     GPIO       |
     44-----------------+----------------+
     45| RS             |             |
     46| E              | 8              |
     47| D4, D5, D6, D7 | 22, 23, 24, 25 |
     48+----------------+----------------+
    5549}}}
    5650
    57 Pour le contrôle des GPIO on utilisera la librairie libgpio fournie lors du précédent TP.
     51Pour le contrôle des GPIO, vous utiliserez ce que vous avez lors des précédents TP.
    5852
    59 Questions:
     53Vous devez répondre aux questions en vous aidant du cours:
    6054* Comment faut-il configurer les GPIOs pour les différents signaux de l'afficheur LCD ?
    6155* Quelle valeur faut-il configurer comme valeur d'initialisation pour les différents signaux ?
     
    6458== 2. Fonctionnement de l'écran et fonctions de base ==
    6559
    66 La prise en compte de la valeur présente sur le bus de 4 bits n'est effective que lors d'un front descendant du signal EN. Pour créer un front descendant, il vous faut garder le signal EN à 1 pendant une demi période et le remettre à 0 pendant une demi période supplémentaire. Une période de 100 us parait être une bonne valeur pour la période.
     60Comme cela a été présenté en cours la prise en compte de la donnée est ré&lisée lors d'un front descendant du signal EN Pour créer un front descendant. On place la donnée, 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.
    6761
    6862Question:
    69 * Ecrire une fonction lcd_strobe qui permet de générer un front descendant
     63* Ecrire une fonction lcd_strobe (nommée nybble dans le cours) qui permet de générer le signal E.
    7064
    7165Nous 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.
    7266
    7367Question:
    74 * Ecrire une fonction lcd_write_4bit_value qui envoie une valeur de 4 bits sur le bus de l'afficheur LCD.
    75 * Ecrire une fonction lcd_write_value qui envoie une valeur de 8 bits sur le bus de l'afficheur LCD en utilisant la fonction lcd_write_4bit_value.
    76 
    77 Note: n'oubliez pas qu'une valeur sur le bus n'est pris en compte que lors d'un front descendant du signal EN.
    78 
    79 Nous avons maintenant les fonctions de base pour commander l'afficheur LCD. Il ne manque plus qu'a distinguer l'envoi de commandes et l'envoi de données. C'est le signal RS qui gère cela. Référez-vous à la documentation.
    80 
    81 Questions:
    82 * Ecrire une fonction lcd_send_4bit_cmd qui envoie une commande sur 4 bits à l'afficheur LCD.
    83 * Ecrire une fonction lcd_send_cmd qui envoie une commande sur 8 bits à l'afficheur LCD.
    84 * Ecrire une fonction lcd_send_data qui envoie une donnée sur 8 bits à l'afficheur LCD.
     68* Ecrire les fonctions lcd_command et lcd_data en vous aidant du cours.
    8569
    8670Nous 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.
    8771
    8872Question:
    89 * Ecrire une fonction lcd_init qui réalise la séquence d'initialisation suivante. Vérifiez sont fonctionnement sur une carte Raspberry Pi.
     73* Ecrire une 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.
     74Vous ajouterez l'initialisatiion des GPIOs.
    9075
    91 {{{
    92 1. Fonction 8-bit (4 MSB bits), wait 50 us /* 8-bit mode */
    93 2. Fonction 8-bit (4 MSB bits), wait 50 us
    94 3. Fonction 8-bit (4 MSB bits), wait 50 us
    95 4. Fonction 4-bit (4 MSB bits), wait 50 us /* 4-bit mode */
    96 
    97 5. Fonction with 2 lines, wait             /* 2 rows */
    98 
    99 6. Display control with display on, wait   /* Activate display */
    100 
    101 7. Entry mode with forward cursor, wait    /* Increment cursor on read/write operation */
    102 
    103 8. Cursor/display shift right, wait        /* Cursor move on the display */
    104 
    105 9. Clear display                           /* Clear */
    106 }}}
    107 
    108 * Rajouter à la fonction lcd_init les étapes supplémentaires qui initialise les GPIOs.
    109 * Ecrire la fonction lcd_deinit qui vide la mémoire de l'afficheur (i.e. clear) et déinitialise les GPIOs.
     76* Ecrire la fonction lcd_cleanup qui vide la mémoire de l'afficheur (i.e. clear) et remet les GPIOs en entrée. Savez-vous pourquoi c'est nécessaie ?
    11077
    11178Vous êtes prêt à tester votre code et vérifier qu'il affiche correctement une chaine de caractère.