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
Afficheur LCD, LCD graphique GDM12864A
Modérateur : Modérateur
-
- Administrateur
- Messages : 2327
- Inscription : 23 sept. 2003 19:14
- Localisation : Strasbourg
- Contact :
Salut dnkz et ,
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
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 !!!!
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.
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.
Programation de la GLCD 12864
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.
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