Page 1 sur 1

effacer le lcd avec commande binaire

Message non luPosté: Sam 9 Juin 2012 17:17
de lcd1602
bonjour,
je souhaite effacer le LCD de façon binaire.
en lui envoyant la valeur 0b00000001 qui correspond au clear de la librairie liquid.
c'est pour comprendre le fonctionnement.
d’après ce que j'ai pu glaner il faut:
mette la broche enable à 1
mettre la broche RS à 0
envoyer la commande 0b00000001 sur D...
remettre enable à 0.
pour l'instant ce ne donne rien.
avez vous une petite idée, un bout de code :)
a+

Re: effacer le lcd avec commande binaire

Message non luPosté: Dim 10 Juin 2012 08:27
de SesechXP
Salut,

L'écran LCD du Deuligne est câblé pour être utilisé en mode 4 bits. Par conséquent l'envoi de chaque octet vers celui-ci se fait en deux étapes :
1- envoi du quartet de poids fort ;
2- envoi du quartet de poids faible.
Pour la commande clear, il faut donc envoyer successivement 0b0000 puis 0b0001.

Pour effacer l'écran il faut donc :
- mettre la broche RS à 0 ;
- envoyer le quartet de poids fort ;
- mettre la broche EN à 1 ;
- tempo ;
- mettre la broche EN à 0 ;
- envoyer le quartet de poids faible ;
- envoyer le quartet de poids fort ;
- mettre la broche EN à 1 ;
- tempo ;
- mettre la broche EN à 0.

Après il ne faut pas oublier de tenir compte des spécificités du Deuligne qui utilise un MAX23008 :!:

Re: effacer le lcd avec commande binaire

Message non luPosté: Dim 10 Juin 2012 09:32
de lcd1602
merci SEsechXP
pour votre réponse. :D

mettre les broche soit à un soit à 0 je sais faire,
mais envoyer quartet de poids fort comment on fait ?

on envoi successivement quartet de poids fort ,
puis le poids faible, puis le poids fort ??????
merci pour votre lecture.
cldt.

Re: effacer le lcd avec commande binaire

Message non luPosté: Dim 10 Juin 2012 10:24
de SesechXP
Un quartet est un demi-octet. Ici, l'octet qu'on veut envoyer est 0b00000001, ce qui fait deux quartets à envoyer : 0b0000 puis b0001.

Pour le Deuligne, le plus simple est de regarder ce que fait sa bibliothèque quand on appelle la méthode clear :
Code: Tout sélectionner
void Deuligne::clear() {
  command(CMD_CLR);
}

qui appelle la méthode command :
Code: Tout sélectionner
void Deuligne::command( uint8_t command ) {
  // RS - leave low
  WriteLCDByte(myAddress,command);
  delay(1);
}

qui appelle la méthode WriteLCDByte (c'est là que ça devient intéressant) :
Code: Tout sélectionner
void WriteLCDByte( byte deviceAddr, byte bdata ) {
  SendToLCD(deviceAddr,bdata >> 4);
  SendToLCD(deviceAddr,bdata & 0x0F);
}

Ici la variable bdata est égale à la commande clear, soit 0b00000001. Et son envoi se fait en deux temps en appelant deux fois la méthode SendToLCD :
1- envoi du quartet de poids fort (bdata >>4 = 0b0000) :
Code: Tout sélectionner
SendToLCD(deviceAddr,bdata >> 4);

2- envoi du quartet de poids faible (bdata &0x0F = 0b0001) :
Code: Tout sélectionner
SendToLCD(deviceAddr,bdata & 0x0F);

Vient ensuite la méthode SendToLCD qui envoie le fameux quartet et pilote le signal de validation EN :
Code: Tout sélectionner
void SendToLCD( byte deviceAddr, byte data ) {
  data |= dataPlusMask;
  SetMCPReg(deviceAddr,0x0A,data);
  data ^= 0x10; // E
  delayMicroseconds(1);
  SetMCPReg(deviceAddr,0x0A,data);
  data ^= 0x10; // E
  delayMicroseconds(1);
  SetMCPReg(deviceAddr,0x0A,data);
  delay(1);
}

Re: effacer le lcd avec commande binaire

Message non luPosté: Dim 10 Juin 2012 10:59
de lcd1602
merci, :D
j'y vois un peu plus clair.
les commandes :
WriteLCDbyte,SendToLCD,SetMCPReg...
font partie exclusivement de la bibliothèque deux lignes , car j'utilise LiquidCrital qui possède les mêmes fonctions.
Mais elle ne semble par avoir ces commandes ???
comment peux ton avoir acces à la commande clear, pour savoir si elle est vraiment semblable à la deux lignes???
a+

Re: effacer le lcd avec commande binaire

Message non luPosté: Dim 10 Juin 2012 12:50
de SesechXP
lcd1602 a écrit:les commandes :
WriteLCDbyte,SendToLCD,SetMCPReg...
font partie exclusivement de la bibliothèque deux lignes , car j'utilise LiquidCrital qui possède les mêmes fonctions.
Mais elle ne semble par avoir ces commandes ???

Tout à fait, ce sont des méthodes propres à la bibliothèque Deuligne et au shield Deuligne. Donc LiquidCrystal ne les a pas.
lcd1602 a écrit:comment peux ton avoir acces à la commande clear, pour savoir si elle est vraiment semblable à la deux lignes???

Les sources de la bibliothèque LiquidCrystal sont disponibles avec l'environnement Arduino, dans le dossier arduino/libraries/LiquidCrystal. Cette bibliothèque permet de piloter des écrans LCD en mode 4 bits ou 8 bits, en fonction du type de LCD qu'on souhaite utiliser.

++

Re: effacer le lcd avec commande binaire

Message non luPosté: Dim 10 Juin 2012 13:13
de lcd1602
ayant un hd44780, je ne puis utiliser la lib deuxligne :cry:
j'ai la commande init qui ne se ferai pas ( pas de coloration syntaxique) :?:
avez vous une idée pour réaliser la même chose avec la liquidcristal ?
Ou comment décortiquer les fonction de la liquid ?

Mon projet est de faire clignoter un mot lorsque celui-ci est sélectionner, mais avant je voulais comprendre comment fonctionne l'affichage en mode binaire, pour lire dans la mémoire du hd444780. :oops:

Re: effacer le lcd avec commande binaire

Message non luPosté: Dim 10 Juin 2012 19:33
de SesechXP
LiquidCrystal permet d'effacer le LCD, pourquoi vouloir utiliser autre chose ?

Pour lire la mémoire du LCD, il y a peut-être une piste à creuser avec la broche R/W. Mais je n'en sais pas plus, j'avoue ne jamais avoir étudié ce mode de fonctionnement.

Pour faire clignoter un mot à l'écran, il est peut-être plus simple de garder en mémoire la chaîne de caratères affichée et tout à tour de l'afficher ou réécrire des espaces par dessus en repositionnant le curseur. A voir...

Re: effacer le lcd avec commande binaire

Message non luPosté: Lun 11 Juin 2012 08:58
de Lionel
Bonjour,

je déplace ce sujet qui ne concerne pas le deuligne dans la catégorie composants tiers pour éviter la confusion