MSX Village forum

L'école Commander un afficheur LCD sur MSX

6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 07/05/2014 à 00h00

Reprise du message précédent

Il me semble que le point crucial dans ce programme ces les lignes 120 à 150 car ca doit être l'initialisation de l'afficheur !!!

Est ce que ton afficheur est compatible avec celui de cette article ?

As tu vérifier les datasheets des 2 afficheurs ?

Si ton afficheur n'est pas identique peut être faut il adapter les lignes d'initialisation ?



Site web    
SveN Membre non connecté

Villageois

Rang

Avatar

Groupe : compte ++

Inscrit le : 22/11/2011 à 21h14

Messages: 865

Le 07/05/2014 à 10h33
Les jeux d'instructions en "mode commande" comme en "mode écriture" du HD44780 et du GDM1602H semblent identiques.
Sur le schéma de "MSX Magazine", l'adressage des ports est minimaliste, n'utilisant que A0 et A1, ce qui laisse la place à nombre d'interférences :
  • Port 3 (&B11) : A0=1 => RS=0 => "mode commande", A1=1 => R/W=0 => "mode écriture"
  • Port 2 (&B10) : A0=0 => RS=1 => "mode données", A1=1 => R/W=0 => "mode écriture"

Il faut donc être sûr que l'état de A0 ne change pas au cours de la manipulation ... j'opterai pour une définition exhaustive du port à employer, sur tous les bits d'adressage.


Pour le programme du même magazine (désolé pour les franglismes ;) ) :

120 OUT 3,&B00111000 : function set (D5=1 en mode commande)
  • D4=DL (data length) ; si 1, alors 8 bits
  • D3=N (nb de lignes); 0=1 ligne; 1=2 lignes
  • D2=F (character font); 0= 5x8 dots

130 OUT 3,&B00001110 : display on/off controls
  • D2=D (display on/off) ; 1=ON
  • D1=C (cursor on/off); 1=ON
  • D0=B (blink) ; 1=ON

140 OUT3, &B00000110 : Entry mode set
  • D1=I/D; 1=increment DDRAM address
  • D0=S ; 0=the display doesn't shift

150 OUT 3,1 : clear display

Les lignes 120 à 150 servent à initialiser l'afficheur LCD. Le timing ne doit pas poser de problème.

310 OUT 3,&B11000000 : set DDRAM address (internal RAM)
410 OUT 3,&B00011000 : Cursor or display shift
  • D3=S/C ; 1=display shift
  • D2=R/L; 0=shift to the left

450 OUT 3,&B00011100 : Cursor or display shift
  • D3=S/C ; 1=display shift
  • D2=R/L; 1=shift to the right

500 OUT 3,&B00000111 : entry mode set
  • D1=D0=1; shift the entire display to the left



le fameux programme avec la résolution qui va bien (bien vu pour le RESTORE) :
Edité par SveN Le 07/05/2014 à 11h14


Philips.NMS.8245/50/80, Sony.F1XV/HBF-700D, Pana.FSA1FX/A1WX(x2)/A1GT, OCM, GR8BIT.... et ...
   
metalgear2 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 27/11/2010 à 23h40

Messages: 2768

Le 07/05/2014 à 18h58
6502man :
As tu vérifier les datasheets des 2 afficheurs ?


Aprés des recherches hier soir, apparemement, la différence est au niveau du driver HD44780. Niveau brochage, rien ne change.



SveN :
Les jeux d'instructions en "mode commande" comme en "mode écriture" du HD44780 et du GDM1602H semblent identiques.

Sur le schéma de "MSX Magazine", l'adressage des ports est minimaliste, n'utilisant que A0 et A1, ce qui laisse la place à nombre d'interférences :

  • Port 3 (&B11) : A0=1 => RS=0 => "mode commande", A1=1 => R/W=0 => "mode écriture"
  • Port 2 (&B10) : A0=0 => RS=1 => "mode données", A1=1 => R/W=0 => "mode écriture"



Il faut donc être sûr que l'état de A0 ne change pas au cours de la manipulation ... j'opterai pour une définition exhaustive du port à employer, sur tous les bits d'adressage.


Merci pour ces explications. :top



Pour les lignes 120 a 150, je me doutais bien qu'ils servaient a initialiser le LCD. Merci de me le confirmer. ;)



Mon site consacré au MSX : http://mymsx2.free.fr
Site web    
z80 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 987

Le 07/05/2014 à 19h02
je vais encore passer pour un chieur, mais le HD44780 est un composant, le GDM1602H est un afficheur LCD 2 lignes de 16 caractères qui utilise un composant HD44780 ou "compatible HD44780".



TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
metalgear2 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 27/11/2010 à 23h40

Messages: 2768

Le 07/05/2014 à 19h15
z80 :
je vais encore passer pour un chieur


Pas du tout, tous les conseil sont intéressant a prendre :top



Concernant le HD44780, c'est ce que je voulais dire. Sur le GDM1602, la 2émè puce est, a mon avis, le driver HD44780 qui n'était pas prévu sur le LM16251 de cette époque. Dans le MSX Magazine, c'est bien un LM16251 qui est utilisé et je pense que c'est pour ça qu'il faut utiliser le driver soft avec le LM16251. Edité par metalgear2 Le 07/05/2014 à 19h16



Mon site consacré au MSX : http://mymsx2.free.fr
Site web    
SveN Membre non connecté

Villageois

Rang

Avatar

Groupe : compte ++

Inscrit le : 22/11/2011 à 21h14

Messages: 865

Le 07/05/2014 à 22h57
metalgear2 :
Concernant le HD44780, c'est ce que je voulais dire. Sur le GDM1602, la 2émè puce est, a mon avis, le driver HD44780 qui n'était pas prévu sur le LM16251 de cette époque. Dans le MSX Magazine, c'est bien un LM16251 qui est utilisé et je pense que c'est pour ça qu'il faut utiliser le driver soft avec le LM16251.


J'y perds mon latin (et pourtant, je le pratique souvent :lol ) :

Tu fais bien référence à l'article du MSX.Magazine.1991-07 débutant à la page 120 ?

Il s'agit d'un montage visant à utiliser un afficheur LCD à l'aide d'un contrôleur HD44780. Le jeu d'instructions en mode "commande" ou "données" a en partie été détaillé dans les posts précédents.



Le GDM1602H est un afficheur LCD embarquant son propre contrôleur, en l'occurence un S6A0069 ou équivalent (datasheet : http://pdf.datasheetcatalog.com/datasheet/SamsungElectronic/mXruzuq.pdf ). Là encore, le jeu d'instructions ne semble pas différer de celui du HD44780.



Concernant le "driver soft" du LM16251 ... je n'ai absolument rien compris ! :hum Edité par SveN Le 07/05/2014 à 23h33


Philips.NMS.8245/50/80, Sony.F1XV/HBF-700D, Pana.FSA1FX/A1WX(x2)/A1GT, OCM, GR8BIT.... et ...
   
metalgear2 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 27/11/2010 à 23h40

Messages: 2768

Le 08/05/2014 à 00h00
SveN :
Tu fais bien référence à l'article du MSX.Magazine.1991-07 débutant à la page 120 ?


Oui, tout a fait.



Mais, c'est peut-être moi qui m'explique mal ou qui a mal compris son fonctionnement



Sur MSX Magazine, on est d'accord que le HD44780 est un contrôleur et que le LM16251 est le LCD.



Sur le GDM1602, c'est le S6A0069, ça, je viens de l'apprendre, je pensais que c'était aussi un contrôleur HD44780. Pourtant, j'ai regardé plusieurs datasheet. :oups





Je fais un p'tit topo sur mes recherches :



J'ai pris le schéma et le listing de MSX Magazine et effectuer des tests sur un MSX2 car sur le schéma, la PIN /BUSDIR est utilisée. Donc, déjà, le MSX1 est a mettre de coté.



N'ayant pas de résultat positif et n'ayant pas de LM16251 (Impossible a trouver, même sur Ebay), j'ai fait l'essai avec un GDM1602.



Donc, je me suis dit qu'il y avait un probléme d'afficheur, peut-être incompatible avec le montage de MSX Magazine. D'aprés les datasheet, ils sont compatibles.



J'ai donc rassemblé les docs d'Elektor, MSX Magazine et de MSX Computer Club Magazine et là, dans le dernier magazine que je cite, il parle d'un driver HD44780 :hum Le listing que propose MSX Computer Club Magazine n'est peut-être pas un driver mais simplement le soft pour faire fonctionner le LCD et c'est peut-être là que je me mélange les pinceaux.



Si le GMD1602 a son propre contrôleur, les commandes OUT 3,x que je tappe sous basic devrait faire réagir le LCD, non ? Edité par metalgear2 Le 08/05/2014 à 06h20



Mon site consacré au MSX : http://mymsx2.free.fr
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10730

Le 08/05/2014 à 10h28
ce n'est pas pace que certains MSX1 n'ont pas de busdir que le montage ne va pas marcher dessus

le BUSDIR comme son nom l'indique fait changer de direction le buffer des données , soit en lecture soit en écriture

sur les machines n'ayant pas de buffer c'est le Z80 qui gére le sens


:noel
Site web    
metalgear2 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 27/11/2010 à 23h40

Messages: 2768

Le 21/05/2014 à 20h51
Bonsoir,



Pour comprendre un peu mieux le fonctionnement d'un écran LCD, j'ai récupéré plusieur datasheet + les infos ci-dessus pour voir les différences. Certains LCD sont un peu différents au niveau initialisation. Mais dans l'ensemble, les plus connus sont identiques. Ca m'arrange. ^^



J'ai fait des tests avec 3 LCD différents :



  • L1652
  • MDLS16265
  • GDM1602K Backlight



Seul le L1652 ne répond pas aux même commande que j'envoi aux autres. Pourtant le tableau d'initialisation du datasheet est identique. :hum



Pour ma part, le but rechercher, est d'afficher un texte sur le LCD. Donc la broche RW du LCD restera toujours en mode affichage texte, donc à l'état bas => RW=0

Sur la vidéo, les LED vertes servent simplement a visualiser l'état haut où l'état bas envoyé au LCD. A l'allumage, on voit bien tous ce qui est à l'état haut (Point rouge) et à l'état bas (En bleu).



Avant d'afficher un caractére sur l'écran LCD, tout afficheur a bessoin d'être initialiser.



Initialisation du LCD

Passage en mode config avec RS=0



RS=0 / Code binaire=00001111 (Curseur qui clignote au début de la ligne)

RS=0 / Code binaire=00111000 (LCD sur 8 bits, sur 2 lines et avec des caractéres de 5x8)





Affichage sur l'écran LCD du mot MSX

Passage en mode texte avec RS=1



RS=1 / Code binaire=01001101 (M)

RS=1 / Code binaire=01010011 (S)

RS=1 / Code binaire=01011000 (X)



Il suffit de prendre le datasheet du LCD pour connaitre les combinaisons binaire de chaque caractére. Apparement, les codes binaires sont toujours les mêmes. :top





ON/OFF de l'écran LCD

Passage en mode config avec RS=0



RS=0 / Code binaire=00001000 (Extinction du LCD sans perdre l'affichage)

RS=0 / Code binaire=00001100 (Retour affichage)





Effacer complémtement l'écran LCD

RS=0 / Code binaire=00000001





Vidéo pour mieux comprendre la programmation de l'écran LCD







Voilà, il ne me reste plus qu'a convertir toutes les infos pour une compatibilitée avec le MSX. La différence avec un PC, c'est que ça va vite, le LCD est connecté directement au port //.



Donc, sur MSX, il faut aussi que je trouve la bonne combinaison pour créer le port I/O qui sera connecté à la broche 6 du LCD, qui sert a valider les commandes que le LCD reçoit. Edité par metalgear2 Le 21/05/2014 à 20h54



Mon site consacré au MSX : http://mymsx2.free.fr
Site web    
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 21/05/2014 à 21h08
Super le défrichage :top

Reste aussi à trouver comment faire RS non :hum

Ca sent le décodage de port tout ça.
metalgear2 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 27/11/2010 à 23h40

Messages: 2768

Le 21/05/2014 à 22h05
D'aprés le datasheet du LCD que j'utilise, la donnée met un temp de 43us pour s'écrire en mémoire dans le LCD.

Si j'ai bien compris les infos que j'ai récupéré, A0 à largement le temp de passer RS à l'état haut pour afficher la donnée sur le LCD. :oups Edité par metalgear2 Le 21/05/2014 à 22h29



Mon site consacré au MSX : http://mymsx2.free.fr
Site web    
SveN Membre non connecté

Villageois

Rang

Avatar

Groupe : compte ++

Inscrit le : 22/11/2011 à 21h14

Messages: 865

Le 21/05/2014 à 22h40
metalgear2 :
D'aprés le datasheet du LCD que j'utilise, la données met un temp de 43us pour s'écrire en mémoire dans le LCD.

Si j'ai bien compris les infos que j'ai récupéré, A0 a largement le temps de passer RS à l'état haut pour afficher la donnée sur le LCD.


Concernant le timing, c'est exact et les commandes doivent pouvoir être formulées en Basic.



Le passage de E à 1 s'effectue si :

/IORQ = 0

/M1 = 0 (cycling)

A7 = 0

A6 = 0

A5 = 0



Pour le décodage de port I/O .. il suffit d'en choisir deux disponibles (de préférence contigus)... Mais j'imagine que tu ne devrais avoir aucun mal à simuler tout ça quand je vois la vidéo précédente.


Philips.NMS.8245/50/80, Sony.F1XV/HBF-700D, Pana.FSA1FX/A1WX(x2)/A1GT, OCM, GR8BIT.... et ...
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie