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
Ecran Easy TFT
Ecran Easy TFT
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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é :
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] = { 0x88, 0x28, 0x48, 0xe8 };
int lLcd, hLcd;
unsigned int i , j;
void LcdStart(unsigned int ori);
void LcdFillSet(int x1, int y1, int x2, int y2);
void LcdSetPixel(int x, int y, unsigned 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_HEIGHT; hLcd = LCD_WIDTH; }
else { lLcd = LCD_WIDTH; hLcd = LCD_HEIGHT; }
LCD_CS = LCD_RS = LCD_RD = LCD_WR = 1;
LCD_RESET = 0; delay_ms(100); LCD_RESET = 1; delay_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(20, 10, RED); // pixel rouge en x=20, y=10
LcdSetPixel(21, 10, RED);
LcdSetPixel(21, 11, RED);
LcdSetPixel(20, 11, RED);
delay_ms(500);
}
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 (x >= 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 (i=0; i<lLcd; i++){
for (j=0; j<hLcd; j++) {
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
}
}
Ecran Easy TFT
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) { }
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- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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
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
Ecran Easy TFT
Ecran Easy TFT
Ecran Easy TFT
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:
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+
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- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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][/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
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 = 0 ; // Envoie une impulsion pour valider la donnée
asm nop;
TFT_WR = 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
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 = 0 ; // Register Select, 0 = Command
PORTD = cmd ; // Met la valeur de la donnée sur le PORT
Pulse(); // Impulsion
TFT_RS = 1 ; // 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 = 0 ; delay_ms(100); // Met le RESET hard à 0
TFT_RST = 1 ; delay_ms(100); // Met le RESET hard à 1
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 (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
}
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
Ecran Easy TFT
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 72 invités