Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Démarrer en électronique programmable

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Re: Démarrer en électronique programmable

Publié: Lun 30 Mai 2016, 17:07 
Aujourd'hui, reprise du cours d'électronique programmable avec les afficheurs LCD. Ce cours fait suite au chapitre "Afficheurs à DEL" publié dans l'autre forum dans le fil "Démarrer en électronique" ; j'aurais pu le mettre à la suite, mais comme vous le verrez, il sera beaucoup question d'Arduino donc pour ne pas mélanger les genres (et respecter une parole donnée à la Modération), nous allons traiter le sujet dans cette salle. :ange3:

Afficheurs et écrans LCD

LCD signifie Liquid Crystal Display ou encore affichage à cristaux liquides. Il existe des afficheurs LCD à segments qui ont remplacé les afficheurs à DEL ou bien des écrans monochromes ou en couleurs pouvant afficher plusieurs lignes de caractères constitués de matrices de points (pixels ou encore picture elements) ou pouvant afficher de véritables images. La technologie des cristaux liquides permet d’obtenir des écrans plats à faible consommation qui aujourd’hui, sont utilisés dans la plupart des affichages. Un microcontrôleur est nécessaire pour les piloter et nous verrons que celui que nous trouvons dans nos modules Arduino se débrouille très bien pour cela.

Dans la suite de ce chapitre, nous oublierons les afficheurs à segments et nous ne parlerons que des afficheurs capables d’écrire des caractères alphanumériques sur plusieurs lignes. La figure 146 montre ce type d’afficheur LCD.

Image

Technologie des LCD

Nous n’allons pas rentrer dans le détail du fonctionnement des écrans à cristaux liquides ; le lecteur intéressé pourra trouver plus d’informations sur le net. Un cristal liquide est un état de la matière qui combine les propriétés des liquides et les propriétés des solides cristallins. L’écran LCD utilise d’une part la polarisation de la lumière et d’autre part la biréfringence des cristaux liquides dont on peut faire varier l’orientation en fonction d’un champ électrique.

Image

La figure 147 extraite de Wikipedia, montre la constitution d’un écran LCD. L’application d’une tension plus ou moins élevée entre les deux électrodes d’un pixel provoque un changement d’orientation des cristaux liquides et une variation du plan de polarisation de la lumière donc une variation de la transparence du pixel. La lumière du fond (rétroéclairage ou miroir) est alors transmise ou non en fonction de la transparence du pixel.

Pour un écran en couleur, le principe est le même mais chaque pixel est constitué de trois cellules chacune munie d’un filtre rouge, vert, bleu (RVB). Pour améliorer le contraste, les éléments du filtre RVB sont entourés d’une bande noire.

Ecrans LCD facilement utilisables en modélisme ferroviaire

Un écran couleur comme ceux qu’on trouve sur un smartphone peut représenter à l’échelle un écran de télévision géant comme on en trouve dans les grands stades pour retransmettre les actions d’un match de foot ou bien un concert. On peut voir cela à Hambourg sur le réseau miniature bien connu des amateurs de trains électriques.

Dans ce cours, nous nous limiterons aux écrans LCD permettant d’afficher des caractères alphanumériques sur plusieurs lignes. Etant monochromes, on pourrait penser qu’ils ne sont d’aucune utilité pour décorer un réseau ; je vous invite alors à aller voir ce que Gilbert (Dangui95) publie dans le forum Arduino (Affichage arrivée départ fonctionnel 1/87), la vidéo est époustouflante. Plus généralement, les afficheurs LCD rendent de grands services dans un montage électronique pour afficher des informations diverses ou encore pour constituer un écran présentant différentes options dans le déroulement d’un programme informatique.

Les modules Arduino permettent de commander simplement ce genre d’écrans grâce à une bibliothèque incorporée qui simplifie l’écriture et la mise au point des programmes. La suite de ce chapitre évoquera la façon d’utiliser ces petits écrans monochromes mais il existe aussi sur le net des tutos qui vous apprendront à mettre en œuvre des écrans LCD couleurs et même tactiles !

