[TUTORIEL] Écran LCD 2x16 caractères

Informations et questions sur les composants tiers de la boutique (émetteur/récepteur RF, capteurs...)

[TUTORIEL] Écran LCD 2x16 caractères

Message non lude Laetitia » Mer 2 Avr 2014 15:07

Bonjour,

Aujourd'hui nous allons apprendre à nous servir d'un écran LCD 2 lignes 16 caractères rétroéclairé. Il s'agit de celui inclus dans le Kit LCD pour Arduino, celui du Starter Kit pour le MOOC La fabrication numérique et également celui que nous avons sur le Deuligne !

Les écrans LCD sont munis d'une interface parallèle, ce qui signifie que le microcontrôleur doit manipuler plusieurs broches à la fois pour contrôler l'écran. L'interface est constituée des broches suivantes :

- RS : "Register Select", qui contrôle où vous écrivez les données dans la mémoire de l'écran LCD. Vous pouvez sélectionner soit le registre de données, qui garde en mémoire ce qui s'affiche à l'écran, ou le registre d'instructions, où le contrôleur du LCD cherchera les instructions pour savoir quoi faire ensuite.
- R/W : "Read/Write", qui sélectionne le mode d'opération, lecture (read) ou écriture (write).
- E : "Enable", qui autorise l'écriture dans les registres, à mettre à l'état haut.
- DB0-DB7 : "Data 0-7", les broches de données. Les états de ces broches (HIGH ou LOW) représentent les bits que vous écrivez dans un registre lors d'une opération d'écriture, ou les valeurs que vous relevez lors d'une opération de lecture.

Il y a aussi une broche permettant d'ajuster le contraste (VO), des broches d'alimentation (VDD et VSS), et des broches permettant de contrôler le rétro-éclairage (LED+ et LED-).

Le processus permettant de contrôler l'écran consiste à envoyer les données constituant l'image que vous voulez former à l'écran dans les registres de données, puis d'envoyer des commandes au registre d'instructions. La librairie LiquidCrystal incluse dans l'IDE Arduino vous simplifiera la vie de manière à ce que vous ne vous embêtiez pas avec les instructions de bas niveau ;)

Il existe deux modes de communication avec l'écran LCD : 4 ou 8 bits. Le mode 4 bits ne requiert que 7 broches de l'Arduino (en incluant le contrôle du rétro-éclairage), alors que le mode 8 bits en monopolise 11. Pour simplement afficher du texte sur l'écran, on peut généralement se contenter du mode 4 bits, c'est donc celui que nous verrons dans cet exemple.

- MATÉRIEL -

- Arduino Uno (x1)
- Kit LCD pour Arduino (x1)
- Optionnelles : Résistance 10 kOhms (x1) + Résistance 1 kOhms (x1)

Note : Le Starter Kit pour le Mooc La fabrication numérique contient tous les éléments nécessaires à la réalisation des montages.

Fiche technique de l'écran LCD disponible ici.

- SCHÉMA DU MONTAGE -

Schéma_LCD.png
Schéma_LCD.png (85.32 Kio) Vu 4607 fois

En prenant les broches de l'écran de gauche à droite, nous avons branché
- VSS et VDD respectivement au GND et au +5V.
- VO à une alimentation passant par un potentiomètre pour pouvoir régler le contraste.
- RS à D12.
- R/W au GND : en lisant la datasheet du LCD on voit qu'un état bas sur cette broche indique une opération d'écriture, pour cet exemple nous n'avons pas besoin de lire les registres de l'écran, alors économisons une broche sur notre Arduino !
- E à D11.
- DB4 à DB7 aux broches D5 à D2 : attention à l'ordre de branchement !
- LED+ au +5V via une résistance de 150 Ohms.
- LED- au GND.

ATTENTION: Si vous possédez un écran LCD de marque RAYSTAR (étiquette au dos), les broches R/W et E sont inversées. R/W et E sont donc respectivement sur les broches 6 et 5 de l'écran LCD.

- CONTRASTE ET RÉTROÉCLAIRAGE -

Sur le montage ci-dessus, nous réglons le contraste à la main avec un potentiomètre. Il est possible qu'une fois votre projet réalisé vous n'ayez plus besoin d'y toucher, et que vous souhaitiez remplacer celui-ci par une solution fixe. Il est possible de le remplacer par un pont diviseur de tension, en ayant déterminé les valeurs des résistances nécessaires pour votre réglage personnel. Avec une résistance de 10 kOhms et une autre de 1 kOhms on arrive généralement à un résultat correct.

