Afficheur graphique

cs_dine62 Messages postés 6 Date d'inscription mardi 30 janvier 2007 Statut Membre Dernière intervention 13 octobre 2008 - 3 déc. 2007 à 10:18
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 - 11 déc. 2007 à 18:50
Bonjour,

Au boulot, je doit programmer un afficheur graphique. Pour le moment, je ne doit que afficher quelque lettres.

Mon afficheur est un "LASCAR" SP5-GFX1  avec le controler SPLC501C.

Pour le programmer, j'utilise le PIC 18F8722 et le compilateur CCS.

Le problème est que je n'arrive pas a afficher quoi que ce soit. Je pense que c'est un problème de contraste mais, je ne sais pas comment le régler.

J'ai fait plusieur test mais rien.

Voici mon initialisation de l'afficheur : 

   EnvoyerCommande(0xA2);           // LCD Bias Setting - 6.11
   EnvoyerCommande(0xA0);           // Normal Display Mode - 6.10
   EnvoyerCommande(0xC8);           // Common Output Mode - 6.15
   EnvoyerCommande(0x23);           // V5 Voltage Reg Internal Resistor - 6.17
   EnvoyerCommande(0x81);           // Electronic Volume Double Command - 6.18
   EnvoyerCommande(0x00);           // adjust for correcr contrast
   EnvoyerCommande(0x2B);           // Power Control Circuit - 6.16
   EnvoyerCommande(0x40);           // Display Start Line Set - 6.2
  
   EnvoyerCommande(NumPage);        // Page Adress Set - 6.3
   EnvoyerCommande(NumColoneHigh);  // Column Adress Set High bits - 6.4
   EnvoyerCommande(NumColoneLow);   // Column Adress Set Low bits - 6.4
   EnvoyerCommande(0xAF);           // Display ON - 6.1

Avec EnvoyerCommande :
output_low(AOP);
spi_write(data);

Concernant le contraste, j'ai essayer 0x00, 0x0A, 0xFF mais rien a faire , je ne vois toujours rien.

Voici mon programme entier :

#include <18f8722.h>


   //........................................................................
   // Pour le debug
   //........................................................................
#device     ICD = TRUE
#fuses      HS,NOLVP,NOWDT         
#use        delay ( clock = 20000000)
#use        rs232 (baud =9600, xmit = PIN_C6, rcv = PIN_C7)


//-----------------------------------------------------------------------------
// Configuration des Pins
//-----------------------------------------------------------------------------
#define LED_VERTE    PIN_A5
#define LED_JAUNE    PIN_B4
#define LED_ROUGE    PIN_B5


#define AOP         PIN_G3
#define RESET     PIN_J4
#define CS1          PIN_J7




//-----------------------------------------------------------------------------
// Constantes globales
//-----------------------------------------------------------------------------
#define NumPage         0xB0
#define NumColoneHigh   0x10
#define NumColoneLow    0x00
//-----------------------------------------------------------------------------
// Prototype des fonctions
//-----------------------------------------------------------------------------
void InitialiserAfficheur  (void);             
void EnvoyerCommande       (int8 data);
void Afficher              (int8 data);


#INT_ssp
void intspi (void)
{
   printf("ok\r\n");
}


void EnvoyerCommande (int8 data)
{
   output_low(AOP);
   spi_write(data);


}


void Afficher(int8 data)
{
   output_high(AOP);
   spi_write(data);


}


void InitialiserAfficheur (void)
{
   output_low(RESET);
   delay_ms(500);
   output_high(RESET);
  
   EnvoyerCommande(0xA2);           // LCD Bias Setting - 6.11
   EnvoyerCommande(0xA0);           // Normal Display Mode - 6.10
   EnvoyerCommande(0xC8);           // Common Output Mode - 6.15
   EnvoyerCommande(0x23);           // V5 Voltage Reg Internal Resistor - 6.17
   EnvoyerCommande(0x81);           // Electronic Volume Double Command - 6.18
   EnvoyerCommande(0x00);           // adjust for correcr contrast
   EnvoyerCommande(0x2B);           // Power Control Circuit - 6.16
   EnvoyerCommande(0x40);           // Display Start Line Set - 6.2
  
   EnvoyerCommande(NumPage);        // Page Adress Set - 6.3
   EnvoyerCommande(NumColoneHigh);  // Column Adress Set High bits - 6.4
   EnvoyerCommande(NumColoneLow);   // Column Adress Set Low bits - 6.4
   EnvoyerCommande(0xAF);           // Display ON - 6.1
            
}
void main (void)
{
   int idx;
   output_low(LED_VERTE);
   output_low(LED_JAUNE);
  
   setup_spi (SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_4);
  
   output_high(RESET);
  
   output_high(CS1);
    
   InitialiserAfficheur();
  
   for (idx = 0;idx <128 ;idx ++)
   {
      output_high(AOP);
      spi_write(0x55);
   }
   /*
   while (TRUE)
   {
     
   }
   */
   output_high(LED_JAUNE);
  
}

