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 :

#31 Message par Jérémy » jeu. 5 nov. 2015 17:06

Alors petit compte rendu ! :cry:

Déjà ça ne fonctionne toujours pas ! rien ne se passe l'écran reste allumé ( pixel blanc) et rien ne se passe .

Comme je ne suis pas certain qu'un Display_off , passe l’écran tout noir ! peut être efface t-il les caractères que l'on à préalablement écrit . Et comme j’écris rien , ben il reste blanc . Pour lever tout les doutes , j'ai rajouter la fonction inversions, qui normalement inverses les pixels noir/blanc .

J'ai pris en compte vos remarques , j'ai donc modifier ma déclaration de PIN, avec quelques chose que je connais un peu mieux !

Ca donne ceci . Je respecte à la lettre la DS , et ca ne fonctionne pas :evil:

Code : Tout sélectionner

#define TFT_RD PORTB.B0
#define TFT_WR PORTB.B1
#define TFT_RS PORTB.B2
#define TFT_CS PORTB.B4
#define TFT_RST PORTB.B5

//  Fonction Envoi de commandes   ----------------------------------------------
void Envoi_cmd ( unsigned char Data){

  PORTD = Data ;  //  Met la valeur sur le PORTD (0x01= RESET)
           delay_ms(1);
  TFT_CS=;             // Chip select , actif à l'etat bas
  TFT_RS=;             // Register Select, 1=Data, 0=Command
  TFT_RD=1;

  TFT_WR = 0 ;
         delay_us(1);
  TFT_WR = 1 ;
         delay_us(1);
  TFT_WR = 0 ;
         delay_us(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 B en sortie
  TRISE = 0;  // Port en sortie pour test


  Envoi_cmd (0x01); // Effectue un RESET
  delay_ms(5000);
  
  while
(1) {

     Envoi_cmd (0x28); // Display OFF

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

     Envoi_cmd ( 0x29);// Display ON

      PORTE = 0x00;    // Eteint une led test
      delay_ms(1000);  // pause
     
     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

  }

}


PS : la led clignote bien ; le programme n'est donc pas bloqué dans les abyss.
RE-PS : je vois bien les valeurs du PORTD changées, car j'ai les leds branchées dessus . Je vois aussi la bonne configuration des broches sur le portB.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran Easy TFT
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#32 Message par Guest » jeu. 5 nov. 2015 17:42

j'aime bien ton code :-)
vire le dernier

Code : Tout sélectionner

TFT_WR = 0 ;
         delay_us(1)

je répète une validation c'est passer de 1 à 0 (15ns) puis de 0 à 1 (15ns)

et il ne reste plus qu'a continuer la suite du tuto de la datasheet en utilisant pas l'inversion bien sur

Code : Tout sélectionner

write_cmd(0xcf);
write_data16(0x00,0x00);
write_data16(0x00,0x83);
write_data16(0x00,0x30);
write_cmd(0xed);
write_data16(0x00,0x64);
write_data16(0x00,0x03);
write_data16(0x00,0x12);
write_data16(0x00,0x81);
write_cmd(0xe8);
write_data16(0x00,0x85);
write_data16(0x00,0x01);
write_data16(0x00,0x79);
write_cmd(0xcb);
write_data16(0x00,0x39);
write_data16(0x00,0x2c);
write_data16(0x00,0x00);
write_data16(0x00,0x34);
write_data16(0x00,0x02);
write_cmd(0xf7);
write_data16(0x00,0x20);
write_cmd(0xea);
write_data16(0x00,0x00);
write_data16(0x00,0x00);

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 :

#33 Message par Jérémy » jeu. 5 nov. 2015 18:37

vire le dernier

Code : Tout sélectionner
TFT_WR = 0 ;
delay_us(1)

je répète une validation c'est passer de 1 à 0 (15ns) puis de 0 à 1 (15ns)

????
je doit donc ecrire non ?

Code : Tout sélectionner

//  Fonction Envoi de commandes   ----------------------------------------------
void Envoi_cmd unsigned char Data){

  
PORTD Data ;  //  Met la valeur sur le PORTD (0x01= RESET)
           
delay_ms(1);
  
TFT_CS=;             // Chip select , actif à l'etat bas
  
TFT_RS=;             // Register Select, 1=Data, 0=Command
  
TFT_RD=1;

  
TFT_WR ;        //je m'assure que la broche soit à 1 de la pour validation
         
delay_us(1);
  
TFT_WR ;        // Mise à 0 de la broche pour validation
         
delay_us(1);
  
TFT_WR ;        // Re-mise à 1 pour validation
         
delay_us(1);

}
//------------------------------------------------------------------------------
 


