Afficheur LCD, LCD graphique GDM12864A

Electronique numérique / Circuits logiques programmables EPLD, CPLD, FPGA d'Altera ou de Xilinx VHDL, Verilog ou SystemC

Modérateur : Modérateur

dnkz
NOUVEAU
NOUVEAU
Messages : 2
Inscription : 20 févr. 2006 10:11

Afficheur LCD, LCD graphique GDM12864A

Message par dnkz »

Salut !

Je me trouve confronté a un problème et je n'arrive pas a trouvé la solution.

Je pilote l'afficheur LCD avec un port parallèle:

8 bits de donnée (port parallèle) -> 8 bits de l'afficheur

/select in (17) = RS
Init (16) = CS2
/Autofeed (14) = CS1
/strobe (1) = E
R/W bloqué a l'etat bas

J'ai testé chaque broche du port parallèle avec un oscillo pour savoir si c'etait inversé.

J'ecris un programme en C++ grace a un driver. Resulat, j'ai bien un affichage parfois a l'endroit souhaité et parfois non, l'affichage est donc assez aléatoire.


DLPortIO1->Port [0x37A] = 0xD8;
DLPortIO1->Port [0x378] = 0x3E; // Extinction du LCD
DLPortIO1->Port [0x37A] = 0xD9; // front descendant pour valider avec toujours CS2=0 CS1=1

DLPortIO1->Port [0x37A] = 0xD8;
DLPortIO1->Port [0x378] = 0x40; // config de l'adresse
DLPortIO1->Port [0x37A] = 0xD9;

DLPortIO1->Port [0x37A] = 0xD8;
DLPortIO1->Port [0x378] = 0xB8; // config de la page
DLPortIO1->Port [0x37A] = 0xD9;

for (int i=0; i<5; i++)
{
DLPortIO1->Port [0x37A] = 0xD0;
DLPortIO1->Port [0x378] = 0xFF; // donnée
DLPortIO1->Port [0x37A] = 0xD1;
}

DLPortIO1->Port [0x37A] = 0xD8;
DLPortIO1->Port [0x378] = 0x3f; //affichage ecran
DLPortIO1->Port [0x37A] = 0xD9;
}

J'essaye donc d'affiché 4 ligne De 1 donc noir.

Quelqu'un voit une erreur ?

Merci d'avance
JP
Administrateur
Administrateur
Messages : 2327
Inscription : 23 sept. 2003 19:14
Localisation : Strasbourg
Contact :

Message par JP »

Salut dnkz et :welcome: ,

Je crois me souvenir (souvenir très lointain) qu'il faut attendre que le LCD ait traité une commande avant d'en envoyer une autre. Ca se fait soit avec une petite tempo ou alors en allant lire un bit d'interruption.

Essayes de comparer avec ce programme et voir dans quel cas la fonction WaitDisplayReady est utilisée.

a+
JP
Ca clignote !!!!
dnkz
NOUVEAU
NOUVEAU
Messages : 2
Inscription : 20 févr. 2006 10:11

Message par dnkz »

Merci pour cette réponse, j'ai fait un nouveau morceau de programme :


DLPortIO1->Port [0x37A] = 0xD8; // E=1, RS=0, CS1=1, CS2=0
DLPortIO1->Port [0x378] = 0x3f; // Allumé LCD
DLPortIO1->Port [0x37A] = 0xD9; // E=0, RS=0, CS1=1, CS2=0

Sleep(3000); // 3sec

DLPortIO1->Port [0x37A] = 0xDA; // CS1=CS2=0, RS=0, E=1

DLPortIO1->Port [0x37A] = 0xD8;
DLPortIO1->Port [0x378] = 0x40; // config adresse
DLPortIO1->Port [0x37A] = 0xD9;

DLPortIO1->Port [0x37A] = 0xD8;
DLPortIO1->Port [0x378] = 0xB8; // config de la page
DLPortIO1->Port [0x37A] = 0xD9;

for (int i=0; i<5; i++)
{
DLPortIO1->Port [0x37A] = 0xD0; // E=1, RS=1, CS1=1, CS2=0
DLPortIO1->Port [0x378] = 0xFF; // données
Sleep(1);
DLPortIO1->Port [0x37A] = 0xD1; // E=0, RS=1, CS1=1, CS2=0
}

DLPortIO1->Port [0x37A] = 0xDA; // CS1=CS2=0, RS=1, E=1


Cependant j'ai une erreur qui reste, l'affichage de mes FF s'affiche soit en haut de l'écran soit en bas (avant c'etait pire) et toujours dans la bonne partie de l'écran.

Cela donne une sorte de décalage.
VARIO-VMR
NOUVEAU
NOUVEAU
Messages : 11
Inscription : 30 mars 2006 22:40
Localisation : YVELINES

Programation de la GLCD 12864

Message par VARIO-VMR »

As tu toujours des difficultés, j'ai fait un driver c qui marche correctement. Tu trouvera en PJ l'enregistrement exel (Avec courbes) des sorties vers la LCD. Bus de commande et bus data.

CE fichier te permettra de voir dans quel ordre les commandes sont envoyée et le delai de prise en compte des données qui est bien inférieur a 3 secondes.
Pièces jointes
INIT VISU.txt
(2.09 Kio) Téléchargé 423 fois
Répondre