Changes between Version 1 and Version 2 of SujetTP4-2015
- Timestamp:
- Mar 5, 2015, 5:18:36 AM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SujetTP4-2015
v1 v2 15 15 16 16 Ressources: 17 * [[http://www.newhavendisplay.com/specs/NHD-0420DZ-FL-YBW.pdf | Datasheet du LCD de la plateforme]] 17 18 * [[http://en.wikipedia.org/wiki/Hitachi_HD44780_LCD_controller | LCD Display HD44780]] 18 19 * [[https://www.sparkfun.com/datasheets/LCD/HD44780.pdf | Datasheet du HD44780]] 19 20 * [[http://web.alfredstate.edu/weimandn/lcd/lcd_addressing/lcd_addressing_index.html | Adressage de la mémoire interne de l'afficheur]] 20 21 21 Prenez le temps de lire le documentsur les afficheurs LCD HD44780 avant de commencer le TP.22 Prenez le temps de parcourir les documents sur les afficheurs LCD HD44780 avant de commencer le TP. 22 23 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. 24 Dans 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. 26 26 * Le fonctionnement de principe: quelle solution avez vous choisi, quels sont vos choix techniques. 27 27 * 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é. 30 29 31 30 == 1. Configuration des GPIO pour le pilotage de l'écran == 32 31 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 }}} 32 L'é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. 37 33 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.34 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 de la carte Raspberry Pi ne supporte pas les niveaux de tension 5V émis par l'afficheur). 39 35 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: 36 Les signaux de contrôle RS et E sont utilisés de la manière suivante: 43 37 * 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 * E N 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. 45 39 46 40 Voici le mapping des GPIO pour les différents signaux: 47 41 {{{ 48 -----------------+--------------- +49 | Signal LCD | GPIO |50 -----------------+--------------- +51 | RS | 18|52 | E N | 23|53 | D 0, D1, D2, D3 | 4, 17, 27, 22|54 +----------------+--------------- +42 -----------------+----------------+ 43 | Signal LCD | GPIO | 44 -----------------+----------------+ 45 | RS | 7 | 46 | E | 8 | 47 | D4, D5, D6, D7 | 22, 23, 24, 25 | 48 +----------------+----------------+ 55 49 }}} 56 50 57 Pour le contrôle des GPIO on utilisera la librairie libgpio fournie lors du précédentTP.51 Pour le contrôle des GPIO, vous utiliserez ce que vous avez lors des précédents TP. 58 52 59 Questions:53 Vous devez répondre aux questions en vous aidant du cours: 60 54 * Comment faut-il configurer les GPIOs pour les différents signaux de l'afficheur LCD ? 61 55 * Quelle valeur faut-il configurer comme valeur d'initialisation pour les différents signaux ? … … 64 58 == 2. Fonctionnement de l'écran et fonctions de base == 65 59 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. 60 Comme 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. 67 61 68 62 Question: 69 * Ecrire une fonction lcd_strobe qui permet de générer un front descendant63 * Ecrire une fonction lcd_strobe (nommée nybble dans le cours) qui permet de générer le signal E. 70 64 71 65 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. 72 66 73 67 Question: 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. 85 69 86 70 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. 87 71 88 72 Question: 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. 74 Vous ajouterez l'initialisatiion des GPIOs. 90 75 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 ? 110 77 111 78 Vous êtes prêt à tester votre code et vérifier qu'il affiche correctement une chaine de caractère.