Merci de me donner quelque pistes pour avancer.

Amandine

8 réponses

nicolasToulouse Messages postés 31 Date d'inscription mercredi 14 juin 2006 Statut Membre Dernière intervention 11 janvier 2008
3 déc. 2007 à 11:40
salut

c pas trop du csharp ca :)

The Monz, Toulouse
0
cs_dine62 Messages postés 6 Date d'inscription mardi 30 janvier 2007 Statut Membre Dernière intervention 13 octobre 2008
3 déc. 2007 à 11:49
salut, non c'est du C :)
0
cs_dine62 Messages postés 6 Date d'inscription mardi 30 janvier 2007 Statut Membre Dernière intervention 13 octobre 2008
4 déc. 2007 à 12:13
Personne pour me donner un coup de main??
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
4 déc. 2007 à 22:25
Bonsoir

Tout ce qui suit n'est que pure spéculation, car pas de matériel pour tester. De la théorie rien que de la théorie, qui plus est peut être erronée

En regardant brièvement la doc du SPLC501C, ce que tu lui envoyes semble correct (les commandes); par contre je ne vois pas dans ton programme les signaux EP et RWP, juste le AOP.

Suggestions :

Pour le reset : 
   EnvoyerCommande(0xE2);           // RESET

Pour le contraste :
   EnvoyerCommande(0x81);           // Electronic Volume Double Command - 6.18
   EnvoyerCommande(0x20);          // Valeur moyenne

Pour tester l'affichage :
   EnvoyerCommande(0xA5);           // Affichage de tous les pixels
   EnvoyerCommande(0xA4);           // Affichage normal
  
P.S. Autre chose, respectes tu les bons timings ?

Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_dine62 Messages postés 6 Date d'inscription mardi 30 janvier 2007 Statut Membre Dernière intervention 13 octobre 2008
5 déc. 2007 à 09:39
Salut,

Les signaux EP, RWP ne sont pas présent dans mon programme car, je n'y ai pas accès. Je n'ai acces que a 9 pins : RESET,  AOP, SI, SC1, SCL, V+, V-, BL- etBL+ (BL sont pour l'allumage de la lumière).

Sinon, je pense avoir respecsté les timings. J'ai changé u peu mon programme depuis le premier poste.


#include <18f8722.h>
  //........................................................................
   // Pour le debug
   //........................................................................
#device     ICD = TRUE
#fuses      HS,NOLVP,NOWDT         
#use        delay ( clock = 20000000)//#use        i2c(MASTER, scl PIN_E0 , sda PIN_A2, fast = 5000000)
#use        rs232 (baud =9600, xmit = PIN_C6, rcv = PIN_C7)
//-----------------------------------------------------------------------------
// Configuration des Pins
//-----------------------------------------------------------------------------
#define LED_VERTE    PIN_A5
#define LED_JAUNE    PIN_B4
#define LED_ROUGE    PIN_B5
#define PUSH_BUTTON  PIN_A5
#define AOP          PIN_G3
#define RESET        PIN_J4
#define CS1          PIN_J7
//-----------------------------------------------------------------------------
// Constantes globales
//-----------------------------------------------------------------------------
#define NumPage         0xB0
#define NumColoneHigh   0x10
#define NumColoneLow    0x00
//-----------------------------------------------------------------------------
// Variables globales
//-----------------------------------------------------------------------------
int alpha;
int contrast;
//-----------------------------------------------------------------------------
// Prototype des fonctions
//-----------------------------------------------------------------------------
void InitialiserAfficheur  (void);             
void EnvoyerCommande       (int8 data);
void Afficher              (int8 data);
void EcricreDataSurPage    (int8 Page, int8 Colonne, int8 Data);
void EffacerUnePage        (int8 Page);
void EffacerAfficheur      (void);
void EcricreALaSuite       (int8 Data);

// A utiliser que si l'on connait la position où l'on se trouve
void EcricreALaSuite(int8 Data)
{
   Afficher(Data);
}


// Ecrit une donnée sur une page et une colonne spécifiées
void EcricreDataSurPage(int8 Page, int8 Colonne, int8 Data)
{
   EnvoyerCommande(NumPage + page);    // Config de la page
   EnvoyerCommande(NumColoneHigh + (Colonne & 0xF0) >> 4);  // Configuration de la colonne (@high=
   EnvoyerCommande(NumColoneLow + (Colonne & 0xF0) );       // Configuration de la colonne (@low)
   Afficher(Data);  
}


// Efface une page
void EffacerUnePage(int8 Page)
{
   // Variable locale
   int8 idx;


   // Place le caractère ' ' à la première colonne
   EcricreDataSurPage(Page, 0x00, 0x00);
   // Place le caratère ' ' à la idx ieme colonne
   for (idx = 0; idx<128; idx++)
      EcricreALaSuite(0x00);
}




// Efface toutes les pages
void EffacerAfficheur(void)
{
   int8 idx;
  
   for(idx = 0; idx<8; idx++)
      EffacerUnePage(idx);


}
void EnvoyerCommande (int8 data)
{
   output_low(AOP);
   output_low(CS1);
   spi_write(data);
   output_high(CS1);
   delay_ms(2);


}


void Afficher(int8 data)
{
   output_high(AOP);
   output_low(CS1);
   spi_write(data);
   output_high(CS1);
   delay_ms(2);


}


void InitialiserAfficheur (void)
{
   // Varaible locale
   int idx;
   
   EnvoyerCommande(0xE2);           // Reset
   EnvoyerCommande(0xA2);           // LCD Bias Setting - 6.11
   EnvoyerCommande(0xA0);           // Normal Display Mode - 6.10
   EnvoyerCommande(0xC8);           // Common Output Mode - 6.15
   EnvoyerCommande(0x23);           // V5 Voltage Reg Internal Resistor - 6.17
   EnvoyerCommande(0x81);           // Electronic Volume Double Command - 6.18
   EnvoyerCommande(0x0A);           // adjust for correcr contrast
   EnvoyerCommande(0x2B);           // Power Control Circuit - 6.16
   EnvoyerCommande(0x40);           // Display Start Line Set - 6.2
   EnvoyerCommande(NumPage);        // Page Adress Set - 6.3
   EnvoyerCommande(NumColoneHigh);  // Column Adress Set High bits - 6.4
   EnvoyerCommande(NumColoneLow);   // Column Adress Set Low bits - 6.4
   EnvoyerCommande(0xAF);           // Display OFF - 6.1
  
  
   delay_ms(100);
            
}

void main (void)
{
  
   int8 idx;
  
   output_low(LED_VERTE);
   output_low(LED_JAUNE);
  
   setup_spi (SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_16);
  
   output_low(RESET);
  
   output_low(CS1);
   delay_us(1);
   output_high(RESET);
    
   InitialiserAfficheur();  
   EffacerAfficheur();
   
   // Affiche 'A'
   EcricreDataSurPage(0, 0, 0xFF);
   EcricreALaSuite(0x11);
   EcricreALaSuite(0x11);
   EcricreALaSuite(0x11);
   EcricreALaSuite(0xFF);
  
   // Affiche deux espaces
   EcricreALaSuite(0x00);
   EcricreALaSuite(0x00);
  
   // Affiche 'B'
   EcricreALaSuite(0xFF);
   EcricreALaSuite(0x91);
   EcricreALaSuite(0x91);
   EcricreALaSuite(0x99);
   EcricreALaSuite(0x66);
     
   output_high(LED_JAUNE);
  
}

De plus WhiteHippo, j'ai essayé tes tests mais rien. J'ai mit une tempo entre afficher tous les pixels et affichage normal histoire de voir quelque chose mais toujours rien.

Je commence a désespérer.

Amandine
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
5 déc. 2007 à 18:26
Bonsoir

Quelques points :

"Les signaux EP, RWP ne sont pas présent dans mon programme car, je n'y ai pas accès" : En "3. BLOCK DIAGRAM" et "4.3. System Bus connection Terminals", ces entrées sont bien présentes !! Je comprends pas pourquoi tu n'y as pas accès.

CS1 et pas de CS2 ?? Toujours en "4.3. System Bus connection Terminals" et en "5.2. The chip select", il est spécifié que pour activer les émissions/receptions de données et/ou de commandes il faut avoir le CS2=1 et le CS1=0.

void EnvoyerCommande (int8 data)
{
  // Activation des I/O
   output_high(CS2);

   output_low(CS1);
 
  // DB0 à DB7 =  Données de controle
   output_low(AOP);

  // Envoi des données

   spi_write(data);

  // Désactivation des I/O

   output_low(CS1);

   output_low(CS2);

   delay_ms(2);
}

P.S. Je me base sur la version 1.8 de la documentation.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
cs_dine62 Messages postés 6 Date d'inscription mardi 30 janvier 2007 Statut Membre Dernière intervention 13 octobre 2008
10 déc. 2007 à 17:20
Bonsoir,

Je n'ai pas accès aux pins CS2, EP et RWP car les pins présentent sur mon afficheur sont  : AOP, CS1, SI, CLK, V+, V-, BL+, BL-, RESET.

C'est les seules pins que je peut accéder. Mon afficheur est le SP5-GFX1 de "Lascar".

http://www.lascarelectronics.com/products.cfm?STOCKNO=SP%205%2DGFX1&CFID=13097974&CFTOKEN=1bee072ea56d2cb3-5DA70C64-C297-FD96-B2DF7E33F161A21D
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
11 déc. 2007 à 18:50
Bonsoir

Désolé de ne pas avoir répondu plus tot mais week end prolongé

As tu été faire un tour ici ? Dans la section "SP 5-GFX1 DOWNLOADS"

tu y trouveras certainement de quoi avancer.

Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
Rejoignez-nous