D’après toi , je ne peux rien faire avant une INIT total ? l'ecran devrais s'éteindre normalement avec un disply off ? on quelqu'un connait un écran qui reste blanc dès la mise sous tensions ?

Je me farci toute l'initialisation alors ce soir ! Même si je voulais m'assurer avant de faire ca , que j'arrive a bien communiquer avec l’écran !

Je vais écouter les conseils , carde toute façon je ne sais plus quoi faire !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran Easy TFT
JEJE89000
Avatar de l’utilisateur
Débutant
Débutant
Messages : 45
Âge : 44
Enregistré en : octobre 2015
Localisation : dans le centre

#34 Message par JEJE89000 » jeu. 5 nov. 2015 19:00

Desole moi je peux pas vous aider c est au dessus de mes compétences je vais regarder sa.
Sinon j aurai bien voulu bon je retourne bouquiner
exit

Ecran Easy TFT
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#35 Message par Guest » jeu. 5 nov. 2015 19:02

Tu mets dans le main

Code : Tout sélectionner

  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 B en sortie
  TRISE = 0;  // Port en sortie pour test
 
  TFT_CS=0 ;      // Chip select , actif à l'etat bas
  TFT_WR=1;      // WR etat haut

tu vires CS de ta fonction Envoi_cmd

il te reste

Code : Tout sélectionner

void Envoi_cmd ( unsigned char Data){

  PORTD = Data ;  //  Met la valeur sur le PORTD (0x01= RESET)
 
  TFT_RS=0 ;             // Register Select, 1=Data, 0=Command
  TFT_RD=1;

   TFT_WR = 0 ;        // Mise à 0 de la broche pour validation
         delay_us(1);
  TFT_WR = 1 ;        // Re-mise à 1 pour validation
         delay_us(1);

}

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 :

#36 Message par Jérémy » jeu. 5 nov. 2015 19:54

Desole moi je peux pas vous aider c est au dessus de mes compétences je vais regarder sa.

:D , y'a vraiment rien de compliqué pourtant .

Une boucle principale, qui envoie une valeur ( notre ordre pour l’écran) , à une fonction .

cette fonction reçoit l'ordre et la stocke dans la variable Data . ensuite dans la fonction on utilise cette variable, pour mettre le PORTB dans cette configuration . puis on valide la valeur du PORT B avec une série d'état logique sur les broches .

Pour compliquer il faudrait déjà que l'écran réponde ou reçoive quelques choses .

@maï : Ok je fais comme ça! et je fais une fonction pour initialisation comme dans l'exemple de la DS, et il faut aussi que je fasse un fonction pour envoyer de la DATA .
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 :

#37 Message par Jérémy » jeu. 5 nov. 2015 20:54

oops Toujours rien qui change . Blanc blanc blanc ....... Il reste blanc .

j'ai creer une focntion ecrire data pour envoyer les données ; J'ai essayer deux méthodes , la methode exact utilisé dnas l'exemple de la DS , a savoir en envoyant 2 valeurs pour faire du 16 bit .

puis celle ci qui me parait plus cohérent étant donné que nous sommes en 8bit .

Code : Tout sélectionner

#define TFT_RD PORTB.B0
#define TFT_WR PORTB.B1
#define TFT_RS PORTB.B2
#define TFT_CS PORTB.B4
#define TFT_RST PORTB.B5

//  Fonction Envoi de commandes   ----------------------------------------------
void Envoi_cmd unsigned char cmd){

  
PORTD cmd ;  //  Met la valeur sur le PORTD (0x01= RESET)
    
delay_ms(1);

  
TFT_RS=;             // Register Select, 1=Data, 0=Command
  
TFT_RD=1;

  
TFT_WR ;
     
delay_us(1);
  
TFT_WR ;
     
delay_us(1);
}
//---------------------------------------------------------------------------------

//  Fonction Envoi de Données  2 octets pour 16bits  -------------------------------
void Envoi_data unsigned char Data){

  
TFT_RS=;      // Register Select, 1=Data, 0=Command
  
TFT_RD=1;
/*
  PORTD = 0x00 ;  //  Met la valeur de la donnée sur le PORTD
    delay_ms(1);

  TFT_WR = 0 ;
     delay_us(1);
  TFT_WR = 1 ;
     delay_us(1);
*/
  
PORTD Data ;  //  Met la valeur de la donnée sur le PORTD
    
delay_ms(1);

  
TFT_WR ;
     
delay_us(1);
  
TFT_WR ;
     
delay_us(1);
}
//---------------------------------------------------------------------------------

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

  
Envoi_cmd (0x01); // Effectue un RESET
  
delay_ms(500);
  
Envoi_cmd (0x28); // Display off

//---------------------------------------------------------
   
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(0x11); // sleep out
   
delay_ms(100);

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

  
Envoi_cmd(0x2c);  // memory write
}

/*##################################################################################
############################     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 B en sortie
  
TRISE 0;      // Port en sortie pour test

  
TFT_CS=;      // Chip select , actif à l'etat bas
  
TFT_WR=1;       // WR etat haut

  
Init_ecran ();  // Initialisation de l'écran

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

     
Envoi_cmd (0x28); // Display OFF

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

     
Envoi_cmd 0x29);// Display ON

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

     
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

  
}



Les valeurs sur le pORTD change bien . mais rien de rien !!! AU SECOURS !!!!!
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran Easy TFT
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#38 Message par Guest » ven. 6 nov. 2015 07:50

bonjour

en cherchant j'ai enfin trouve quelques choses de plus consistant
http://www.crystalfontz.com/products/do ... -07-18.pdf

bonne lecture
PS regarde en page 110 CS qui suit WR revoir la chronologie de CS a remettre dans les fonctions
A+

Ecran Easy TFT
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#39 Message par Guest » ven. 6 nov. 2015 08:40

essai comme ca
Tu mets dans le main

Code : Tout sélectionner

 
  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 B en sortie
  TRISE = 0;  // Port en sortie pour test
 
  TFT_CS=1;      // Chip select , actif à l'etat haut
  TFT_WR=1;      // WR etat haut


Code : Tout sélectionner

: Tout sélectionner

void Envoi_cmd ( unsigned char Data){

  PORTD = Data ;  //  Met la valeur sur le PORTD (0x01= RESET)
 
  TFT_RS=0 ;             // Register Select, 1=Data, 0=Command
  TFT_RD=1;

   TFT_CS=0
   TFT_WR = 0 ;        // Mise à 0 de la broche pour validation
         delay_us(1);
  TFT_WR = 1 ;        // Re-mise à 1 pour validation
         delay_us(1);
  TFT_CS=1         
}


comme deja dit c'est pas du gateau !

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 :

#40 Message par Jérémy » ven. 6 nov. 2015 08:52

en cherchant j'ai enfin trouve quelques choses de plus consistant
http://www.crystalfontz.com/products/do ... -07-18.pdf

Mais c'est pour le driver SSD2119 ca, non?

PS regarde en page 110 CS qui suit WR revoir la chronologie de CS a remettre dans les fonctions

Je vais essayer de modifier cela alors . On ne sait jamais .

Image
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 43 invités