TP n°33 : Afficheur LCD |
||
Noms : | ||
Centre d'intérêt : | CI 2 Instrumentation / Acquisition et restitution de grandeurs physiques | |
Classe : | Sti2d Sin | |
Id programme : | sin15, sin31 | |
Conditions : | Seul , durée 3 heures. | |
Matériel : |
- PC |
|
Logiciels : | - Arduino ide - Utiliser le navigateur chrome |
|
Document : |
I. Objectifs
- Etudier un afficheur LCD;
- Programmer en C++.
II. Présentation
Vous utiliserez la carte Arduino Uno avec un shield « LCD Keypad » de chez DFROBOT.
Ce shield est composée d'un afficheur LCD standard, de 5 boutons poussoirs et de quelques picots pour des entrées-sorties analogiques ou numériques. Le schéma de la carte shield LCD est le suivant :
- Hors tension connecter la carte shield « interrupteurs leds » sur la carte Arduino. Prenez soin de ne pas casser des broches ! Connecter ensuite l'Arduino au PC avec un câble USB.
III. L'afficheur LCD
Répondre aux questions en vous aidant de la fiche de cours sur les afficheurs LCD.
- Quelles sont les deux types de mémoires présentes dans un afficheur LCD. A quoi servent-elles ?
- Trouver les codes à envoyer en DDRAM pour effectuer les actions suivantes :
-
Action
Code Hexa D7-D0
Inhiber l’afficheur (Display OFF)
Valider l’afficheur (Display ON) sans curseur ni clignotement
Ramener le curseur en haut à gauche (Return Home)
Effacer l’afficheur
Configurer l’afficheur :
8 bits, affichage sur une ligne, grands caractères
- Donner la succession de codes hexadécimaux à envoyer à l'afficheur afin d’écrire « BONJOUR »
-
B
O
N
J
O
U
R
Lorsque la mémoire est vide, elle contient des codes $FF, expliquer pourquoi l’afficheur affiche des rectangles noirs à la mise sous tension.
IV. Affectation des Entrées-sorties
Afin de faciliter l'écriture de nos programmes, nous allons nommer chacune des broches utilisées à l'aide de l'instruction « #define ». L'instruction #define est un élément très utile du langage C qui permet au programmeur de donner un nom à une constante avant que le programme soit compilé. Les constantes ainsi définie dans le langage Arduino ne prennent aucune place supplémentaire en mémoire dans le microcontrôleur. Le compilateur remplacera les références à ces constantes par la valeur définie au moment de la compilation.
Exemple pour la broche 8 nous écrirons : #define RS 8 // RS est connecté à D8
Ainsi il suffira d'écrire digitalWrite(RS,HIGH) pour placer un niveau haut sur cette broche 8. Ceci rend le programme plus lisible, il n'est pas nécessaire d'avoir en permanence le schéma structurel sous les yeux.
-
Lancer le logiciel Arduino. A l'aide du schéma structurel de la carte shield lcd, compléter l'affectation ci-dessous et en en-tête de votre programme (après les commentaires et avant la fonction setup()).
#define RS 8 // RS est connecté à D8, broche 8 de l'Arduino
#define E ___ // E est connecté à ____
#define D4 ___ // D4 est connecté à ____
#define D5 ___ // D5 est connecté à ____
#define D6 ___ // D6 est connecté à ____
#define D7 ___ // D7 est connecté à ____
V. Initialisation de l'afficheur
-
A partir du schéma structurel de la carte shield LCD, indiquer si l'afficheur LCD est utilisé en 4 bits ou en 8 bits.
-
A l'aide du cours qui décrit la procédure d'initialisation de l'afficheur, écrire la fonction setup().
void setup()
{
/* brochage du microcontrôleur */
pinMode(RS, OUTPUT);
….......// à compléter pour les autres broches
/* initialisation de l'afficheur LCD */
envoiCommande(0x33); // initialisation
envoiCommande(0x....); // mode 4 bits
envoiCommande(0x....); // paramétrage 4bits, + d'une ligne, matrice 5x7
envoiCommande(0x....); // activation écran, pas de curseur, pas de clignotement
envoiCommande(0x....); // efface l'afficheur
envoiCommande(0x....); // ecriture de la gauche vers la droite sans activer le suivi de curseur
envoiCommande(0x....); // Return Home pour le curseur
}
VI. Envoi des octets
-
Utiliser les algorithmes vu en cours pour écrire les fonctions envoiOctetSur4bits(octet), envoiCommande(codeCommande) et envoiCaractere(codeCaractere).
-
Écrire une fonction afficheBonjour() qui envoie les caractères du message « BONJOUR » sur l'afficheur. Cette fonction utilise la fonction envoiCaractere(codeCaractere) pour l'envoi des lettres puis envoiCommande(codeCommande) pour le « Return Home ».
-
Écrire la fonction loop() qui fera simplement appel à la fonction affiche(Bonjour).
-
Compiler votre programme , vérifier l'absence d'erreurs et télécharger-le dans l'Arduino. Vérifier l' affichage du message « BONJOUR ». Faire valider par le professeur.
-
Modifier le message inscrit à l'écran, écrire votre Prénom NOM.
Pour spécifier l'adresse de la case où vous voulez démarrer l'affichage, vous devez envoyer l'instruction suivante avant d'envoyer vos caractères :
-
D7
D6
D5
D4
D3
D2
D1
D0
1
adresse de la case
exemple : l'appel de envoiCommande(0x81) place le curseur de l'afficheur sur la première ligne et le deuxième colonne car 0x81 = B10000001.
-
Modifier votre programme pour mettre le Prénom sur ligne1 et le NOM sur ligne2.
VII. Amélioration de la fonction afficheBonjour : utilisation des tableaux
La fonction afficheBonjour() a une structure très lourde, on répète souvent la même chose. Il faut trouver une autre manière de l'écrire, plus compacte.
Vous allez ranger les codes dans une table, encore appelée tableau, et aller les chercher en fonction d'un indice. Par exemple : message[0] = 'B' ('B' = code ASCII du caractère B)
-
message[0]
message[1]
message[2]
message[3]
message[4]
message[5]
message[6]
B
O
N
J
O
U
R
Ici le tableau s'appelle message, l'indice va de 0 à 6.
-
Déclarer en début de programme un tableau message :
byte message[7]={'B','O','N','J','O','U','R'};
Cette ligne déclare un tableau de 7 caractères de type octet (byte). Les ' ' permettent de ne pas avoir à rechercher les codes ASCII des lettres : Le compilateur remplacera par exemple 'B' par 0x42.
Pour envoyer le message « BONJOUR » vers l'afficheur, nous utilisons alors une boucle for afin de parcourir le tableau. Voici le nouvel algorithme de la fonction afficheBonjour() ;
début
Pour i de 0 à 7
envoiCaractere(message[i]) // envoi de message[0] à message [6]
fin pour
envoiCommande(0x02) // Return Home pour le curseur
fin
-
Modifier votre programme. Tester et faire valider par le professeur.
VIII. Utilisation d'une bibliothèque
Maintenant que vous savez programmer l'afficheur LCD, vous allez découvrir une façon beaucoup plus simple de le commander, en utilisant une bibliothèque ou librairie (library en anglais). Les bibliothèques sont développées par les constructeurs de carte Arduino ou encore par des particuliers qui mettent à disposition leur programme afin de faciliter la programmation.
-
Sous le logiciel Arduino, cliquez sur File, Example, Liquid Crystal puis HelloWorld. Le programme suivant, nettoyé des commentaires anglais, s'ouvre :
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, ); // brochage de RS, E, D4, D5, D6, D7
void setup() {
lcd.begin(16, 2); // afficheur de 16 lignes de 2 colonnes
lcd.print("hello, world!");
}
void loop() {
lcd.setCursor(0, 1); // curseur colonne 0 ligne 1
lcd.print(millis()/1000);
}
La première ligne du programme, #include <LiquidCrystal.h>, prévient le compilateur que vous allez utiliser la bibliothèque LiquidCrystal.h.
La ligne LiquidCrystal lcd(8, ); crée un objet appelé lcd de la classe LiquidCrystal en passant en paramètres le brochage de l'afficheur : RS, E, D4, D5, D6, D7.
-
Modifiez les numéros de broche affectées à l'afficheur dans le programme exemple. Compilez le, programme et testez-le.
-
Quelle instruction permet d'écrire sur l'afficheur ?
-
Quelle instruction permet de sélectionner la case où s'affiche le message sur l'afficheur ?
-
Enregistrez le programme sous un autre nom et modifiez-le afin d'écrire « BIENVENUE » centré sur la première ligne et « EN STI2D SIN » centré sur la deuxième ligne de l'afficheur. Testez et faites valider par le professeur.
Le contenu complet des fonctions écrites dans la bibliothèque LiquidCrystal est disponible à l'adresse http://arduino.cc/en/Reference/LiquidCrystal.
-
En utilisant ce site, modifiez le programme précédent afin de faire défiler à l'infini, de gauche à droite puis de droite à gauche, le message sur l'afficheur. Testez et faites valider par le professeur.
IX. Lire les Boutons-Poussoirs
L'objectif est d'écrire un programme de test du bon fonctionnement des boutons poussoirs de la carte shield. Le programme écrit sur l'afficheur LCD :
-
« TEST BOUTONS » centré sur la première ligne de l'afficheur ;
-
« SELECT » ou « LEFT » ou « UP » ou « DOWN » ou « RIGHT » centrés sur la deuxième ligne si un bouton est appuyé ;
-
« AUCUN APPUI » centré sur la deuxième ligne si aucun des boutons n'est appuyé ;
Les boutons poussoirs sont câblés sur l'entrée analogique A0. Le potentiel sur cette broche varie en fonction du bouton appuyé.
-
Écrire un premier programme qui affiche le résultat de la conversion Analogique Numérique de l'Arduino en cas d'appui sur chacun des boutons (Notez ces valeurs).
-
Écrire le programme complet de test des boutons. Tester et faire valider par le professeur.
Source : Lycée Le Dantec Lannion