Version 3 (modified by 11 years ago) (diff) | ,
---|
TP2 : Pilotage d'un écran LCD en mode utilisateur
Objectifs:
- Configuration des GPIOs pour le pilotage d'un périphérique
- Fonctionnement d'un écran LCD et fonctions de base
- Affichage du monitoring système
Pré-requis (Raspberry Pi):
- Outils de compilation croisée
- Configuration et utilisation des GPIO
Ressources:
Prenez le temps de lire le document sur les afficheurs LCD HD44780 avant de commencer le TP.
1. Configuration des GPIO pour le pilotage de l'écran
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.
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).
Les signaux de contrôle RS et EN sont utilisés de la manière suivante:
- RS vaut 0 pour l'envoi d'une donnée (e.g. un caractère) et vaut 1 pour l'envoi d'une commande.
- EN correspond à l'horloge; la valeur sur le bus de données (4 bits) est pris en compte à chaque front descendant de ce signal.
Voici le mapping des GPIO pour les différents signaux:
-----------------+---------------+ | Signal LCD | GPIO | -----------------+---------------+ | RS | 18 | | EN | 23 | | D0, D1, D2, D3 | 4, 17, 27, 22 | +----------------+---------------+
Pour le contrôle des GPIO on utilisera la librairie libgpio fournie lors du précédent TP.
Questions:
- Comment faut-il configurer les GPIOs pour les différents signaux de l'afficheur LCD ?
- Quelle valeur faut-il configurer comem valeur d'initialisation pour les différents signaux ?
- Pouvez-vous donner, en résumé, les étapes clés pour l'initialisation des GPIO en mode utilisateur ?
2. Fonctionnement de l'écran et fonctions de base
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.
Question:
- Ecrire une fonction C lcd_strobe qui permet de générer un front descendant
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.
Question:
- Ecrire une fonction lcd_write_4bit_value qui envoie une valeur de 4 bits sur le bus de l'afficheur LCD.
- 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.
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 gère cela.
Questions:
- Ecrire une fonction lcd_send_cmd qui envoie une commande sur 8 bits à l'afficheur LCD.
- Ecrire une fonction lcd_send_data qui envoie une donnée sur 8 bits à l'afficheur LCD.