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
satinas
Passioné
Passioné
Messages : 267
Enregistré en : novembre 2015

#121 Message par satinas » lun. 9 nov. 2015 22:17

- J'ai modifié la fontions LcdErase, regarde plus haut, notamment il y a 2 boucles car le nombre de pixels dépasse 65536
- Tu n'utilises pas les registres LAT ?
- essaye de démarrer en mettant RESET à 1 pendant 10 ms, puis en le passant définitivement à 0

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

#122 Message par Jérémy » lun. 9 nov. 2015 22:20

- Tu n'utilises pas les registres LAT ?

Ben je connais pas trop . j'ai préféré faire avec ce que je connaissais en fait .

- essaye de démarrer en mettant RESET à 1 pendant 10 ms, puis en le passant définitivement à 0

Ok
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 : 2046
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#123 Message par Jérémy » lun. 9 nov. 2015 22:28

Voila les modifs : j'ai force sur les timings , mais bon je pense pas que ca gêne ;

En inversant le Reset j'ai toujours rien dans les deux sens. L'écran reste blanc de chez blanc

Voici le code modifié :

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; delay_us(1); LCD_WR = 1; delay_us(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;
unsigned int i j;
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(100); LCD_RESET 1delay_ms(150);

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

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

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);
      for (
i=0i<lLcdi++){
         for (
j=0j<hLcdj++) {
           
SendData16(clr);
          }
        }
  
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
Passioné
Passioné
Messages : 267
Enregistré en : novembre 2015

#124 Message par satinas » lun. 9 nov. 2015 22:39

Bien que la doc ne le dis pas clairement, je pense que le RESET est actif à l'été bas.
Remplace tous les registres PORT par LAT, on utilise LAT pour les outputs, PORT pout les inputs.
Ensuite vérifie à l'oscillo ou au voltmètre (en rallongeant les impulsions) que tous les sorties répondent bien, ne pas se dire ça ne peut que marcher, il faut le voir pour le croire. bon courage :)

pas la peine de boucler sur le LcdStart() tu vas finir par l'énerver cet écran :)

LcdStart(0);
while (1) { }
Modifié en dernier par satinas le lun. 9 nov. 2015 22:47, modifié 1 fois.

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

#125 Message par Jérémy » lun. 9 nov. 2015 22:44

Ok merci à toi en tout cas .

je ferais ca demain car j'ai eu une dure journée et demain elle sera pire lol .
Après j'ai 5 jours pour essayer lol.

je le ferais au voltmètre mais en fiat je pense pas en avoir besoin car j'utilise la carte easyPIC et je vois a chaque qu'une sortie est à 1 ou non , des leds sont branchées dessus. Bien sur si ca va trop vite je vois rien .

Bonne nuit , j’espère à bientôt , car tout aide est le bienvenue
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#126 Message par Guest » mar. 10 nov. 2015 11:18

Bonjour

Pour le RESET tout est en page 225 du datasheet attention au max
Pour le LATX tu es concerné uniquement en réception de donnée

Regarde en page 229 l'organigramme est intéressant

A+

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

#127 Message par Jérémy » mer. 11 nov. 2015 17:58

Bonjour,

désolé hier grosse journée , et aujourd'hui déménagement des beaux-parents ......

toujours blanc cet écran !!!! que voit tu de particulier sur l’organigramme en page 229 ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

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

#128 Message par Guest » mer. 11 nov. 2015 18:27

Pour ce qui est du test en lecture que tu as fait , il a été fait avec le reset hard a zéro, donc pas bon ,regarde de faire en fonction de la page 225 dans le main:

Code : Tout sélectionner

 
  TFT_RST= 1;                           // reset hard du chip
  TFT_RST=0;
  __delay_us(15);
  TFT_RST=1;


Puis de refaire une réception avec LATX .Déjà si on pouvait lire.
Si ok voir avec cette organigramme si c'est pas mieux.

A+

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

#129 Message par Jérémy » mer. 11 nov. 2015 22:27

J'ai une piste sérieuse !

Déjà le programme fonctionne c'es une certitude. l trace une ligne rouge en partant du coin inférieur gauche .

[spoil]

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

unsigned char i;
//------- 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 ;      // Envoie une impulsion pour valider la donnée
     
asm nop;
  
TFT_WR ;
 }

//---------------------------------------------------------------------------------
//  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
  
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){
  
  
TFT_RS ;      // Register Select, 0 = Command
  
PORTD cmd ;     // Met la valeur de la donnée sur le PORT
  
Pulse();          // Impulsion
  
TFT_RS ;      // On repasse en registre donnée car on envoie plus de données
}

/*##################################################################################
############################     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 delay_ms(100);  // Met le RESET hard à 0
  
TFT_RST delay_ms(100);  // Met le RESET hard à 1

  
TFT_CS ;    // (PORTB.B4) Chip Select actif en permanence
  
TFT_RD ;    // (PORTB.B0) broche Read non utilisé

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

    
Envoi_cmd (0x28);   // Display OFF (l'ecran est blanc)
       
PORTE 0x00;    // allume une led test
       
delay_ms(500);  // pause

    
Envoi_cmd 0x29);  // Display ON
       
PORTE 0x02;    // Eteint une led test


   
for (i=0;i<=200;i++){
        
Envoi_cmd(0x2A);      // defini l'adresse de la colonne en 16 bit
            
Envoi_data (0x00);
            
Envoi_data (0x00+i);
            
Envoi_data (0x00);
            
Envoi_data (0x00+i);
        
Envoi_cmd(0x2B);      // defini l'adresse de la page en 16 bit
            
Envoi_data (0x00);
            
Envoi_data (0x00+i);
            
Envoi_data (0x00);
            
Envoi_data (0x00+i);
        
Envoi_cmd(0x2C);
             
Envoi_data (0xf8);
             
Envoi_data (0x00);
         
delay_ms (5);
    }
         
delay_ms (5000);

     
Init_ecran();
     
config();
  }
}

//----------------------------------------------------------------------------------
//  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(50);
 }

//----------------------------------------------------------------------------------
//  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
 
[/spoil]

Je vous passe les détails pour le moment.
J'ai réussis à vérifier le programme, grâce à la carte TFT proto .En câblant cette carte fil à fil, cela fonctionne nickel ! C'est plutôt une bonne nouvelle .

Mais quand j’enlève mes branchements fil par fil pour remplacer exactement la même chose avec l'écran qui je fixe. ca marche plus !!!!

DONC si on est sur que le programme fonctionne avec le même écran et même driver , et que les branchements sont exactement pareil, on peut en déduire qu'il y a un problème sur l’écran ?

Je recherche sur Google , et je tombe la dessus :lien vers écran
On peut voir que sur ce schéma les broches IM0-IM3 ne sont pas branchées pareil ??????
D’après ce schéma le mode est en 18bit bus interface I ???

Le problème c'est que je n’ai pas accès aux broches IM sur l'écran , pour vérifier leurs niveaux logiques
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 : 2046
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#130 Message par Jérémy » jeu. 12 nov. 2015 08:28

Bonjour ,

Ce matin opération chirurgicale !!!

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 9 invités