J'espère que ces quelques généralités vous auront mis l'eau à la bouche et que vous aurez envie d'en savoir plus. A demain...
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Mar 31 Mai 2016, 12:52 
Aujourd'hui, nous allons voir comment racorder un écran LCD à un module Arduino. Nous savons en effet qu'il existe une bibliothèque pour ce genre d'afficheur et ce sera autant de temps gagné puisque nous n'aurons pas à développer le logiciel d'affichage, ce que nous aurions à faire si on utilisait un microcontrôleur différent de celui d'Arduino.

Pilotage d’un écran LCD monochrome avec Arduino

N’importe quel afficheur ou presque peut être piloté par un module Arduino à condition de trouver une bibliothèque qui le gère ou bien de l’écrire vous-même, ce qui peut représenter pas mal de travail. La bibliothèque fournie avec l’environnement de développement d’Arduino s’appelle LiquidCrystal et permet de gérer les afficheurs Hitachi HDD44780 ou ceux répondant à cette norme qui a fini par s’imposer.

Ces afficheurs affichent les caractères sous la forme d’une matrice de points de 5 x 8 (8 lignes de 5 colonnes). La figure 148 montre un exemple des divers caractères qu’on peut ainsi obtenir.

Image

Les écrans LCD sont déjà des composants intelligents dans la mesure où ils se chargent de l’affichage des données qu’on leur envoie ; le composant est donc constitué de l’écran et de l’électronique de gestion qui facilite la commande de l’afficheur par le microcontrôleur en le déchargeant entre autre de la génération des caractères à afficher.

Les afficheurs disposent de 14 ou 16 broches de connexion. En fait, à l’état neuf, les afficheurs n’ont souvent qu’une rangée de trous où il est nécessaire de souder une barrette sécable à broches ; l’écran pourra alors s’enficher dans une plaque d’essai pour la mise au point du programme. Les afficheurs à 16 broches ont deux broches de plus que ceux à 14 (merci Monsieur de La Palisse ! :mdr: ) qui servent à alimenter le rétroéclairage en respectant la polarité de branchement. Voyons le rôle des 14 autres broches.

Il y a tout d’abord trois broches pour alimenter l’écran, une à relier au pôle positif de l’alimentation (VDD), une autre à relier au pôle négatif de l’alimentation (la masse ou GND ou VSS) et une troisième à relier à une tension comprise entre GND et Vss par l’intermédiaire d’un potentiomètre de 10 ou 20 kilo-Ohms servant à ajuster le contraste de l’écran.

Il y a aussi 8 broches, numérotées DB0 à DB7, qui servent à transmettre les données échangées avec l’afficheur. Ces données peuvent être les caractères à afficher (comme par exemple A, @ ou # ou encore tout caractère qu’on peut trouver sur un clavier d’ordinateur), ou bien des codes de commande de l’écran (comme par exemple effacer l’écran). Comme on utilise les 8 lignes, on dit que l’afficheur fonctionne en mode 8 bits. Les afficheurs peuvent aussi fonctionner en mode 4 bits, ce qui représente moins de ressources d’entrées-sorties pour le microcontrôleur ou le module Arduino. Dans ce cas, les données sont transmises en deux fois sur 4 bits, ce qui implique un temps de traitement un peu plus long, et les lignes à utiliser sont DB4 à DB7.

Enfin, les trois dernières broches servent à contrôler l’afficheur :
- E : (Enable) (au niveau haut) pour prendre en compte la donnée présente (commande ou caractère) sur les lignes de données
- R/W : (Read/Write) pour écrire une donnée dans l’afficheur (R/W à 0) ou lire ses informations (R/W à 1) contenues dans un registre interne.
- RS : (Register Select) indique si les données sont des caractères à afficher (RS à 1) ou des commandes pour gérer l’afficheur (RS à 0)

Bien souvent la ligne R/W est reliée à la masse, ce qui bloque l’afficheur en mode écriture (qui est le principal mode d’utilisation) ; il devient alors impossible de lire ses registres d’état mais cette lecture est rarement nécessaire.

La figure 149 montre comment relier un écran LCD à un module Arduino ou un microcontrôleur en mode 8 bits (ou 4 bits si on ne connecte pas les lignes violettes).

Image

Pour utiliser l’afficheur, il suffit de :
- Mettre à 0 la ligne R/W (on veut écrire)
- Positionner la ligne RS selon que la donnée est un caractère ou un code de commande
- Positionner le code du caractère sur les lignes DB0 à DB7 (en mode 8 bits) ou DB4 à DB7 (en mode 4 bits et le faire deux fois pour transmettre l’intégralité du code)
- Mettre la ligne E à 1 pour prendre en compte la donnée
- Mettre la ligne E à 0 pour rendre l’afficheur insensible à ce qui se trouve sur les lignes de données

Comme vous le voyez, c’est assez facile et cette procédure est à appliquer si vous utilisez un microcontrôleur. Avec un module Arduino, c’est encore plus simple puisqu’il existe une bibliothèque (LiquidCrystal) et des fonctions simples pour gérer l’écran LCD. Afficher sur l’écran LCD n’est alors pas plus difficile qu’afficher des résultats dans le moniteur de l’environnement de développement (voir les précédents chapitres du cours « Démarrer en électronique programmable »).

Le prochain cours vous permettra de découvrir la bibliothèque LiquidCrystal ; en effet, le hardware que nous venons de décrire ne servirait à rien sans un software efficace.

Edité une fois cause erreur repérée par un lecteur (interversion dans le texte entre Vdd et Vss).
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Mer 01 Juin 2016, 10:48 
Dernier volet de ce chapitre : la fameuse bibliothèque LiquidCrystal. Et une fois de plus, c'est super de pouvoir utiliser le travail des autres plutôt que d'avoir à réinventer la roue : c'est ce qu'on appelle l'OpenSource.

Bibliothèque « LiquidCrystal » pour module Arduino

Nous n’allons pas rentrer dans le détail des différentes fonctions de cette bibliothèque puisque celles-ci sont décrites sur le site d’Arduino. Nous nous contenterons donc de les survoler.

LiquidCrystal() : cette fonction définit le mode de connexion de l’afficheur à Arduino. La forme la plus complète serait :

LiquidCrystal (rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7) ;

mais certains arguments peuvent être omis. Par exemple :

LiquidCrystal lcd (8, 9, 2, 3, 4, 5) ;

Ceci baptise notre afficheur du nom de lcd (vous pouvez choisir autre chose) et précise le mode d’utilisation en 4 bits, avec R/W à la masse, RS en 8, E (enable) en 9 et les données en 2, 3, 4 et 5.

begin() : à mettre dans la fonction setup et précise le nombre de caractères par ligne et le nombre de lignes.

Exemple : lcd.begin (16, 2) ; pour 2 lignes de 16 caractères pour l’écran que vous avez appelé lcd.

home() et clear() : home pour mettre le curseur en haut à gauche de l’afficheur (sans toucher au contenu déjà affiché) et clear pour effacer l’écran.

Exemple : lcd.clear() ;

setCursor() : pour positionner le curseur.

Exemple lcd.setCursor (1, 2) ;

print() : bien évidemment la fonction principale qui permet d’écrire une donnée sur l’écran. La donnée peut être un nombre, un caractère ou une chaine de caractères.

Exemple : lcd.print (donnée, base) ; où base peut prendre les possibilités BIN, DEC, OCT, ou HEX pour afficher la donnée dans la base choisie (ce paramètre est optionnel)

Je vous laisse consulter par vous-même les autres fonctions de cette bibliothèque ; avec ce qui vient d’être décrit, on peut commencer à faire apparaître des informations sur un afficheur LCD relié à un module Arduino.

Cartes shield avec écran LCD pour modules Arduino

Pour ceux qui ne veulent pas se compliquer la vie, il existe des cartes shields s’enfichant sur les modules Arduino et comprenant tout ce qu’il faut pour communiquer avec le module, à savoir un écran LCD et des boutons poussoirs. L’utilisateur n’a plus qu’à concevoir l’affichage de menus déroulants sur son écran et les boutons poussoirs servent à naviguer dans ces menus et à valider l’option choisie. Parmi ces shields, on peut citer le LCD Keypad Shield d’Electronic Kits Zone de la figure 150.

Image

A retenir :
- Les écrans ou afficheurs LCD utilisent la technologie des cristaux liquides qui permet d’obtenir des afficheurs monochromes ou couleurs à faible consommation.
- L’écran LCD utilise d’une part la polarisation de la lumière et d’autre part la biréfringence des cristaux liquides dont on peut faire varier l’orientation en fonction d’un champ électrique. L’application d’une tension plus ou moins élevée entre les deux électrodes d’un pixel provoque un changement d’orientation des cristaux liquides et une variation du plan de polarisation de la lumière donc une variation de la transparence du pixel.
- Les écrans LCD couleurs peuvent constituer des éléments décoratifs sur un réseau de trains miniatures.
- Les écrans LCD monochromes sont surtout utilisés dans un montage électronique ayant une utilité en modélisme ferroviaire, comme par exemple afficher la tension du courant servant à la traction des trains.
- Les écrans LCD sont interfacés en utilisant soit un microcontrôleur, soit un module Arduino ; l’avantage de cette solution est qu’il existe une bibliothèque permettant de gérer simplement l’écran LCD.
- L’interfaçage de l’écran avec un microcontrôleur ou un module Arduino peut se faire en mode 8 bits (plus rapide) ou en mode 4 bits (demandant moins de lignes d’entrée-sortie).
- L’écran LCD est déjà un composant intelligent qui se charge de son propre affichage, le microcontrôleur ou le module Arduino n’ayant plus qu’à envoyer des données à l’afficheur.
- Les données peuvent être les codes des caractères à afficher ou bien des codes de commandes pour gérer l’affichage.
- La bibliothèque LiquidCrystal, incluse dans l’environnement de développement, permet de s’affranchir de tout cela grâce à des fonctions simples comme un simple « print ».
- Il existe des cartes shields comprenant écran et boutons poussoirs permettant de faire communiquer Arduino avec le monde extérieur.

Voilà, vous pouvez maintenant joindre un écran LCD à votre module Arduino, ce qui vous évite d'avoir à utiliser le moniteur de l'IDE pour visualiser des données. Bien sûr, cet écran utiliser de nombreuses lignes d'E/S mais si vous êtes allés voir le post de Dangui95, vous savez que certains écrans LCD peuvent être commandés par un bus qui ne nécessite que quelques lignes (bus I2C par exemple. Nous en reparlerons bientôt dans ce forum. :wink:
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Jeu 02 Juin 2016, 08:50 
Très belle présentation de l'afficheur LCD.

:applause:
Cordialement,

Christian.
Avatar de l’utilisateur
likiki
Causant
 
Messages: 250
Inscrit le: Dim 29 Avr 2012, 15:21
Localisation: Corbeil Essonne
Âge: 50
Echelle pratiquée: N
Prénom: Christian

Re: Démarrer en électronique programmable

Publié: Jeu 02 Juin 2016, 10:22 
Dans le forum "Démarrer en électronique", je viens de publier un nouveau chapitre qui fait le tour des capteurs. Ces composants sont d'un grand intérêt pour ceux qui travaillent avec des microcontrôleurs puisqu'ils envoient les informations que le µC traite pour gérer le réseau. La lecture de ce chapitre est donc vivement conseillée et vous pouvez le lire ICI.
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Jeu 02 Juin 2016, 10:32 
likiki a écrit:Très belle présentation de l'afficheur LCD.

:applause:


Merci Christian, mais je n'ai pas oublié que tu as été le premier à publier sur le forum Arduino une utilisation des afficheurs LCD en modélisme ferroviaire.
Où en es-tu de tes montages avec Arduino ?
As-tu été voir ce qu'a publié Dangui95 sur l'affichage des horaires au 1/87 ? Fabuleux, non ? :D
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Ven 03 Juin 2016, 16:43 
Le deuxième volet du chapitre sur les capteurs vient d'être publié. Vous pouvez le retrouver ICI. :moi:
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Sam 04 Juin 2016, 11:19 
Le troisième volet du chapitre sur les capteurs se trouve ICI.
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Dim 05 Juin 2016, 12:31 
Le dernier volet du chapitre sur les capteurs vient d'être publié avec un montage économique et très utile sur un réseau : un block système. :coeur2:

Pour lire ce dernier volet, c'est ICI.
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Ven 10 Juin 2016, 20:20 
Je viens de rééditer un lien de téléchargement pour mon cours d'électronique. Cette fois, vous avez les PDF de l'ensemble du cours (électronique classique ET électronique programmable). Bien sûr, vous ne garder que ce que vous voulez. :lol:

Pour obtenir le lien, il suffit de me le demander à mon adresse mail réservée pour le train miniature :
christian.bezanger@gmail.com

Ce lien est valide jusqu'au 17 juin, alors ne tardez pas à faire la demande, et rassurez-vous, je n'utilise votre adresse que pour vous répondre ! 8)
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Jeu 07 Juil 2016, 23:18 
Question en relation avec le cours concernant la gestion du temps..

J'ai fait des essais avec la fonction (millis) pour piloter une ancienne pendule (1/2 minutes)
Ma pendule prend de l'avance, environ 25s par jour ce qui représente 16 ms par minute.(sauf erreur de calcul rapide)
Ma question est: existe-t'il une méthode plus précise pour gérer une horloge avec arduino et un shield particulier ou bien doit on ajuster... et compter 30008 au lieu de 30000... en tâtonnant pour affiner le résultat.
Cet écart de 0.02% correspond-t'il à la précision du quartz 16Mhz
Merci pour votre réponse
Avatar de l’utilisateur
sergio11
Bavard
 
Messages: 54
Inscrit le: Ven 08 Jan 2016, 23:20
Localisation: 11 Ouveillan
Âge: 63
Echelle pratiquée: N
Prénom: Serge

Re: Démarrer en électronique programmable

Publié: Mer 13 Juil 2016, 18:43 
Bonjour Sergio,

Tout dépend de ton programme et comment il est écrit.
Néanmoins, 25s sur toute une journée, cela me parait énorme et je pense que le µC peut mieux faire surtout s'il est piloté par un quartz de 16 MHz, comme c'est le cas pour un module Arduino.
Il faut donc regarder de près le programme pour voir ce qui ralentit le décompte au point de terminer avec 25 s de différence au bout d'une journée. Pour cela, il faut regarder les fonctions utilisées et le nombre de cycles d'horloge comme indiqué dans la datashield. Mais ce n'est pas si facile ; en effet, combien de cycles seront nécessaires si on utilise une fonction comme digitalWrite à comparer avec le nombre de cycles nécessaires si on écrit directement dans les registres concernés ?
C'est un peu pour cela que j'étais rentré dans les entrailles du µC dans le cours, même si cela est plus compliqué que d'utiliser des fonctions toutes faites... Parfois, on y trouve son avantage. :wink:
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Jeu 14 Juil 2016, 18:43 
Bonsoir Christian et merci pour ta réponse

Je vais essayer de te joindre le programme qui est en fait très simple avec quelques commentaires sur mes choix

Code: Tout sélectionner
int led2 = 2;
int led3 = 3;
int bouton = A4;
unsigned long tempsAncien1 = 0;

void setup() {
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(bouton, INPUT_PULLUP);
}

void loop() {
unsigned long tempsActuel = millis();

  if (digitalRead (bouton) == LOW)  {
     digitalWrite (led2,HIGH);
     delay (200);
     digitalWrite (led2,LOW);
     delay (200);
     digitalWrite (led3,HIGH);
     delay (200);
     digitalWrite (led3,LOW);
     delay (200); 
  }
     else  {
       
 
if ((tempsActuel - tempsAncien1 >=  0) && (tempsActuel - tempsAncien1 < 200))  {
 
  digitalWrite ( led2, HIGH);
}

else  {
  digitalWrite(led2, LOW);
}

if ((tempsActuel - tempsAncien1 >= 60000) && (tempsActuel - tempsAncien1 < 60200)){

  digitalWrite (led3, HIGH);
}
else  {
  digitalWrite (led3, LOW);
}
if (tempsActuel - tempsAncien1 >= 120000){
  tempsAncien1 = tempsActuel;
}
}
}


Commentaires:
Pour un cycle complet je dois générer 2 impulsions de polarités inverses
Voilà pourquoi deux sorties
Dans ce cas c'est une pendule qui reçoit une impulsion toutes les minutes donc un cycle de 2 minutes.
Impulsion d'une durée de 0.2s
Le bouton sert pour la mise à l'heure en générant une "rafale" d'impulsions.
J'utilise millis() et non delay() pour que le bouton de mise à l'heure soit actif immédiatement et non au bout de 2 minutes

Merci pour ton avis, mais que cela ne te fasse pas trop perdre de temps
Cette pendule est purement décorative dans mon local "train" et à défaut de solution technique, comme toutes les valeurs m'indiquent toujours ce décalage de 25 s je dois pouvoir arriver à un résultat correct en modifiant les valeurs
Par contre pour ma "culture" une explication est toujours intéressante!!!


Merci encore et bonne soiree
Avatar de l’utilisateur
sergio11
Bavard
 
Messages: 54
Inscrit le: Ven 08 Jan 2016, 23:20
Localisation: 11 Ouveillan
Âge: 63
Echelle pratiquée: N
Prénom: Serge

Re: Démarrer en électronique programmable

Publié: Dim 13 Nov 2016, 15:10 
Bonjour à tous,

Un des lecteurs du forum m'a demandé de rééditer un lien de téléchargement de mes cours d'électronique. Vous le trouverez ci-dessous :
https://we.tl/STUcadPGHb

Il est valide jusqu'au 20 novembre 2016. Une fois le fichier dézipé, vous obtiendrez deux répertoires avec les PDF du cours d'élec classique et d'élec programmable.

Il y a moins d'un an, je commençais le cours "Démarrer en électronique programmable" et la version du logiciel qui permet de programmer les modules Arduino était 1.6.7. Aujourd'hui, nous en sommes à 1.6.12 mais la philosophie est la même et ce qui a été dit dans le cours reste valable.

Bonne lecture de ce cours.

Christian
Avatar de l’utilisateur
Arduino
Démonstratif
 
Messages: 1510
Inscrit le: Mer 25 Sep 2013, 17:14

Re: Démarrer en électronique programmable

Publié: Dim 13 Nov 2016, 16:25 
bonjour Christian

bonne fête en retard

merci pour les cours c'est téléchargé
Fmd14
Avatar de l’utilisateur
fmd14
Papotier
 
Messages: 107
Inscrit le: Mar 21 Oct 2014, 09:34
Localisation: Basse Normandie
Âge: 62
Echelle pratiquée: HO
Prénom: François

PrécédentSuivant

Retour vers Arduino

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invité(s)