Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW
Répondre à la discussion
Page 1 sur 3 12 DernièreDernière
Affichage des résultats 1 à 30 sur 72

Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW



  1. #1
    Fernando_86

    Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW


    ------

    Bonjour,

    Je suis nouveau sur ce forum donc bonjour à tous. Je possédais une carte qui ne fonctionne plus avec un pic 16f877 (message posté en octobre). J'ai récupéré depuis peu une carte avec un pic 16f876 et un LCD NHD‐C0220AZ‐FSW‐FTW. Je suis débutant en programmation de PIC mais je souhaiterais pouvoir commencer par écrire sur ce LCD. J'utilise Mplab IDE 8.92 et le compilateur Hi-Tech Lite 9.83. Sur cette carte, le micro était programmé en basic mai je souhaiterais le faire en C mais sans succès pour le moment. Les caractéristiques sont:
    DATA B0, B1, B2 et B3
    E B4
    RS B5
    Backlight C2
    J'ai écrit ce code (ci_joint) mais je ne sais plus quoi tester pour m'en sortir. Pouvez-vous m'aider ou me donner des pistes ? Je vous remercie par avance.

    Code:
    //---------------------------------E/S et variables generales--------------------- 
    
    #include <htc.h>
    
    
    #include "pic.h"
    #include "pic16f876.h"
    
    
    
    
    //-------------------------------Déclaration de fonction-------------------------
    void init_PIC(void);
    
      
    
    void lcd_init(void);
    void lcd_write(unsigned char c);
    void lcd_clear(void);
    void lcd_puts(const char * s);
    void lcd_putch(char c);
    void lcd_goto(unsigned char pos);
    
    
    
    
    
    //-------------------------------Définition des I/O------------------------------
    
    #define RT1 RA2
    #define LCD_DATA	PORTB
    
    #define LCD_EN RB4
    #define	LCD_RS RB5
    
    
    #define	LCD_STROBE()	((LCD_EN = 1),(LCD_EN=0))
    
    
    void main(void)
    {
    	init_PIC();
    
    	RT1=1;
    
    	__delay_ms(1000);
    
    	lcd_init();
    	
    
    	for(;;)
    	{
    		lcd_goto(0);	// select first line
    		lcd_puts("Hello world");
    	}
    
    }
    
    
    void lcd_init()
    {
    	char init_value;
    
    	init_value = 0x3;
    
    
    	LCD_RS = 0;
    	LCD_EN = 0;
    	//LCD_RW = 0;
    	
    	__delay_ms(15);	// wait 15mSec after power applied,
    	LCD_DATA	 = init_value;
    	LCD_STROBE();
    	__delay_ms(5);
    	LCD_STROBE();
    	__delay_us(200);
    	LCD_STROBE();
    	__delay_us(200);
    	LCD_DATA = 2;	// Four bit mode
    	LCD_STROBE();
    
    	lcd_write(0x28); // Set interface length
    	lcd_write(0xF); // Display On, Cursor On, Cursor Blink
    	lcd_clear();	// Clear screen
    	lcd_write(0x6); // Set entry Mode
    }
    
    
    
    void lcd_write(unsigned char c)
    {
    	__delay_us(40);
    	LCD_DATA = ( ( c >> 4 ) & 0x0F );
    	//LCD_DATA = ( ( c >> 4 ) & 0xFE );	
    	LCD_STROBE();
    	LCD_DATA = ( c & 0x0F );
    	//LCD_DATA = ( c & 0xFE );
    	LCD_STROBE();
    }
    
    
    
    
    void lcd_clear(void)
    {
    	LCD_RS = 0;
    	lcd_write(0x1);
    	__delay_ms(2);
    }
    
    
    
    void lcd_puts(const char * s)
    {
    	LCD_RS = 1;	// write characters
    	while(*s)
    	lcd_write(*s++);
    }
    
    
    void lcd_putch(char c)
    {
    	LCD_RS = 1;	// write characters
    	lcd_write( c );
    }
    
    void lcd_goto(unsigned char pos)
    {
    	LCD_RS = 0;
    	lcd_write(0x80+pos);
    }
    
    
    
    
    void init_PIC(void)
    {
    //	OSCCON = 0b01010110; // 250kHz
    
    	ADCON1=0b00000100;
    
    	INTCON=0b10000000;
    
    
    	TRISA2=0;
    	RA2=1;
    
    	TRISC3=1;
    
    	TRISC2=0;
    	RC2=1;
    
    	//PORTA = 0;
    	//TRISA = 0b00000000; // RA0 = AN0 => Entrée Ana => TRISA.0 = 1
    
    	PORTB = 0;
    	TRISB = 0b00000000;
    
    
    
    	//PORTC = 0;
    	//TRISC = 0b01000000; 
    
    	//PORTD = 0;
    	//TRISD = 0b11110000; 
    
    }

    -----
    Dernière modification par Fernando_86 ; 20/02/2014 à 14h46.

  2. #2
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Bonjour,

    J'ai avancé sur mon problème. Il y avait un relais à enclencher pour démarrer le micro et le LCD donc mon LCD s'allume avec RC2 relié au backlight. Par contre, j'ai un curseur qui clignote en haut à gauche de la première ligne et rien ne s'affiche. D'après le code que j'avais posé dans mon précédent message, pensez-vous qu'il y a une erreur dans le code, dans l'initialisation du LCD ? Quels sont les pistes à suivre pour débugger. Je vous remercie par avance.

  3. #3
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Bonjour/bonsoir est bienvenu sur FUTURA;

    Il y a quelque erreurs au niveau d'ecriture sur lcd :

    Code:
    void lcd_init()
    {
    	char init_value;
            int i;
    	init_value = 0x3;
    
    
    	LCD_RS = 0;
    	LCD_EN = 0;
    	//LCD_RW = 0;
    	for(i=0;i<=2;++i) 
    	{
    		LCD_DATA	 = init_value;
                    LCD_EN = 1;
                    Nop();
                    LCD_EN=0;
            __delay_ms(4);
    	}
    
    
    	LCD_DATA = 2;	// Four bit mode
    	LCD_EN = 1;
            Nop();
            LCD_EN=0;
            __delay_ms(2);
    
    
    	lcd_write(0x28); // Set interface length
    	lcd_write(0x0C); // Display On, Cursor On, Cursor Blink
    	lcd_clear();	// Clear screen
    	lcd_write(0x06); // Set entry Mode
    }
    
    
    
    void lcd_write(unsigned char c)
    {
            
    	__delay_us(40);
    	LCD_DATA = (( c & 0xF0 ) >>4  ) ; // on envoit le bit fort en premier MSB
    	//LCD_STROBE();
            LCD_EN = 1;
            Nop();
            LCD_EN=0;
    	LCD_DATA = ( c & 0x0F ); // LSB
    	__delay_ms(1);
    }

  4. #4
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Je te remercie pour ta réponse rapide mais la fonction Nop() n'est pas reconnu à la compilation.

    Message d'erreur:
    Error [499] ; 0. symbole non défini:_Nop(retard_v0.1.obj)

    J'ai essayé en commentant ces trois lignes mais pas plus de réussite ... A quoi sert cette fonction ? Est-elle utile ? Ne manque-t-il une bibliothèque pour la compilation ?

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

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    essaye avec ceci :

    asm("nop");

  7. #6
    extremgear

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    quoique j'ai un doute finalement , ton nop() renvoie peut être à une fonction qui execute plusieurs nop .

    normalement les examples fournis avec ce compilos fonctionne bien et sans modif particuliéres pour le pilotage des lcd.

  8. #7
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Citation Envoyé par Fernando_86 Voir le message
    Je te remercie pour ta réponse rapide mais la fonction Nop() n'est pas reconnu à la compilation.

    Message d'erreur:
    Error [499] ; 0. symbole non défini:_Nop(retard_v0.1.obj)

    J'ai essayé en commentant ces trois lignes mais pas plus de réussite ... A quoi sert cette fonction ? Est-elle utile ? Ne manque-t-il une bibliothèque pour la compilation ?
    Nop, c'est une fonction de delay. Genre un retard de quelque micro-second, pour laisser le temps au LCD de rafraichir la commande recu .

    Essaye la fonction de extremgear. sinon mets ça en tête #define Nop() {_asm nop _endasm}
    Si ça marche pas, mets à la place une fonction _delay avec 50 micro secondes.

  9. #8
    extremgear

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    je viens de regarder chez moi la librairie exécute 2: asm("nop"); la tu ou as ta fonction nop();/

  10. #9
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Bonjour,

    Je viens d'essayer la modification pour la fonction nop(): c'est bon ca compile par contre le LCD n'affiche plus rien alors qu'avant avec le code que j'avais mis dans mon premier post le LCD affichait 1 ligne de 20 carrés noirs et pas de texte ... Je suis vraiment perdu et je ne sais pas comment avancer. Auriez-vous des idées ? Dois-je repartir de mon code de départ ?

  11. #10
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Je précise également que si j'appelle seulement la fonction d'initialisation du LCD (lcd_init()) alors j'ai un curseur en haut à gauche qui clignote ... c'est peut être la façon d'écrire qui cloche ...

  12. #11
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Code:
     void lcd_enable(char c) 
    	{
          LATB = (LATB &0xFFF0) |(c); //  Souviens  toi, LAT pour écrire ,  et PORT pour lire ;)
          LCD_EN = 1;
          Nop(); // delai 230us
          LCD_EN = 0;
          __delay_ms(1);
     	}
    
    void lcd_send(char RegSelect, char c){    //  regselect = 1 ,  pour envoyer une donné,  regselect = 0 , envoyer une instruction
          LCD_RS = RegSelect;                     // RS=0
          lcd_enable((c & 0xF0) >> 4);       //Envoie des 4 bits MSB
          lcd_enable(c & 0x0F);                 // Envoie des 4 bits LSB
    	}
    
    void lcd_puts(char *buffer)
    	{
    	while(*buffer != '\0')            
        lcd_send(DATA,*buffer++);  
     	}
    
    
    
    void lcd_init()   // ------------  initialisation LCD
    	{
      	unsigned char i;
        char LCD_INIT_STRING[4] = {0x28,0x0C,0x01,0x06};   
    // 0x28: Function set: 4bits, 2 lines and matrice de  5x8
    // 0x0C: Set display 
    // 0x01: Clear display
    // 0x06: Entry mode set, increment & scroll left
    
    	LCD_RS = 0;  //0
    	LCD_RW = 0;   //0 <------  connecte  R/W du LCD avec une  pin que tu initialises avec cette variable
    	LCD_EN  =0;     //0
    
    	for(i=0;i<=2;++i) 
    	{
    		lcd_enable(3);
            __delay_ms(4);
    	}
    
    	lcd_enable(2);
    	__delay_ms(2);
    
        for(i=0;i<=3;++i)
    	{
    		lcd_send(INSTRC,LCD_INIT_STRING[i]);
    		__delay_ms(1); 
    	}
    }
    Note: tu dois relier la pin R/W, même si c'est pas utiliser

  13. #12
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Malheureusement, j'ai encore des problèmes de compilation:
    "LATB" indefini
    "INSTRC" indefini
    "DATA" indefini

    Pour DATA je l'ai remplacé par LCD_DATA comme dans mon code précédent mais pour les autres je ne vois pas comment les déclarer ...

  14. #13
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Sinon pour LCD_RW il est déjà relié physiquement à la masse sur le circuit électronique donc je peux rien y faire.

  15. #14
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Remplace INSTRUC par 0, et DATA par 1. LATB par LCD_DATA .

  16. #15
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Je viens d'essayer ce que tu m'as envoyé et sans succès. Je vais vous mettre le code entier que je compile car il se peux que j'ai fais une erreur mais là le LCD n'affiche vraiment rien (même psa des carrés noirs si je laisse seulement la fonction initialisation). Je comprend le code sauf la fonction lcd_send qui me semble différente de ce que j'avais avant. Je suis vraiment perdu. Est ce que le LCD que j'utilise est particulier ? Y-a-t-il des aberrations dans mon code ?

    Code:
    //---------------------------------E/S et variables generales--------------------- 
    
    #include <htc.h>
    
    
    
    #include "pic.h"
    #include "pic16f876.h"
    
    #define _XTAL_FREQ 8000000
    
    
    //-------------------------------Déclaration de fonction-------------------------
    void init_PIC(void);
    void tempo500us_timer0(void);
      
    void lcd_init();
    void lcd_enable(char c);
    void lcd_send(char RegSelect, char c);
    void lcd_puts(const char *buffer);
    
    //-------------------------------Définition des I/O------------------------------
    #define RT1 RA2
    
    
    #define LCD_DATA	PORTB
    
    #define LCD_EN RB4
    #define	LCD_RS RB5
    
    
    void main(void)
    {
    	init_PIC();
    
    
    	__delay_ms(1000);
    
    	lcd_init();
    	
    
    	lcd_puts("Test LCD");
    	__delay_ms(1000);
    
    	for(;;){}
    
    }
    
    
    void init_PIC(void)
    {
    //	OSCCON = 0b01010110; // 250kHz
    
    	ADCON1=0b00000100;  // port A2 en digital
    
    	INTCON=0b10000000;  // pas d'interruption
    
    
    	TRISA = 0b00000000;
    	
    	RA2=1; // relai pour alimentation LCD
    
    
    	TRISC = 0b00000000;
    	RC2=1; // backlight
    
    
    	PORTB = 0;
    	TRISB = 0b00000000;
    }
    
    
    
    void lcd_enable(char c) 
    	{
          LCD_DATA = (LCD_DATA &0xFFF0) |(c); //  Souviens  toi, LAT pour écrire ,  et PORT pour lire ;)
          LCD_EN = 1;
          asm("nop"); // delai 230us
          LCD_EN = 0;
          __delay_ms(1);
     	}
    
    void lcd_send(char RegSelect, char c){    //  regselect = 1 ,  pour envoyer une donné,  regselect = 0 , envoyer une instruction
          LCD_RS = RegSelect;                 // RS=0
          lcd_enable((c & 0xF0) >> 4);       //Envoie des 4 bits MSB
          lcd_enable(c & 0x0F);              // Envoie des 4 bits LSB
    	}
    
    void lcd_puts(const char *buffer)
    	{
    	while(*buffer != '\0')            
        lcd_send(0,*buffer++);  
     	}
    
    
    
    void lcd_init()   // ------------  initialisation LCD
    	{
      	unsigned char i;
        char LCD_INIT_STRING[4] = {0x28,0x0C,0x01,0x06};   
    // 0x28: Function set: 4bits, 2 lines and matrice de  5x8
    // 0x0C: Set display 
    // 0x01: Clear display
    // 0x06: Entry mode set, increment & scroll left
    
    	LCD_RS = 0;  //0
    	//LCD_RW = 0;   //0 <------  connecte  R/W du LCD avec une  pin que tu initialises avec cette variable
    	LCD_EN  =0;     //0
    
    	for(i=0;i<=2;++i) 
    	{
    		lcd_enable(3);
            __delay_ms(4);
    	}
    
    	lcd_enable(2);
    	__delay_ms(2);
    
        for(i=0;i<=3;++i)
    	{
    		lcd_send(0,LCD_INIT_STRING[i]);
    		__delay_ms(1); 
    	}
    }

  17. #16
    extremgear

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    normalement tu n'as pas à inclure ces fichiers dans le code :

    Code:
    #include "pic.h"
    #include "pic16f876.h"
    le fichier #include <htc.h> le fait dèjà.
    même si ça ne changera normalement rien à ton problème.

    es tu sur de configurer les ports qui sont connectés physiquement au lcd ?

  18. #17
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Oui j ai vérifié les connectiques. Elles correspondent à ce que j ai mis dans le premier message de cette conversation. Est ce que le code fonctionne correctement chez vous ? Vous n avez pas de problème d affichage sur le LCD ? Sachant qu il m affiche rien, il doit y avoir un problème dans l initialisation ?

  19. #18
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Enlève les 2 "//" de cette ligne //LCD_RW = 0; //0 <------ connecte R/W du LCD avec une pin que tu initialises avec cette variable


    Je le vois pas déclarer ton LCD_RW ??

    Vérifie dans le datasheet du LCD si t'as ce controleur : HD44780

    Note: le code que je t'ai passé fonctionne parfaitement avec PIC24 & DsPIC33, pour 16x2 et 20x4 ( IDE v8.92 )
    Dernière modification par spown ; 23/02/2014 à 21h40.

  20. #19
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Pour le contrôleur, j'ai trouvé ça dans la doc:

    Built‐in NT7605 controller

    Est-ce que cela te dis quelque chose ? Et ce compatible avec ton code ?

  21. #20
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Non , c'est pas les mêmes. Surement c'est l'initialisation qui échoue. As tu le datasheet ?

  22. #21
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    J'ai ca je sais pas si ca peut aidé
    Images attachées Images attachées

  23. #22
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Code:
    //---------------------------------E/S et variables generales--------------------- 
    
    #include <htc.h>
    
    
    
    #include "pic.h"
    #include "pic16f876.h"
    
    #define _XTAL_FREQ 8000000
    
    
    //-------------------------------Déclaration de fonction-------------------------
    void init_PIC(void);
    void tempo500us_timer0(void);
      
    void lcd_init();
    void lcd_enable(char c);
    void lcd_send(char RegSelect, char c);
    void lcd_puts(const char *buffer);
    
    //-------------------------------Définition des I/O------------------------------
    #define RT1 RA2
    
    
    #define LCD_DATA	PORTB
    #define LCD_EN RB4
    #define	LCD_RS RB5
    
    
    void main(void)
    {
    	init_PIC();
    	__delay_ms(500);
    
    	lcd_init();
    	lcd_puts("Test LCD");
    	__delay_ms(500);
    
    	for(;;){}
    
    }
    
    
    void init_PIC(void)
    {
    //	OSCCON = 0b01010110; // 250kHz
    	ADCON1=0b00000100;  // port A2 en digital
    	INTCON=0b10000000;  // pas d'interruption
    	TRISA = 0b00000000;
    	RA2=1; // relai pour alimentation LCD
    	TRISC = 0b00000000;
    	RC2=1; // backlight
    	PORTB = 0;
    	TRISB = 0b00000000;
    }
    
    
    
    void lcd_enable(char c) 
    	{
          LCD_DATA = (LCD_DATA &0xFFF0) |(c); //  Souviens  toi, LAT pour écrire ,  et PORT pour lire ;)
          LCD_EN = 1;
          asm("nop"); // delai 230us
          LCD_EN = 0;
          __delay_ms(1);
     	}
    
    void lcd_send(char RegSelect, char c){    //  regselect = 1 ,  pour envoyer une donné,  regselect = 0 , envoyer une instruction
          LCD_RS = RegSelect;                 // RS=0
          lcd_enable((c & 0xF0) >> 4);       //Envoie des 4 bits MSB
          lcd_enable(c & 0x0F);              // Envoie des 4 bits LSB
    	}
    
    void lcd_puts(const char *buffer)
    	{
    	while(*buffer != '\0')            
        lcd_send(1,*buffer++);  
     	}
    
    
    
    void lcd_init()   // ------------  initialisation LCD
    	{
    
    
    	LCD_RS = 0;  //0
    	LCD_RW = 0;   //0 <------  connecte  R/W du LCD avec une  pin que tu initialises avec cette variable
    	LCD_EN  =0;     //0
    
    	lcd_enable(2);
    	lcd_send(0,0x28);
    	__delay_ms(10);
    	lcd_send(0,0x0C);
    	__delay_ms(10);
    	lcd_send(0,0x01);
    	__delay_ms(10);
    	lcd_send(0,0x02);
    	__delay_ms(10);
    }
    Note : vérifie que t'as bien relier RB0 ~ Rb3 avec la pin DB4~DB7 du LCD

    ET pour la dernier fois connecte R/W de ton LCD avec une pin de ton uC et déclares la pour cette variable "LCD_RW", comme tu as fait pour LCD_EN.

  24. #23
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Ouf, ça fonctionne ... J'ai également repris la fonction pour positionner mon texte où je voulais sur le LCD. Je te remercie beaucoup de ton aide et de ta patience. Je vais pouvoir continuer mon projet. Encore merci.

  25. #24
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Pour LCD_RW, sur la carte que je possède, elle est relié à la masse physique du circuit. Est ce vraiment important de la relier au micro ? Quel intérêt si je fais que écrire sur le LCD ?

  26. #25
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    R/W devrait être à 0 durant l'initialisation et aussi durant l’écriture des données. Elle sert pour écrire/lire dans le registre du contrôle et d’instruction. C'est pas important qu'elle sera relier au PIC ( dans ton cas). Mais elle devrait pas rester "flottante = dans l'air" . Donc C'est correcte si elle est reliée à la masse

    Si t'as d'autres questions n’hésites pas. Bon courage

  27. #26
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Merci à toi de ta disponibilité. Effectivement R/W est relié à la masse et n'est donc pas flottant. Des questions, j'en ai des milliers. mon plus gros problème était l'écrire sur le LCD. Dans mon code, tu as vu que RC2 était mis à l'état 1. En réalité je voudrais pouvoir le faire varier pour régler la luminosité du LCD (car il est relié au backlight de celui_ci). Je pense qu'il faut que j'utilise le mode PWM. Est ce que je suis sur la bonne voie ? Sinon j'ai un codeur sur une entrée du port A et je voudrais qu'il fasse varier la luminosité du LCD en jouant sur le mode PWM de CCP1. Est ce que cela est réalisable ?

  28. #27
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Citation Envoyé par Fernando_86 Voir le message
    Merci à toi de ta disponibilité. Effectivement R/W est relié à la masse et n'est donc pas flottant. Des questions, j'en ai des milliers. mon plus gros problème était l'écrire sur le LCD. Dans mon code, tu as vu que RC2 était mis à l'état 1. En réalité je voudrais pouvoir le faire varier pour régler la luminosité du LCD (car il est relié au backlight de celui_ci). Je pense qu'il faut que j'utilise le mode PWM. Est ce que je suis sur la bonne voie ? Sinon j'ai un codeur sur une entrée du port A et je voudrais qu'il fasse varier la luminosité du LCD en jouant sur le mode PWM de CCP1. Est ce que cela est réalisable ?
    Est ce que tu as une pin pour faire on/off de la LED du LCD ? si oui, tu peux appliquer le principe du PWM pour la varier. ==> http://pcbheaven.com/circuitpages/PW...trast_Control/

    NOTE: Le schéma dans le lien est pour varier la contraste

  29. #28
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Sur le LCD que je possède il y a un backlight avec 2 pin supplémentaires par rapport à un LCD classique pour le piloter. La sortie CCP1 est déjà reliée à celui-ci c'est pourquoi dans mon code je l'initialise à RC2=1 (éclairement max). Je dois donc générer un signal avec rapport cyclique variable sur cette sortie pour le faire varier, c'est ce que j'ai compris. Reste à paramétrer cette sortie du micro en PWM.

  30. #29
    spown

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Citation Envoyé par Fernando_86 Voir le message
    Sur le LCD que je possède il y a un backlight avec 2 pin supplémentaires par rapport à un LCD classique pour le piloter. La sortie CCP1 est déjà reliée à celui-ci c'est pourquoi dans mon code je l'initialise à RC2=1 (éclairement max). Je dois donc générer un signal avec rapport cyclique variable sur cette sortie pour le faire varier, c'est ce que j'ai compris. Reste à paramétrer cette sortie du micro en PWM.
    Au boulot pour le PWM.

  31. #30
    Fernando_86

    Re : Pic 16f876 et LCD NHD‐C0220AZ‐FSW‐FTW

    Rebonjour,

    Je reviens sur ce forum car j'ai un problème par rapport à mon code précédent. J'arrive à écrire sur le LCD (ouf !!! et merci Spown) mais je me heurte à un nouveau problème d'affichage ou de fonctionnement de mon code.

    Code:
    void main(void)
    {
    	unsigned char i;
    
    	i=0;
    	//__delay_ms(1000);
    
    	init_PIC();
    
    	RELAY=1;
    
    	__delay_ms(1000);
    
    	lcd_init();
    	
    
    	lcd_goto(0);	// select first line
    	lcd_puts("TITRE");
    	lcd_goto(0x40);	// Select second line
    	lcd_puts("  version 1.0");
    
    	__delay_ms(4000);
    
    	lcd_clear();
    	
    	while(1) 
    	{
      		GestionBouton(i);            //on lance les boucles de gestion
      		GestionAffichage(i);
    	}
    
    
    }
    Dans ce code, je voudrais que le titre s'affiche 4s et ensuite que le programme boucle sur les fonctions GestionBouton et GestionAffichage. En réalité le programme boucle sur la fonction main. Est ce normal ? Je m'explique: Il affiche le titre, efface l'écran et recommence .... Est ce que j'utilise les bonnes fonctions pour réaliser un démarrage de programme puis affichage d'un menu, etc ...

Page 1 sur 3 12 DernièreDernière

Discussions similaires

  1. pic 16f876 + RS 232
    Par khalil.elaskri dans le forum Électronique
    Réponses: 8
    Dernier message: 01/06/2013, 15h28
  2. Pic 16f876
    Par ksing dans le forum Électronique
    Réponses: 1
    Dernier message: 22/05/2013, 13h01
  3. pic 16f876
    Par khalil.elaskri dans le forum Électronique
    Réponses: 8
    Dernier message: 19/03/2013, 16h40
  4. pic 16f876
    Par invite6568e6cf dans le forum Électronique
    Réponses: 2
    Dernier message: 21/05/2006, 18h19
  5. Pic 16f876
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 22/04/2006, 13h49
Découvrez nos comparatifs produits sur l'informatique et les technologies.