LCD 132x32 ST7565R
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

LCD 132x32 ST7565R



  1. #1
    invited8e548c5

    LCD 132x32 ST7565R


    ------

    Bonjour,

    Je dois réaliser un projet dans le cadre de mon apprentissage.
    Pour celui-ci j’ai choisi un afficheur LCD graphique 132x32 pour plus de liberté pour l’interface.
    Pour le montage sur plaque d’essai je possède un PIC 16F877A + quartz 20Mhz.
    Hors, je n’ai jamais utilisé et programmé un LCD graphique. Le peu de fois ou j’ai fait de la programmation sur afficheur c’était avec un alphanumérique, avec le driver et j’avais juste à écrire
    Code:
    printf(lcd_putc, "Bonjour");
    pour afficher Bonjour.

    Ce que je sais déjà :
    • C’est que mon PIC n’aura pas assez de RAM car l’afficheur utilise la mémoire tampon
    • Que si A0 :
    o A0=1 ce sont des données d’affichage
    o A0=0 ce sont des données de commande
    • Que la communication se fait par SPI
    • Que le contrôleur est le ST7565R

    J’ai compris comment fonctionne le SPI, j’ai réussi à communiquer avec un 2ème 16F877A et je pense que pour l’afficheur ça doit être plus ou moins du même.

    Mon problème est que je ne trouve pas de driver, enfin j’en trouve mais je n’y comprends rien.
    Je crois en avoir trouvé deux qui pourraient aller mais ils incluent pleins d’autres fichiers et je crois qu’ils sont codé pour du arduino et du mbed.
    Je n’ai pas encore appris à créer un driver n’y à utiliser un lcd graphique.
    Donc si quelqu’un pourrait m’aider ce serait super car ça fait une semaine que je suis bloqué sur ce problème .

    Afficheur: DOGM132-5 --> datasheet
    Contrôleur: ST7565R --> datasheet
    PIC: 16F877A --> datasheet
    Les deux drivers que j'ai trouvé:
    1 --> driver
    2 --> driver
    MPLAB 8.92
    CCS Compiler 5.015

    Connections:
    PIC --> LCD
    PIN24(SDO) --> PIN36(SI)
    PIN18(SCL) --> PIN37(SCL)
    PIN2(A0) --> PIN38(A0)
    VCC --> PIN39(Reset)
    GND --> PIN40(Chip Select)


    Merci par avance

    -----

  2. #2
    invited3dcf66c

    Re : LCD 132x32 ST7565R

    Salut,
    Malheureusement tu ne pourras pas utiliser ces drivers sur ton PIC, le premier est fait pour des uC à coeur cortex M3, et le second pour MBed. Celà dit tu peux largement t'inspirer du premier pour écrire un driver qui irait sur ton PIC.

  3. #3
    invited8e548c5

    Re : LCD 132x32 ST7565R

    Merci pour ta réponse,

    Donc si quelqu'un a deux trois informations pour une "conversion" ou un autre driver il est le bienvenu

  4. #4
    invite66c1ab93

    Re : LCD 132x32 ST7565R

    Bonsoir,

    Je n'ai pas regardé en détail les codes que tu proposes, mais pour t'aiguiller un peu, voici une séquence d'initialisation que j'utilise et qui fonctionne :

    GLCD_Reset = 0;
    delayms (50);
    GLCD_Reset = 1;
    delayms (100);
    GLCD_CS = 1;
    delayms (10);
    GLCD_ComData = 1;
    delayms (10);

    SdCmd (0b11100010); // Reset
    SdCmd (0b10100010); // set the LCD bias to 1/9th
    SdCmd (0x23); // Voltage Regulator internal Resisitor ratio set(the internal resistor divider set to 3 (from 0..7))
    SdCmd (0x2F); // Power Control Set( power control, all internal blocks ON )
    SdCmd (0b00000011); // Electronic volume Mode set ???
    SdCmd (0x40); // go back to the top left of the display
    SdCmd (0x81); // Electronic volume Mode set
    SdCmd (0b11111000); // Booster ratio Select Mode Set
    SdCmd (0b00000000); // Booster ratio register set ???
    SdCmd (0b10100000); // ADC Select (0xa0: Normal, 0xa1:Reverse)
    SdCmd (0b11001000); // Common output Mode Set
    SdCmd (0b10101111); // Display ON
    SdCmd (0b10100110); // Display Normal/Reverse (Permet d'inverser Blanc/noir)
    SdCmd (0xA4); // Display all points (0xa4:Normal display mode, 0xa5:display all points)

    Puis tu n'as plus qu'à essayer d'afficher un caractère ou un point !

    Si ça fonctionne, je t'en donnerai un peu plus ...

    Mickael

  5. A voir en vidéo sur Futura
  6. #5
    invited8e548c5

    Re : LCD 132x32 ST7565R

    Merci pour le bout de code, je l'ai réécris pour mon PIC.
    J'ai fait comme je pensais donc sûrement tout faux.
    J'ai inversé le contraste (Display Normal/Reverse) pour voir si le lcd réagit sans lui envoyer de donnée d'affichage mais il ne se passe rien, même pas un clignotement

    J'ai essayé avec CS à 1 ou à 0

    Code:
    #include <16f877A.h>
    #fuses HS, NOWDT, NOPUT, NOBROWNOUT, NOLVP
    #use delay (clock=20000000)
    
    #define A0 PIN_A0
    #define RESET PIN_A1
    #define CHIP_SELECT PIN_A2
    
    void lcd_init();
    void SdCmd(int);
    
    void main(void)
    {	
    	//SPI
    	setup_spi(SPI_MASTER|SPI_CLK_DIV_4);
    
    	lcd_init();
    }
    
    void lcd_init()
    {
    	output_low(RESET);
    	delay_ms(50);
    	output_high(RESET);
    	delay_ms(100);
    	output_low(CHIP_SELECT);
    	delay_ms(10);
    	output_low(A0);
    	delay_ms(10);
    
    	SdCmd(0b11100010);	// Reset
    	SdCmd(0b10100010);	// set the LCD bias to 1/9th
    	SdCmd(0x23);		// Voltage Regulator internal Resisitor ratio set(the internal resistor divider set to 3 (from 0..7))
    	SdCmd(0x2F);		// Power Control Set( power control, all internal blocks ON )
    	SdCmd(0b00000011);	// Electronic volume Mode set ???
    	SdCmd(0x40);		// go back to the top left of the display
    	SdCmd(0x81);		// Electronic volume Mode set
    	SdCmd(0b11111000);	// Booster ratio Select Mode Set
    	SdCmd(0b00000000);	// Booster ratio register set ???
    	SdCmd(0b10100000);	// ADC Select (0xa0: Normal, 0xa1:Reverse)
    	SdCmd(0b11001000);	// Common output Mode Set
    	SdCmd(0b10101111);	// Display ON
    	SdCmd(0b10100111);	// Display Normal/Reverse (Permet d'inverser Blanc/noir)
    	SdCmd(0xA4);		// Display all points (0xa4:Normal display mode, 0xa5:display all points)
    }
    
    void SdCmd(int valeur_commande)
    {
    	spi_write(valeur_commande);
    }

  7. #6
    invite66c1ab93

    Re : LCD 132x32 ST7565R

    Bonjour,

    (remplacer writeSPI2)

    Exemple pour envoyer une commande :
    void SdCmd (unsigned char Command)
    {
    GLCD_ComData = 0;
    GLCD_CS = 0;
    writeSPI2 (Command);
    Delay (1);
    GLCD_CS = 1;
    Delay (1);
    }

    Pour envoyer une donnée :
    void SdData (unsigned char DData)
    {
    GLCD_ComData = 1;
    GLCD_CS = 0;
    writeSPI2 (DData);
    Delay (1);
    GLCD_CS = 1;
    Delay (1);
    }

    Avant d'écrire quoi que ce soit, il faut :
    void GOTO_XY (unsigned char x, unsigned char y)
    {
    GOTO_X (x);
    GOTO_Y (y);
    } //Permet de choisir la ligne et la colonne de départ


    void GOTO_X (unsigned char col)
    {
    SdCmd (0x10 | (col >> 4));
    SdCmd (0x00 | (col & 0x0F));

    } //Permet de choisir la colonne de départ


    void GOTO_Y (unsigned char ln)
    {
    SdCmd (0xB0 | (ln & 0x0F));
    } //Permet de choisir la ligne de départ

    Essais d'adapter tout cela et dis moi si tu arrives à afficher un pixel !

    Mickael

  8. #7
    invited8e548c5

    Re : LCD 132x32 ST7565R

    voilà j'ai essayé d'adapter ton code mais toujours rien

    Code:
    #include <16f877A.h>
    #fuses HS, NOWDT, NOPUT, NOBROWNOUT, NOLVP
    #use delay (clock=20000000)
    #use spi (MASTER, BITS=8) 
    
    #define A0 PIN_A0
    #define RESET PIN_A1
    #define CHIP_SELECT PIN_A2
    
    
    
    void lcd_init();
    void SdCmd(unsigned char);
    void SdData(unsigned char);
    void GOTO_XY(unsigned char, unsigned char);
    void GOTO_X(unsigned char);
    void GOTO_Y(unsigned char);
    
    void main(void)
    {	
    	//SPI
    	setup_spi(SPI_MASTER|SPI_CLK_DIV_4);
    
    	lcd_init();
    
    	GOTO_XY(0,0);
    
    	SdData(1);
    }
    
    void lcd_init()
    {
    	output_low(RESET);
    	delay_ms(50);
    	output_high(RESET);
    	delay_ms(100);
    	output_high(CHIP_SELECT);
    	delay_ms(10);
    	output_high(A0);
    	delay_ms(10);
    
    	SdCmd(0b11100010);	// Reset
    	SdCmd(0b10100010);	// set the LCD bias to 1/9th
    	SdCmd(0x23);		// Voltage Regulator internal Resisitor ratio set(the internal resistor divider set to 3 (from 0..7))
    	SdCmd(0x2F);		// Power Control Set( power control, all internal blocks ON )
    	SdCmd(0b00000011);	// Electronic volume Mode set ???
    	SdCmd(0x40);		// go back to the top left of the display
    	SdCmd(0x81);		// Electronic volume Mode set
    	SdCmd(0b11111000);	// Booster ratio Select Mode Set
    	SdCmd(0b00000000);	// Booster ratio register set ???
    	SdCmd(0b10100000);	// ADC Select (0xa0: Normal, 0xa1:Reverse)
    	SdCmd(0b11001000);	// Common output Mode Set
    	SdCmd(0b10101111);	// Display ON
    	SdCmd(0b10100111);	// Display Normal/Reverse (Permet d'inverser Blanc/noir)
    	SdCmd(0xA4);		// Display all points (0xa4:Normal display mode, 0xa5:display all points)
    }
    
    //Exemple pour envoyer une commande :
    void SdCmd(unsigned char command)
    {
    	output_low(A0);
    	output_low(CHIP_SELECT);
    	spi_write(command);
    	delay_ms(10);
    	output_high(CHIP_SELECT);
    	delay_ms(10);
    }
    
    //Pour envoyer une donnee :
    void SdData(unsigned char data)
    {
    	output_high(A0);
    	output_low(CHIP_SELECT);
    	spi_write(data);
    	delay_ms(10);
    	output_high(CHIP_SELECT);
    	delay_ms(10);
    }
    
    //Permet de choisir la ligne et la colonne de depart
    void GOTO_XY (unsigned char x, unsigned char y)
    {
    	GOTO_X (x);
    	GOTO_Y (y);
    }
    
    //Permet de choisir la colonne de depart
    void GOTO_X (unsigned char colonne)
    {
    	SdCmd (0x10 | (colonne >> 4));
    	SdCmd (0x00 | (colonne & 0x0F)); 
    }
    
    //Permet de choisir la ligne de depart
    void GOTO_Y (unsigned char ligne)
    { 
    	SdCmd (0xB0 | (ligne & 0x0F));
    }

  9. #8
    invited8e548c5

    Re : LCD 132x32 ST7565R

    Bonjour,

    J'ai trouvé ce driver et il semblerait qu'il soit fait pour un PIC --> Driver

    Si quelqu'un peut confirmer et me donner deux-trois infos ce serait sympa.

Discussions similaires

  1. alimentation gLCD st7565r
    Par invite2ae27b1f dans le forum Électronique
    Réponses: 1
    Dernier message: 05/10/2009, 17h03
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...