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 ---
- 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 ---
Modérateur : Jérémy
Ecran Easy TFT
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Alors petit compte rendu !
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
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.
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
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=0 ; // Chip select , actif à l'etat bas
TFT_RS=0 ; // 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.
Ecran Easy TFT
j'aime bien ton code
vire le dernier
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
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- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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=0 ; // Chip select , actif à l'etat bas
TFT_RS=0 ; // Register Select, 1=Data, 0=Command
TFT_RD=1;
TFT_WR = 1 ; //je m'assure que la broche soit à 1 de la pour validation
delay_us(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);
}
//------------------------------------------------------------------------------
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 !
Ecran Easy TFT
Ecran Easy TFT
Tu mets dans le main
tu vires CS de ta fonction Envoi_cmd
il te reste
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- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Desole moi je peux pas vous aider c est au dessus de mes compétences je vais regarder sa.
, 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 .
Ecran Easy TFT
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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 .
Les valeurs sur le pORTD change bien . mais rien de rien !!! AU SECOURS !!!!!
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=0 ; // Register Select, 1=Data, 0=Command
TFT_RD=1;
TFT_WR = 0 ;
delay_us(1);
TFT_WR = 1 ;
delay_us(1);
}//---------------------------------------------------------------------------------
// Fonction Envoi de Données 2 octets pour 16bits -------------------------------
void Envoi_data ( unsigned char Data){
TFT_RS=1 ; // 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 = 0 ;
delay_us(1);
TFT_WR = 1 ;
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=0 ; // 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 !!!!!
Ecran Easy TFT
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+
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
essai comme ca
Tu mets dans le main
comme deja dit c'est pas du gateau !
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- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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 .
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 43 invités