Vous aurez remarqué la présence d'une résistance de 150 Ohms sur la broche de rétroéclairage du LCD. Celle-ci sert à limiter le courant entrant dans l'écran, et donc sa luminosité. Il est possible de jouer avec l'intensité lumineuse de votre écran en augmentant ou en diminuant la valeur de cette résistance, ou de la contrôler manuellement avec un potentiomètre. Attention cependant, dans ce cas il ne faut utiliser que deux broches de celui-ci, et ne pas l'alimenter, car c'est une résistance que l'on veut exploiter et non une tension :!:

Le montage modifié deviendrait alors :

Schéma_LCD_alt.png
Schéma_LCD_alt.png (88.58 Kio) Vu 4607 fois

- CODE -

Code: Tout sélectionner
/*
  Exemple d'utilisation d'un écran LCD 2x16 caractères avec la librairie LiquidCrystal :
  Chronomètre DIY personnalisable
*/

// Inclusion de la librairie LiquidCrystal
#include <LiquidCrystal.h>

// Initialisation de l'écran LCD avec les numéros des broches reliées à l'interface
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
  // Initialisation de l'interface de l'écran LCD
  // et paramétrage du nombre de colonnes et de lignes
  // (nécessaire avant toute autre commande)
  lcd.begin(16, 2);
 
  // Affichage d'un message à l'écran
  lcd.print("Chronometre DIY");
 
  // Placement du curseur à la colonne 13, ligne 1
  // La ligne 1 est en réalité la seconde puisque l'on compte à partir de zéro
  lcd.setCursor(13, 1);
 
  // Affichage d'un second message en bout d'écran
  lcd.print("...");
}

void loop()
{
  // Placement du curseur à la colonne 0, ligne 1
  lcd.setCursor(0, 1);
 
  // Affichage du temps écoulé depuis le dernier démarrage du programme
  lcd.print(millis() / 1000);
  lcd.print(" secondes");
}

- COMMENTAIRES -

Les caractères envoyés sur l'écran sont les caractères ASCII imprimables (voir ici). Dans le premier message envoyé au LCD, remplacez "Chronometre" par "Chronomètre" et voyez comment s'affiche l'accent... pour pouvoir afficher des caractères spéciaux il vous faudra utiliser la fonction createChar() incluse dans la librairie, vous pourrez également l'utiliser pour créer vos propres symboles ou dessiner des Space Invaders :geek: (plus de détails ici, en anglais).

millis() est une fonction qui renvoie le nombre de millisecondes écoulées depuis le dernier démarrage de l'Arduino. En divisant cette valeur par 1000 vous obtenez le nombre de secondes écoulées... et voilà pour un chronomètre simple.
Si vous modifiez la vitesse de défilement (millis() / 10 par exemple), vous ne verrez certes pas le monde tourner plus vite, mais vous remarquerez au bout d'un certain temps que vous allez manquer de place pour afficher tous les caractères que vous aviez programmé : les "..." finiront par disparaître à profit des "secondes" qui viendront s'écrire par-dessus. Ce message en bout de ligne sert à illustrer le fait que vous ne pouvez écrire qu'un seul caractère par emplacement prévu à cet effet.

N'hésitez pas à parcourir la documentation de la librairie pour découvrir d'autres fonctions pour manipuler l'écran, elle est disponible en anglais sur le site d'Arduino et a été partiellement traduite ici.

C'est tout pour cette fois ! J'espère que ce tutoriel vous aura plu, et bonne bidouille en attendant le prochain !
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 296
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Re: [TUTORIEL] Écran LCD 2x16 caractères

Message non lude fred » Mar 16 Déc 2014 19:08

Parfois il est utile de relier la pin 6 du LCD à la 10 de l'Arduino pour pouvoir piloter l'état "en écriture" / "en lecture" avec une broche en utilisant :

// Initialisation de l'écran LCD avec les numéros des broches reliées à l'interface
LiquidCrystal lcd(12, 11,10, 5, 4, 3, 2);

Dans l'exemple, la pin 6 est à GND et le troisième paramètre LiquidCrystal lcd() est omis.

C'est utile pour certains LCD de nos kits.
Avatar de l’utilisateur
fred
 
Messages: 215
Inscription: Lun 20 Déc 2010 15:32
Localisation: Toulouse


Retourner vers Composants tiers

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron