L'école Commander un afficheur LCD sur MSX
metalgear2
Membre non connecté
Conseiller Municipal
Bonjour,
J'ai commencé a lire un peu le bouquin "ASSEMBLEUR ET PERIPHERIQUES DES MSX" et c'est pas gagné.
Je cherche a commander un AFFICHEUR LCD (Pour le fun ) et recherche comment dire au Z80 d'envoyer des données ou adresses sur tel port.
En fouinnant un peu sur le net, j'ai appris quelques trucs, mais peut-être que je me trompe :
Quelques exemples:
OUT 3,1 : Pour effacer la totalité du LCD.
OUT 3.&B00001111 : Curseur qui clignote.
OUT 3,&B1xxxxxxx : x pour définir la position du curseur
....
Il y a aussi des commandes : OUT 2,x
Je sais aussi qu'a cette époque, ils utilissaient un afficheur LCD qui avait bessoin d'un drivers HD44780, c'est le cas du LM16251. Merci a GDX pour son aide sur ce fameux driver.
Je sais pas si aujourd'hui, le driver est intégré à la puce de l'afficheur comme sur le GDM1602 Même dans les databook, rien n'apparait a ce sujet.
J'ai testé plusieurs schéma sans résultats (Elektor, MSX Magazine, celui du site de Hanso, qui est le même qu'Elektor). A la mise sous tension du MSX, le LCD affiche des caractéres aléatoire. Testé sur un 8250 et un 8235 car il faut obligatoirement la ligne /BUSDIR. Quand la doc est en anglais, pas de probléme, mais quand c'est en japonais .... , peut-être que je passe a côté de quelque chose.
Si quelques personnes avaient des infos sur ce sujet .....
Merci.
J'ai commencé a lire un peu le bouquin "ASSEMBLEUR ET PERIPHERIQUES DES MSX" et c'est pas gagné.
Je cherche a commander un AFFICHEUR LCD (Pour le fun ) et recherche comment dire au Z80 d'envoyer des données ou adresses sur tel port.
En fouinnant un peu sur le net, j'ai appris quelques trucs, mais peut-être que je me trompe :
Quelques exemples:
OUT 3,1 : Pour effacer la totalité du LCD.
OUT 3.&B00001111 : Curseur qui clignote.
OUT 3,&B1xxxxxxx : x pour définir la position du curseur
....
Il y a aussi des commandes : OUT 2,x
Je sais aussi qu'a cette époque, ils utilissaient un afficheur LCD qui avait bessoin d'un drivers HD44780, c'est le cas du LM16251. Merci a GDX pour son aide sur ce fameux driver.
Je sais pas si aujourd'hui, le driver est intégré à la puce de l'afficheur comme sur le GDM1602 Même dans les databook, rien n'apparait a ce sujet.
J'ai testé plusieurs schéma sans résultats (Elektor, MSX Magazine, celui du site de Hanso, qui est le même qu'Elektor). A la mise sous tension du MSX, le LCD affiche des caractéres aléatoire. Testé sur un 8250 et un 8235 car il faut obligatoirement la ligne /BUSDIR. Quand la doc est en anglais, pas de probléme, mais quand c'est en japonais .... , peut-être que je passe a côté de quelque chose.
Si quelques personnes avaient des infos sur ce sujet .....
Merci.
Il faut d'abord connaitre l'adresse du port attribué à ton périphérique pour pouvoir envoyer les octets sur le bon port
tu doit avoir un port de commande et un port de données normalement, ou un port pour l’écriture et un port pour la lecture ?
Je connais pas le hardware des MSX, mais ca m'intéresse bien de connaitre les numéro de port utilisé par ton montage ??
tu doit avoir un port de commande et un port de données normalement, ou un port pour l’écriture et un port pour la lecture ?
Je connais pas le hardware des MSX, mais ca m'intéresse bien de connaitre les numéro de port utilisé par ton montage ??
metalgear2
Membre non connecté
Conseiller Municipal
Non, justement, on peut aussi le faire par le port cartouche.
Exemple d'un schéma récuperer sur le databook du LM16251 :
Exemple d'un schéma récuperer sur le databook du LM16251 :
Faut! archi faut!
Ils sont d'origine avec un bus parallèle de 8bits avec un mode 4bits
Avec en plus un signal E, RS, et WR
Il faut respecter une suite d'écriture dans les registres pour initialiser l'afficheur.
Il existe en effet des version avec interface série soit: I2C, SPI, ou RS232 (TTL)
Dans se cas il y a un AVR ou un PIC qui prend en charge d'initialiser l'afficheur fonction des commandes reçues sur le bus série.
Pour résumer, il faut soit 8 +3 fils pour piloter l'afficheur (8bits + E + RS + WR)
ou 4 + 3 fils
Ajoutez à ça masse , +5V, et VLCD (contraste) (tension d'environ 1v par rapport à la masse)
http://www.geocities.com/dinceraydin/lcd/z80example.htm
Ils sont d'origine avec un bus parallèle de 8bits avec un mode 4bits
Avec en plus un signal E, RS, et WR
Il faut respecter une suite d'écriture dans les registres pour initialiser l'afficheur.
Il existe en effet des version avec interface série soit: I2C, SPI, ou RS232 (TTL)
Dans se cas il y a un AVR ou un PIC qui prend en charge d'initialiser l'afficheur fonction des commandes reçues sur le bus série.
Pour résumer, il faut soit 8 +3 fils pour piloter l'afficheur (8bits + E + RS + WR)
ou 4 + 3 fils
Ajoutez à ça masse , +5V, et VLCD (contraste) (tension d'environ 1v par rapport à la masse)
http://www.geocities.com/dinceraydin/lcd/z80example.htm
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
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
Je peux te confirmer que l'on peut piloter un LCD par le port cartouche.
metalgear2 :
Je peux te confirmer que l'on peut piloter un LCD par le port cartouche.
Je n'ai pas dit le contraire, j'ai dit que ces modules sont pas avec bus série, mais justement bus parallèle.
Bien entendu que tu pourra le contrôler facilement avec le port cartouche
Lire ce document:
https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
faut créer un port I/O dont le signal de décodage ira sur E (attention E est actif à l'état haut)
le signal /WR du MSX va sur R/W de l'afficheur
A0 du MSX va sur RS de l'afficheur
je pense que les temps d'accès de l'afficheur son respecté avec un MSX à 3.57MHz, mais vérifier.
voila ça devrait t'aider...
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
SveN
Membre non connecté
Villageois
S'agissant des afficheurs LCD à interfacer avec un MSX, il faut évidemment privilégier les modèles à bus parallèle (ils disposent d'ailleurs d'un convertisseur parallèle vers série en interne).
Sur un Z80 cadencé à 3.5MHz, un cycle CPU vaut environ 280ns.. Pour les tests, même sur une machine plus rapide, ça ne doit pas être pénalisant.
Le contrôle de l'afficheur s'effectue par un port disponible et défini à l'avance sur le MSX, avec le circuit de décodage d'adresse qui va bien.
Pour la programmation, il faut inévitablement se référer au datasheets ou manuels d'utilisation. (j'ai cependant plusieurs afficheurs de marque différente se comportant de la même façon sur les boards de développement)
Voici un bon début pour la compréhension : http://matthieu.benoit.free.fr/affi-lcd.htm
Ce manuel détaille très bien les opérations et les timing requis : http://www.eit.lth.se/fileadmin/eit/courses/edi021/datablad/Display/LCD.pdf
J'ai quelquechose de spécifique au Z80, mais n'ai pas réussi à remettre la main dessus.
Sur un Z80 cadencé à 3.5MHz, un cycle CPU vaut environ 280ns.. Pour les tests, même sur une machine plus rapide, ça ne doit pas être pénalisant.
Le contrôle de l'afficheur s'effectue par un port disponible et défini à l'avance sur le MSX, avec le circuit de décodage d'adresse qui va bien.
Pour la programmation, il faut inévitablement se référer au datasheets ou manuels d'utilisation. (j'ai cependant plusieurs afficheurs de marque différente se comportant de la même façon sur les boards de développement)
Voici un bon début pour la compréhension : http://matthieu.benoit.free.fr/affi-lcd.htm
Ce manuel détaille très bien les opérations et les timing requis : http://www.eit.lth.se/fileadmin/eit/courses/edi021/datablad/Display/LCD.pdf
J'ai quelquechose de spécifique au Z80, mais n'ai pas réussi à remettre la main dessus.
Philips.NMS.8245/50/80, Sony.F1XV/HBF-700D, Pana.FSA1FX/A1WX(x2)/A1GT, OCM, GR8BIT.... et ...
metalgear2
Membre non connecté
Conseiller Municipal
Bonsoir,
En faite, au niveau afficheur LCD, je m'imquiéte pas trop. Ayant réaliser un fréquencemétre a partir d'un PIC et d'un LCD, http://www.msxvillage.fr/forum/topic.php?id=1936&pt=30#m46780 , je connais un peu prés son fonctionnement.
C'est surtout les commandes a envoyer au Z80.
Si j'ai bien compris le fonctionnement sur les différents plans que j'ai récupéré, il faut entrer une commande sous basic que le Z80 reçoit et qui lui, envoit à la l'afficheur. La commande que l'afficheur recoit, calcul grace au driver HD44780, qui je pense et intégrer dans les nouveaux LCD ( GDM1602 ). Quand on regarde la photo du premier post, on voit deux puce. Je pense qu'il y en a une pour le drivers et l'autre pour l'affichage. J'ai d'autre afficheur avec seulement une puce.
Avec l'aide de GDX, j'ai un driver HD44780. Si je le lance sous basic avec un ancien afficheur, il me rend la main. Avec un afficheur récent, donc avec deux puces, il bloque le MSX. Je pense qu'avec les nouveaux afficheur, je n'ais pas bessoin de ce driver.
Dans toutes les doc que j'ai, elles parlent toutes des même commandes.
Par exemple, pour faire clignoter le curseur, il suffit de tapper sous basic : OUT 3.&B00001111 . Mais aucune réaction de l'afficheur.
Mon probléme et là, est-ce que j'envois les bonnes commandes. Malheureusement, je ne connais pas les intructions ou les commandes a envoyer au Z80.
En faite, au niveau afficheur LCD, je m'imquiéte pas trop. Ayant réaliser un fréquencemétre a partir d'un PIC et d'un LCD, http://www.msxvillage.fr/forum/topic.php?id=1936&pt=30#m46780 , je connais un peu prés son fonctionnement.
C'est surtout les commandes a envoyer au Z80.
Si j'ai bien compris le fonctionnement sur les différents plans que j'ai récupéré, il faut entrer une commande sous basic que le Z80 reçoit et qui lui, envoit à la l'afficheur. La commande que l'afficheur recoit, calcul grace au driver HD44780, qui je pense et intégrer dans les nouveaux LCD ( GDM1602 ). Quand on regarde la photo du premier post, on voit deux puce. Je pense qu'il y en a une pour le drivers et l'autre pour l'affichage. J'ai d'autre afficheur avec seulement une puce.
Avec l'aide de GDX, j'ai un driver HD44780. Si je le lance sous basic avec un ancien afficheur, il me rend la main. Avec un afficheur récent, donc avec deux puces, il bloque le MSX. Je pense qu'avec les nouveaux afficheur, je n'ais pas bessoin de ce driver.
Dans toutes les doc que j'ai, elles parlent toutes des même commandes.
Par exemple, pour faire clignoter le curseur, il suffit de tapper sous basic : OUT 3.&B00001111 . Mais aucune réaction de l'afficheur.
Mon probléme et là, est-ce que j'envois les bonnes commandes. Malheureusement, je ne connais pas les intructions ou les commandes a envoyer au Z80.
En Basic ca risque d'être un peu lent non ?
Tu pourrais le faire directement en ASM, voir même faire des routines spécifiques (SEND DATA, READ DATA, STATUS,...) que tu appellent au besoin a partir du Basic ?
Tu pourrais le faire directement en ASM, voir même faire des routines spécifiques (SEND DATA, READ DATA, STATUS,...) que tu appellent au besoin a partir du Basic ?
metalgear2
Membre non connecté
Conseiller Municipal
Bin en faite, je voulais faire en 1er la version basic car je connais mieux le basic que l'assembleur . J'aurais fait la version assembleur aprés m'avoir fait la main sur la version basic. Mais même la version basic ne fonctionne pas.
Pourtant elle est sorti sur un magazine, donc elle doit fonctionner :
A part la ligne 200 que j'ai modifier en RESTORE 600 car le ligne 800 n'existe pas
Si je comprend bien le début du programme, d'aprés les infos sur les OUT 3,1Bxxxxxxxx :
120 : Cette ligne, je comprend pas bien, il parle de 8Bits sur un afficheur 2 lignes
130 : Affiche un curceur
140 : Déplace le curceur vers la droite
150 : Efface la totalitée de l'écran (Sauf le curseur)
200 à 220 : Lire les 29 données en ligne 600 en les appelant FT$
230 : Afficher les données FT$ sur le LCD
Pourtant, rien de compliquer pour afficher 29 caractéres sur un LCD. Je comprend pas. Ou alors, mon LCD n'est pas compatible avec le MSX.
Pourtant elle est sorti sur un magazine, donc elle doit fonctionner :
A part la ligne 200 que j'ai modifier en RESTORE 600 car le ligne 800 n'existe pas
Si je comprend bien le début du programme, d'aprés les infos sur les OUT 3,1Bxxxxxxxx :
120 : Cette ligne, je comprend pas bien, il parle de 8Bits sur un afficheur 2 lignes
130 : Affiche un curceur
140 : Déplace le curceur vers la droite
150 : Efface la totalitée de l'écran (Sauf le curseur)
200 à 220 : Lire les 29 données en ligne 600 en les appelant FT$
230 : Afficher les données FT$ sur le LCD
Pourtant, rien de compliquer pour afficher 29 caractéres sur un LCD. Je comprend pas. Ou alors, mon LCD n'est pas compatible avec le MSX.
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 ?
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 ?
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie