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 I2C qui ne s'allume pas
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » mer. 20 juin 2018 12:05 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,

Je rencontre à mon tour un problème avec un écran I²C .

Pour une question d’intégration, je souhaite changé mon écran actue ( Lien ), qui fonctionne en I²C avec une adresse imposée qui est 0x78 et qui fonctionne très bien, par celui ci (Lien) .

Sur mon nouvel écran l'adresse est sélectionnable soit 0x78 soit 0x7A .Elle est configurée au dos avec une Résistance de 0 ohms indiquant que son adresse est mise sur 0x78 .

Donc théoriquement la même adresse que mon ancien écran, tous deux fonctionne en I²C , tout deux sont driver par un SSD1306 si je me trompe pas !

Je me suis dis, normalement ça devrait roulé, car la configuration est la même , donc l'initialisation aussi etc ...

Et ben que nini , mon nouvel écran reste noir !!!!! même pas un petit sourcillement !

J'ai essayé de googler pour trouver des infos, j'ai trouvé le même écran avec différents codes qui ont des adresses différentes , j'ai donc essayé en modifiant l'adresse sans conviction.... choux blanc avec les adresses 0x3C et 0x20 , 0x7A et 0x78 .

J'ai essayé de passer l'I²C à 100Khz aussi.

Voici une partie seulement du code qui nous concerne :

Normalement apres la configuration quand j'active l'ecran je devrais voir un petit sursaut de l'écran, même si aucune donnée est envoyé, hors j'ai l'impression qu'il reste éteint ......

Code : Tout sélectionner

#define adresse_W 0x78
#define adresse_R 0x79
#define Command 0x00
#define Data 0x40
-
-
//---------------------  Initialisation I2C ------------------
  I2C1_Init(400000);
  -
  -
   OLED_Conf();
  OLED_Init();

//#####################################################################################
//##########################      BOUCLE INFINIE     ##################################
//#####################################################################################
 while(1){ 
 
 bla bla
 
 
}
 
 
 
//#############################################################################################
//############################      PROGRAMME SECONDAIRE     ##################################
//#############################################################################################

//-------------------------------------------------------------------------------------------------
void OLED_Conf(){ // Configuration de l'écran

 I2C1_Start();
 I2C1_Wr (adresse_W);         // Envoi l'adresse de l'esclave 0b01111000 + Write
 I2C1_Wr (Command);           // Command ou Data
 I2C1_Wr (DISPLAYOFF);        // écran éteint
 I2C1_Stop();
 delay_ms(10);
 
 I2C1_Start
();
 I2C1_Wr (adresse_W);         // Envoi l'adresse 0b01111000 + Write
 I2C1_Wr (Command);           // Command
 I2C1_Wr(ADRESSAGE_MODE);   // 0x20 Choix du Mode d'adressage  Hori/vert/page
 I2C1_Wr(0x00);             // mode horizontal
 I2C1_Stop();
 delay_ms(10);
 
 I2C1_Start
();
 I2C1_Wr (adresse_W);                // Envoi l'adresse 0b01111000 + Write
 I2C1_Wr (Command);                  // Command
 I2C1_Wr(SSD1308_SETCONTRAST);       // réglage du contraste
 I2C1_Wr(0xf0);                      // Valeur Contraste
 I2C1_Stop();
 delay_ms(10);
 
 Efface_ecran
();
 delay_ms(10);

 I2C1_Start();
 I2C1_Wr (adresse_W);         // Envoi l'adresse de l'esclave 0b01111000 + Write
 I2C1_Wr (Command);           // Command
 I2C1_Wr (DISPLAYON);         // allume l'écran
 I2C1_Stop();
 delay_ms(10);
}

