Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Ecran Easy TFT
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#111 Message par Jérémy » lun. 9 nov. 2015 19:43

Ok je fais ça ce soir ! . Mais la je crois que c'est la fin. J'ai fais beaucoup de code, Je l'ai tourner dans tout les sens ! . A chaque fois qu'on avait une nouvelle idée, il fallait essayé de toute les façons possible ......

Moi ce qui me turlupine , c'est qu'il reste blanc après u n reset hard soft ou autre !!! toujours TOUJOURS TOUJOURS tout blanc !

Allez je remets à plat et je post
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran Easy TFT
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#112 Message par Jérémy » lun. 9 nov. 2015 20:52

Recapitulatif :

Je dispose de cet écran . Celui ci NORMALEMENT est compatible avec ma carte Eayspic 7 comme le montre ce lien chez lextronic. N'ayant pas forcement confiance en ce que disent les vendeurs , après vérifications il n'y aurait pas de problème à piloter cet écran , si on lui demande pas de truc de fou( mémoire et vitesse).

D’après le brochage de l'écran, la configuration est en 8080 MCU-8bits interface II ( ces broches IM0 et IM3 sont à vcc).
Les correspondances des broches du PIC au broches de l'écran se font en SOFT avec des DEFINE .
Un doute subsiste sur les broches inversées ou NON (état 0 ou 1 pour actif ?). suivant les DS et physiquement(écrit) ça varie.
J'alimente ma carte EasyPIC en 5V . ( donc 5V sur les broches OUT).

Concernant le programme et après lecture relecture et re re lecture et re re re re rere lecture . Il en ressort ceci.

Pour Écrire une commande
( Un reset par exemple) , il faut ( voir chrono en page 12 ou bien le tableau en page 13 ou encore page 30 ici :
- Que le broche RD soit à 1
- Écrire dans le registre 0 donc que la broche D/C ( RS) soit à 0
- Que l'écran soit activé sur la ligne . Cela se fait avec la broches CS ( Chip select) . Normalement à l'état bas donc à 0 pour l'activé. ( doute ?)

Une fois tout ceci fais . les données transitent sur le PORTD du PIC . Il faut donc affecter la valeur à transmettre sur le PORTD. Dans notre exemple si on veut faire un RESET . il faudra envoyer 0x01 ( d'apresle tableau) donc mettre le portD à 0b00000001 ( visible grâce aux leds de ma carte branchées sur les sorties).
Un fois le PORTD avec la bonne valeur , il faut valider la valeur par une impulsion(front montant) sur la broche WR ( write.

Voila j’espère ne rien avoir oublié .

Voici le code

Code : Tout sélectionner

#define TFT_RD PORTB.B0     // La Broche B0 du PORTB correspond à la broche READ
#define TFT_WR PORTB.B1     // La Broche B1 du PORTB correspond à la broche WRITE
#define TFT_RS PORTB.B2     // La Broche B2 du PORTB correspond à la broche Register Select
#define TFT_CS PORTB.B4     // La Broche B0 du PORTB correspond à la broche Chip Select
#define TFT_RST PORTB.B5    // La Broche B0 du PORTB correspond à la broche RESET


//------- DECLARATION PROTOTYPES--------------------------
void Init_ecran();
void config();
void Pulse();
void Envoi_cmd (unsigned char cmd);
void Envoi_data (unsigned char donnee);

//---------------------------------------------------------------------------------
//  Fonction qui créer un front montant sur la broche Write pour valider l'ecriture
void Pulse(){

  TFT_WR = 0 ;      // Envoie une impulsion pour valider la donnée
     delay_us(1);
  TFT_WR = 1 ;
     delay_us(1);
 }

//---------------------------------------------------------------------------------
//  Fonction Envoi de Données
// Param d'entrée : ordre en Hexa à envoyer dans le registre Data : 1
// Effectue un front montant sur TFT_WR pour valider l'info
void Envoi_data (unsigned char donnee){

  PORTD = donnee ;     // Met la valeur de la donnée sur le PORT
     delay_ms(1);
  TFT_RS = 1 ;      // Register Select, 1 = Data
     delay_ms(1);
  Pulse();          // Impulsion
  Pulse();          // Impulsion
}
//---------------------------------------------------------------------------------
//  Fonction Envoi de commandes
// Param d'entrée : ordre en Hexa à envoyer dans le registre Command : 0
// Effectue un front montant sur TFT_WR pour valider l'info
void Envoi_cmd (unsigned char cmd){

  PORTD = cmd ;     // Met la valeur de la donnée sur le PORT
     delay_ms(1);
  TFT_RS = 0 ;      // Register Select, 0 = Command
     delay_ms(1);
  Pulse();          // Impulsion
  Pulse();          // Impulsion
}

/*##################################################################################
############################     PROGRAMME PRINCIPAL       #########################
##################################################################################*/
void main() {

  ANSELB = 0;     // Configure le PORTB en digital
  ANSELD = 0;     // Configure le PORTD en digital
  ANSELE = 0;     // Configure le PORTD en digital

  TRISB = 0;      // Port B en sortie
  TRISD = 0;      // Port D en sortie
  TRISE = 0;      // Port en sortie pour test

  TFT_RST = 0 ;   // Met le RESET hard à 0
  TFT_CS = 0 ;     // (PORTB.B4) Chip Select actif en permanence
  TFT_RD = 1 ;    // (PORTB.B0) broche Read non utilisé

  Init_ecran ();  // Initialisation de l'écran
  //config();     // Configur l'écran
 //#################     BOUCLE PRINCIPALE       ###########################
  while(1) {

    Envoi_cmd (0x21);   // Inversion ON

       PORTE = 0x01;    // allume une led test
       delay_ms(1000);  // pause

    Envoi_cmd ( 0x20);  // Inversion OFF

       PORTE = 0x00;    // Eteint une led test
       delay_ms(1000);  // pause

    Envoi_cmd (0x28);   // Display OFF

       PORTE = 0x02;    // allume une led test
       delay_ms(1000);  // pause

    Envoi_cmd ( 0x29);  // Display ON

       PORTE = 0x00;    // Eteint une led test
       delay_ms(1000);  // pause

  }
}

//----------------------------------------------------------------------------------
//  Fonction d'initialisation de l'écran   -----------------------------------------
void Init_ecran(){

   Envoi_cmd (0x01); // Effectue un RESET
   delay_ms(300);
   Envoi_cmd (0x11); // Sleep Out
   delay_ms(300);
   Envoi_cmd (0x28); // Display off
   delay_ms(100);
 }

//----------------------------------------------------------------------------------
//  Fonction de configuration de l'écran   -----------------------------------------
void config(){

   Envoi_cmd(0xcf);
   Envoi_data(0x00);
   Envoi_data(0x83);
   Envoi_data(0x30);

   Envoi_cmd(0xed);
   Envoi_data(0x64);
   Envoi_data(0x03);
   Envoi_data(0x12);
   Envoi_data(0x81);

   Envoi_cmd(0xe8);
   Envoi_data(0x85);
   Envoi_data(0x01);
   Envoi_data(0x79);

   Envoi_cmd(0xcb);
   Envoi_data(0x39);
   Envoi_data(0x2c);
   Envoi_data(0x00);
   Envoi_data(0x34);
   Envoi_data(0x02);

   Envoi_cmd(0xf7);
   Envoi_data(0x20);

   Envoi_cmd(0xea);
   Envoi_data(0x00);
   Envoi_data(0x00);
//------------power control------------------------------
   Envoi_cmd(0xc0);  //power control
   Envoi_data(0x26);

   Envoi_cmd(0xc1);  //power control
   Envoi_data(0x11);
//--------------VCOM
   Envoi_cmd(0xc5);  //vcom control
   Envoi_data(0x35);//35
   Envoi_data(0x3e);//3E

   Envoi_cmd(0xc7);  //vcom control
   Envoi_data(0xbe); //    0x94
//------------memory access control------------------------
   Envoi_cmd(0x36);   // memory access control
   Envoi_data(0x48); //0048    my,mx,mv,ml,BGR,mh,0.0

   Envoi_cmd(0x3a);   // pixel format set
   Envoi_data(0x55);//16bit /pixel
//----------------- frame rate------------------------------
   Envoi_cmd(0xb1);   //  frame rate
   Envoi_data(0x00);
   Envoi_data(0x1B);  //70
//----------------Gamma---------------------------------
   Envoi_cmd(0xf2);  // 3Gamma Function Disable
   Envoi_data(0x08);

   Envoi_cmd(0x26);
   Envoi_data(0x01); //  gamma set 4 gamma curve 01/02/04/08

   Envoi_cmd(0xE0);  //positive gamma correction
   Envoi_data(0x1f);
   Envoi_data(0x1a);
   Envoi_data(0x18);
   Envoi_data(0x0a);
   Envoi_data(0x0f);
   Envoi_data(0x06);
   Envoi_data(0x45);
   Envoi_data(0x87);
   Envoi_data(0x32);
   Envoi_data(0x0a);
   Envoi_data(0x07);
   Envoi_data(0x02);
   Envoi_data(0x07);
   Envoi_data(0x05);
   Envoi_data(0x00);

   Envoi_cmd(0xE1);      //negamma correction
   Envoi_data(0x00);
   Envoi_data(0x25);
   Envoi_data(0x27);
   Envoi_data(0x05);
   Envoi_data(0x10);
   Envoi_data(0x09);
   Envoi_data(0x3a);
   Envoi_data(0x78);
   Envoi_data(0x4d);
   Envoi_data(0x05);
   Envoi_data(0x18);
   Envoi_data(0x0d);
   Envoi_data(0x38);
   Envoi_data(0x3a);
   Envoi_data(0x1f);
//--------------ddram ---------------------
   Envoi_cmd(0x2a);    // column set
   Envoi_data(0x00);
   Envoi_data(0x00);
   Envoi_data(0x00);
   Envoi_data(0xEF);
   Envoi_cmd(0x2b);   // page address set
   Envoi_data(0x00);
   Envoi_data(0x00);
   Envoi_data(0x01);
   Envoi_data(0x3F);

   Envoi_cmd(0xb7);  // entry mode set
   Envoi_data(0x07);
//-----------------display---------------------
   Envoi_cmd(0xb6); // display function control
   Envoi_data(0x0a);
   Envoi_data(0x82);
   Envoi_data(0x27);
   Envoi_data(0x00);

   Envoi_cmd(0x29); // display on
   delay_ms(100);

   Envoi_cmd(0x2c);  // memory write
 


Pour les données il suffit de faire pareil , avec le registre 1 ( 1 pour DATA).

Étant dans le doute sur le faire d'envoyer ou non 16bit ( même en mode 8 bits) on pourrait envisager d'envoyer deux fois les infos . car de toute facon on se fou des bits de poids fort ! ( marquer X dans le tableau = Don't care)

Le but est de voir quelques choses se passé sur l’écran . N'importe quoi mais quelques choses .

Après un RESET il faut apparemment réveillé l’écran avec un sleep out . Déjà moi ça m’étonne que l'on ne voie pas l'écran s'allumer et s’éteindre même très furtivement pendant le RESET. Bon passons peut être que ça va trop vite.

Afin d’être sur de voir quelques choses se passé ,j'avais dans l'idée d'envoyer une display off puis un display ON . La normalement on devrait voir un truc . Mais dans le pire des cas , j'ai également inversé les pixels; un écran blanc devrait devenir noir et vice versa avec la commande inversion ON et OFF.

J'ai créer une fonction impulsion pour éclaircir le code .

La partie INIT , contient le RESET , le sleep out et un Display OFF .

Après un RESET l'écran devrait être mis en paramètre par défaut . je doute qu'il faille paramétrer plein de truc pour le voir s’éteindre et s'allumer. Dans le doute il existe une fonction a la fin en commentaires qui reprend un exemple de la DS ;
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran Easy TFT
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#113 Message par satinas » lun. 9 nov. 2015 21:01

Salut tout le monde

ouf, laborieux, cette inscription, faut être fort en devinette ...
Je vois que ça patauge avec les lcd, moi c'est plutôt avec les touchscreens que je me bats actuellement ...

Ci-après un résumé de ma façon de piloter le ili9341
L'initialisation est simplifiée, mais ça suffit pour qu'il réponde, ça marche sur l'écran de l'arduino Uno et d'autres écrans pilotés par un pic
Pour afficher, le principe est de définir une zone rectangulaire, puis de lui envoyer autant de couleurs 16 bit qu'il y a de points dans le rectangle
Le remplissage des points se fait par lignes, de haut en bas et de gauche à droite (changeable dans le registre "memory access control")

J'espère que ça pourra t'aider, bye

Code : Tout sélectionner



#define LCD_WIDTH       240
#define LCD_HEIGHT      320
#define RED             0xf800

#define Pm8Out(d8)      LCD_PM8 = d8; LCD_WR = 0; LCD_WR = 1
#define SendCmd(c8)     LCD_RS = 0; Pm8Out(c8); LCD_RS = 1
#define SendData(d8)    Pm8Out(d8)
#define SendData16(d16) Pm8Out((d16)>>8); Pm8Out((d16)&0xff)

unsigned char mactl[4] = { 0x88, 0x28, 0x48, 0xe8 };
int lLcd, hLcd;
 
void LcdStart
(unsigned int ori) // démarrer ili9341 sur port parallèle 8 bit, orientation 0 à 3
{
  ori %= 4;
  if (ori%2) { lLcd = LCD_HEIGHT; hLcd = LCD_WIDTH;  }
  else       { lLcd = LCD_WIDTH;  hLcd = LCD_HEIGHT; }

  LCD_CS = LCD_RS = LCD_RD = LCD_WR = 1; 
  LCD_RESET 
= 0; Wait1ms(10); LCD_RESET = 1; Wait1ms(50);
  
  LCD_CS 
= 0;
  SendCmd(0x01); Wait1ms(10);          // soft reset
  SendCmd(0x3a); SendData(0x55);       // set pixel format -> 65k rgb565
  SendCmd(0x11); Wait1ms(10);          // exit sleep
  SendCmd(0x29); Wait1ms(10);          // display on
  SendCmd(0x36); SendData(mactl[ori]); // set memory access control
  LCD_CS = 1;

  LcdErase(0x0000);                    // écran noir
  LcdSetPixel(20, 10, RED);               // pixel rouge en x=20, y=10
}

void LcdFillSet(int x1, int y1, int x2, int y2)  // pas de clipping, le faire en amont
{   
  SendCmd
(0x2a); SendData16(x1); SendData16(x2);  // set column address
  SendCmd(0x2b); SendData16(y1); SendData16(y2);  // set page address (=row)
  SendCmd(0x2c);                                  // write graphic ram
}

void LcdSetPixel(int x, int y, unsigned int clr) 
{
  if (>= 0 && x < lLcd && y >= 0 && y < hLcd) { // clipping
    LCD_CS = 0
    LcdFillSet
(x, y, x, y); SendData16(clr);
    LCD_CS = 1;
  } 
}

void LcdErase(unsigned int clr) 
{
  LCD_CS = 0;
  LcdFillSet(0, 0, lLcd-1, hLcd-1); 
  for 
(int i=0; i<lLcd; i++) for (int j=0; j<hLcd; j++) {  SendData16(clr); }
  LCD_CS = 1;
}
 
Modifié en dernier par satinas le lun. 9 nov. 2015 21:51, modifié 3 fois.

Ecran Easy TFT
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#114 Message par Jérémy » lun. 9 nov. 2015 21:09

Bonsoir,

Tout d'abord bienvenue sur le Forum . :D

ouf, laborieux, cette inscription, faut être fort en devinette ...

Les indiens, les russes et autres pirates de tout bord sont des filous !! , je me dois de leur barrés la route du mieux possible afin de gardé l'intégrité du Forum intact .
As-tu vraiment galérer et sur quel point en particulier , ou était ce une boutade?

Sinon merci de partager ton expérience, çela me fait grandement plaisir , pas forcement pour trouver la solution( enfin si j'avoue tout) mais aussi car c'est exactement pourquoi j'ai créer ce forum ! . Comment la tu trouvé le Fofo au fait ?

Ton code je peux le traiter tout de suite ? c'est fait avec mikroC ?

J'essaye de tester ça tout de suite.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran Easy TFT
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#115 Message par satinas » lun. 9 nov. 2015 21:33

C'est pas difficile, mais hier à 1h du matin, mon niveau intellectuel était proche du niveau zéro, j'avais lu micro-ordinateur au lieu de micro-contrôleur alors forcément ça coinçait.
Essaye d'adapter ce programme, en le comprenant sinon c'est pas profitable. Il faut le vérifier car il y a des erreurs dues à la recopie "à la main". Par exemple dans le LcdErase() il y a une erreur, car le fait d'envoyer la couleur une seule fois, suivie des signaux write (il en manque d'ailleurs dans la boucle), n'est possible que si la couleur est blanc ou noir, c'est à dire que si 2 octets de la couleur sont les mêmes.
Si tu comprends pas qq chose, dis-le.
PS Le fait que l'écran n'affiche rien tant que que tu ne lui as pas demander d'afficher quelaque chose, me semble normal,

Ecran Easy TFT
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#116 Message par Jérémy » lun. 9 nov. 2015 21:38

Pour le moment c'est un echec !.

J'ai du mal a interpréter la commande

BYTE mactl[8] = { 0x88, 0x28, 0x48, 0xe8 };
Mon compilo ne veut pas en entendre parler :lol:

Je l'ai mis en commentaire . Ne sachant pas a quoi elle sert . J'ai essayre de corriger quelques erreurs effectivement, pour pouvoir compiler un truc , juste histoire de voir une réaction même quelconque !

Pour le moment je fais échec , malgres avoir réussis a faire compiler un truc
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran Easy TFT
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#117 Message par satinas » lun. 9 nov. 2015 21:42

Ca doit être BYTE qui passe pas, mets unsigned char à la place
J'ai rectifié le programme en conséquence, voir plus haut

Ecran Easy TFT
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#118 Message par Jérémy » lun. 9 nov. 2015 21:55

Yes ca compile avec ca maitneant . Mais toujours rien .

L'écran reste toujours blanc ;

Je pense avoir a peut pret compris ... mais rien . dans le LCD start je met un display Off a la place du ON , rien du tout

D'apres ton prgoramme le LCD_RESET est actif à l'état haut ? chez moi je pense que c'est l'etat bas ? ( de toute façon j'ai essayé avec les deux )

J'en suis rendu ici :

Code : Tout sélectionner

#define LCD_RD PORTB.B0       // La Broche B0 du PORTB correspond à la broche READ
#define LCD_WR PORTB.B1       // La Broche B1 du PORTB correspond à la broche WRITE
#define LCD_RS PORTB.B2       // La Broche B2 du PORTB correspond à la broche Register Select
#define LCD_CS PORTB.B4       // La Broche B0 du PORTB correspond à la broche Chip Select
#define LCD_RESET PORTB.B5    // La Broche B0 du PORTB correspond à la broche RESET
#define LCD_WIDTH       240
#define LCD_HEIGHT      320
#define RED             0xf800

#define Pm8Out(d8)      PORTD = d8; LCD_WR = 0; LCD_WR = 1
#define SendCmd(c8)     LCD_RS = 0; Pm8Out(c8); LCD_RS = 1
#define SendData(d8)    Pm8Out(d8)
#define SendData16(d16) Pm8Out((d16)>>8); Pm8Out((d16)&0xff)

unsigned char mactl[4] = { 0x880x280x480xe8 };
int lLcdhLcd;
int i;
void LcdStart(unsigned int ori);
void LcdFillSet(int x1int y1int x2int y2);
void LcdSetPixel(int xint yunsigned int clr);
void LcdErase(unsigned int clr);



void LcdStart(unsigned int ori// démarrer ili9341 sur port parallèle 8 bit, orientation 0 à 3
{
  
ori %= 4;
  if (
ori%2) { lLcd LCD_HEIGHThLcd LCD_WIDTH;  }
  else       { 
lLcd LCD_WIDTH;  hLcd LCD_HEIGHT; }

  
LCD_CS LCD_RS LCD_RD LCD_WR 1;
  
LCD_RESET 0delay_ms(10); LCD_RESET 1delay_ms(50);

  
LCD_CS 0;
  
SendCmd(0x01); delay_ms(10);          // soft reset
  
SendCmd(0x3a); SendData(0x55);       // set pixel format -> 65k rgb565
  
SendCmd(0x11); delay_ms(10);          // exit sleep
  
SendCmd(0x29); delay_ms(10);          // display on
  
SendCmd(0x36); SendData(mactl[ori]); // set memory access control
  
LCD_CS 1;

  
LcdErase(0x0000);                    // écran noir
  
delay_ms(50);
  
LcdSetPixel(2010RED);               // pixel rouge en x=20, y=10
  
LcdSetPixel(2110RED);
  
LcdSetPixel(2111RED);
  
LcdSetPixel(2011RED);
}

void LcdFillSet(int x1int y1int x2int y2) { // pas de clipping, le faire en amont
    
SendCmd(0x2a); SendData16(x1); SendData16(x2);  // set column address
    
SendCmd(0x2b); SendData16(y1); SendData16(y2);  // set page address (=row)
  
SendCmd(0x2c);                                  // write graphic ram
}

void LcdSetPixel(int xint yunsigned int clr) {
  if (
>= && lLcd && >= && hLcd) { // clipping
    
LCD_CS ;
      
LcdFillSet(xyxy); SendData16(clr);
    
LCD_CS 1;
  }
}

void LcdErase(unsigned int clr) {
 
LCD_CS 0;
 
LcdFillSet(00lLcd-1hLcd-1);
 
SendData16(clr); // on envoie une seule fois la couleur
 
for (i=1i<lLcd*hLcdi++) {
   
LCD_WR 0LCD_WR 1;
  }
 
LCD_CS 1;
}

void main() {

  
ANSELB 0;     // Configure le PORTB en digital
  
ANSELD 0;     // Configure le PORTD en digital
  
ANSELE 0;     // Configure le PORTD en digital

  
TRISB 0;      // Port B en sortie
  
TRISD 0;      // Port D en sortie
  
TRISE 0;      // Port en sortie pour test


 //#################     BOUCLE PRINCIPALE       ###########################
  
while(1) {

      
LcdStart(0) ;
       
delay_ms(1000);  // pause


  
}
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran Easy TFT
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#119 Message par satinas » lun. 9 nov. 2015 22:00

Tous les signaux sont actifs à l'état bas, au repos il sont tous à 1.
En fin de séquence reset, le signal RESET est à 1, normal.
L'astuce est de laisser RS à 1, et ne le changer que fugitivement si on envoie une commande(=registre), ce qui arrive pas très souvent, car ces écrans on passe son temps à leur envoyer des datas (couleurs).
Rallonge les délais dans l'initialisation, et dans le signal WRITE, mais je pense pas que ça ce soit nécessaire, car ils sont rapides, en spi ils tiennent les 20MHz.

Ecran Easy TFT
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#120 Message par Jérémy » lun. 9 nov. 2015 22:06

Tous les signaux sont actifs à l'état bas, au repos il sont tous à 1.


Quand je regarde le schéma de la carte j'ai pas l'impression ? mais je uis débutant alors je ne suis pas sur de moi ; En page 3

L'astuce est de laisser RS à 1, et ne le changer que fugitivement si on envoie une commande(=registre), ce qui arrive pas très souvent, car ces écrans on passe son temps à leur envoyer des datas (couleurs).

Oui au début j'aivaps as percuté, amis j'avais finis par comprendre, c'est malin ! on gagne une commande .

Quand tu ecris LcdErase(0x0000); // écran noir Il deviens tout noir ? donc deja pas la peine que j'essaye d'aller plus loin !

J'ai rajouter un délais de 1µs pour la commande sur LCD_WR, comme le préconise la DS c'est 15nS ? Mais bon pour les je pourrais améliorer quand il réagira cette écran de M...e
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 37 invités