//-------------------------------------------------------------------------------------------------
// Cette fonction remplis l'écran de  noir
// J'affecte la zone active à l'écran entier, et j'envoie des 0x00
void Efface_ecran(){
 unsigned int LOC_Compteur=0; // Variable locale
 
 I2C1_Start
();
 I2C1_Wr (adresse_W);         // Envoi l'adresse 0b01111000 + Write
 I2C1_Wr (Command);           // Command ou Data
 I2C1_Wr(ADRESS_COLONE);      // Dit à l’écran qu'on lui envoie les limites de colonnes
 I2C1_Wr(0);                  // Valeur 1ere colonne
 I2C1_Wr(127);                // Valeur dernière colonne
 I2C1_Wr(ADRESS_PAGE);        // Dit à l’écran qu'on lui envoie les limites des pages
 I2C1_Wr(0);                  // Valeur de la première page
 I2C1_Wr(7);                  // Valeur de la dernière page
 I2C1_Stop();

 I2C1_Start();
 I2C1_Wr (adresse_W);         // Envoi l'adresse de l'esclave 0b01111000 + Write
 I2C1_Wr (Data);              // Data
 for (LOC_Compteur=0;LOC_Compteur<1024;LOC_Compteur++){  // Je remplis l'écran de noir
     I2C1_Wr (0x00);
  }
 I2C1_Stop();
 
 
//-------------------------------------------------------------------------------------------------
// Cette fonction remplis l'écran de  blanc
// J'affecte la zone active à l'écran entier, et j'envoie des 0x00
void Ecran_Blanc(){
 unsigned int LOC_Compteur=0; // Variable locale

 I2C1_Start();
 I2C1_Wr (adresse_W);         // Envoi l'adresse 0b01111000 + Write
 I2C1_Wr (Command);           // Command ou Data
 I2C1_Wr(ADRESS_COLONE);      // Dit à l’écran qu'on lui envoie les limites de colonnes
 I2C1_Wr(0);                  // Valeur 1ere colonne
 I2C1_Wr(127);                // Valeur dernière colonne
 I2C1_Wr(ADRESS_PAGE);        // Dit à l’écran qu'on lui envoie les limites des pages
 I2C1_Wr(0);                  // Valeur de la première page
 I2C1_Wr(7);                  // Valeur de la dernière page
 I2C1_Stop();

 I2C1_Start();
 I2C1_Wr (adresse_W);         // Envoi l'adresse de l'esclave 0b01111000 + Write
 I2C1_Wr (Data);              // Data
 for (LOC_Compteur=0;LOC_Compteur<324;LOC_Compteur++){  // Je remplis l'écran de noir
     I2C1_Wr (0x255);
  }
 I2C1_Stop();
}


}
 


Auriez vous une idée pour identifier le problème ?

J'ai pensé à un soucis d'alimentation , j'alimente le tout en 4.5V pareil .

Merci de m'avoir lu
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Ecran I2C qui ne s'allume pas
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1083
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » mer. 20 juin 2018 14:11 lien vers la Data-Sheet : Cliquez ici

bonjour Jeremy et à tous,


il me semble qu'un ecran OLED s'alimente en 3,3V

As tu verifié si l'ecran repond bien à l'adresse 0x78

Ecran I2C qui ne s'allume pas
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » mer. 20 juin 2018 19:00 lien vers la Data-Sheet : Cliquez ici

Hello Paul ,

Effectivement et en théorie il s'alimente en 3.3V min ( d'aprés la ds). cependant j'ai testé de l'alimenter directement en 3V par pile ! ça fonctionne bien. la durée de vie risque d'être sensiblement diminuée , mais pas critique dans mon application.
Je n'avais pas la place de mettre un Boost !

J'ai effectivement regardé ton post sur la détection d'adresse I²C, mais je travaille sur site et j'ai pas d'écran dispo ( sauf celuique je cherche a faire fonctionner :sifflotte: ). J'ai tout de même regarder ton Code pour essayer de le comprendre, mais je me suis perdu dans ta méthode pour traiter la collision.

Ceci dit l'écran focntionne ! en effet je suis allez voir mon tuto , pour rechercher des indications, et j'ai remarqué la configuration de la chargePump ! On activant celle-ci l'écran c'est enfin allumé.

En lisant la DS, j'avoue de pas avoir trop compris le fonctionnement de cette dernière : Ds en page 62
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 1 invité