Débuter avec un LCD programmer en, et un pic 18F4520
Répondre à la discussion
Page 1 sur 3 12 DernièreDernière
Affichage des résultats 1 à 30 sur 63

Débuter avec un LCD programmer en, et un pic 18F4520



  1. #1
    Mickl1722

    Débuter avec un LCD programmer en, et un pic 18F4520


    ------

    Voilà.
    J'essai juste de pouvoir afficher un mot, mais rien ne ce passe. La compilation est nickel, mais je ne sais si c'est bien programmé.
    De plus, je me demande, s sous PROTEUS, j'aii bien câblé mon schéma.
    Pourriez-vous m'aider ?
    Code:
    #include <p18f4520.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<delays.h>
    #include<string.h>
    #include<xlcd.h>
    
    #define D_LCD PORTB
    #define D4 PORTB.4
    #define D5 PORTB.5
    #define D6 PORTB.6
    #define D7 PORTB.7
    #define RS PORTB.2
    #define E PORTB.3
    
    void main(void)
    {
    	TRISB = 0b00000000;// Toutes les broches du port B sont en sortie.
    	D_LCD = 0; // Initialisation des variables, mise à zéro des broches du PORTB.
    	OpenXLCD(FOUR_BIT & LINES_5X7 );
    	putrsXLCD( "Hello World" );
    }
    
    void DelayFor18TCY(void)
    {
        Delay10TCYx(2);
    }
    void DelayPORXLCD(void)
    {
     	Delay1KTCYx(15);     //Delai de 15 ms
    }
    void DelayXLCD(void)
    {
     	Delay1KTCYx(20);     //Delai de 20 ms
    }
    Nom : lcd.jpg
Affichages : 485
Taille : 164,1 Ko

    -----

  2. #2
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Es-tu bien certain que les ports que tu utilises soient bien déclarés ainsi dans xlcd.h ?
    Je ne vois pas d'initialisations telles que effacement de l'afficheur et positionnement de X,Y=0,0.
    Pourquoi mettre R/W à la masse, tu te prives de pouvoir surveiller le "busy flag", c'est bien dommage...
    C'est quoi ton compilo? C18 ?
    @+
    Dernière modification par HULK28 ; 28/08/2011 à 23h18.

  3. #3
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520


  4. #4
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Voilà, j'ai changé mon code, mais toujours rien. Je commence à déprimé car je n'ai toujours rien à l'écran.

    Code:
    #include <p18f4520.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<delays.h>
    #include<string.h>
    #include<xlcd.h>
    
    #pragma config OSC = INTIO67	// Internal Oscillator @ 8Mhz with OSC2 at RA6 & OSC1 at RA7
    #pragma config FCMEN = OFF		// Fail Safe Clock Monitor : Disabled.
    #pragma config IESO = OFF		// Internal External Osc. Switch Over : Disabled.
    #pragma config PWRT = OFF		// Power Up Timer : Disabled.
    #pragma config BOREN = OFF 		// Brown Out Reset : Disabled.
    #pragma config WDT = OFF		// Watch Dog Timer : Disabled.
    #pragma config MCLRE = OFF		// MCLRE : Disabled.
    #pragma config PBADEN = OFF		// Port B A/D Enable : Disabled. => sortie numérique sur RESET.
    #pragma config STVREN = OFF		// Stack oVerflow Reset : Disabled.
    #pragma config LVP = OFF		// Low voltage ICSP : Disabled.
    
    #define D_LCD PORTB
    #define D4 PORTBbits.RB4
    #define D5 PORTBbits.RB5
    #define D6 PORTBbits.RB6
    #define D7 PORTBbits.RB7
    #define RS PORTBbits.RB2
    #define E PORTBbits.RB3
    
    
    
    void main(void)
    {
    	TRISB = 0b00000000;// Toutes les broches du port B sont en sortie.
    	D_LCD = 0; // Initialisation des variables, mise à zéro des broches du PORTB.
    	OpenXLCD(FOUR_BIT & LINES_5X7 );
    	
    	SetDDRamAddr(0); // positionne le curseur en x,y
    	fprintf (_H_USER, "fprintf USER\n" ); // vers LCD
    //	putrsXLCD("Hello World");
    	while(1);
    }
    
    void DelayFor18TCY(void)
    {
        Delay10TCYx(2);
    }
    void DelayPORXLCD(void)
    {
     	Delay1KTCYx(15);     //Delai de 15 ms
    }
    void DelayXLCD(void)
    {
     	Delay1KTCYx(20);     //Delai de 20 ms
    }

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

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Je ne vois pas dans ce code d'effacement de l'afficheur après l'init.

    Comment est réglé le contraste (potentiomètre) ?

    Peux-tu poster ton xlcd.h ?

    @+
    Dernière modification par HULK28 ; 30/08/2011 à 14h03.

  7. #6
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Voilà.
    Dans le fichier fournie, il y mon projet sous MPLAB et le compilateur C18, ainsi que le fichier de test sous PROTEUS.
    J'y est également ajouté la bibliothèque xlcd.h comme tu me l'as demandé. Pour info, je ne travaille pas du tout avec PICDEMO.
    Fichiers attachés Fichiers attachés

  8. #7
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Et puis, je ne comprend pas ce que tu veux dire code d'affacement après l'init

  9. #8
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Un afficheur ne devine pas ce que tu veux en faire ni ne prend de décision sur ce qu'il doit faire.
    Après l'init il faut positionner le curseur à 0,0 sans quoi il peut ne pas être visible et mettre ou pas le curseur voyant ou clignotant, enfin il faut effacer l'écran.
    Donc un clear LCD est nécessaire.
    Il faut te documenter un peu sur comment fonctionne un LCD et son mode d'adressage, ses timings, etc.
    D'ici je n'arrive pas à lire ton zip, je regarderais un peu plus tard.

    @+

  10. #9
    paulfjujo

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    bonjour,

    dans la config
    #pragma config PWRT = OFF // Power Up Timer : Disabled.
    #pragma config MCLRE = OFF // MCLRE : Disabled.
    comment est fait le RESET du µP
    il y a un risque de mauvais depart de l'oscillateur , sans un circuit de reset hardware sur MCLRE
    d'autant que PWRT est disabled.
    les timings d'init du LCD peuvent en etre alteres

    Rajouter une bonne tempo apres l'init du LCD , au moins 100mS .

  11. #10
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Je remis le MCLR, mais tout est toujours de marbre.

  12. #11
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Je n'arrive pas à ouvrir ton zip...
    Quelqu'un parvient-il à l'ouvrir ?

  13. #12
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Tu es sur, moi je l'ouvre sans problème.
    Tu veux que j’essaie l'extension .7z ?

  14. #13
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Oui il me met archive corrompue...

  15. #14
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    le .7z ne peux être ms en pièce jointe, alors j'ai reconstruit le zip en espérant que cela fonctionne.
    Fichiers attachés Fichiers attachés

  16. #15
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Oui là c'est bon, je vais regarder et je te tiens au courant.

  17. #16
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Bon ben la réponse est dans le fichier XLCD.h

    Dans ce fichier est déclaré:

    Code:
    #define RW_PIN   LATBbits.LATB6   		/* PORT for RW */
     #define TRIS_RW  TRISBbits.TRISB6    	/* TRIS for RW */
    
     #define RS_PIN   LATBbits.LATB5   		/* PORT for RS */
     #define TRIS_RS  TRISBbits.TRISB5    	/* TRIS for RS */
    
     #define E_PIN    LATBbits.LATB4  		/* PORT for D  */
     #define TRIS_E   TRISBbits.TRISB4    	/* TRIS for E  */
    Donc pas conforme avec le schéma que tu as posté.
    Il faut corriger le schéma en respectant ces affectations.
    Donc réaffecter également les 4 bits data D4~D7.
    Ou encore faire la réaffectation dans ce fichier et recompiler.
    @+

  18. #17
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Et bien sur dans ton code principal tu peux virer les affectations des commandes du LCD et des datas puisqu'elles sont déja déclarées dans XLCD.h

  19. #18
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Voici mes différents changements:
    xlcd.h
    Code:
    /* DATA_PORT defines the port to which the LCD data lines are connected */
     #define DATA_PORT      		PORTB
     #define TRIS_DATA_PORT 		TRISB
    
    /* CTRL_PORT defines the port where the control lines are connected.
     * These are just samples, change to match your application.
     */
     #define RW_PIN   LATBbits.LATB2   		/* PORT for RW */
     #define TRIS_RW  TRISBbits.TRISB2    	/* TRIS for RW */
    
     #define RS_PIN   LATBbits.LATB1   		/* PORT for RS */
     #define TRIS_RS  TRISBbits.TRISB1    	/* TRIS for RS */
    
     #define E_PIN    LATBbits.LATB3  		/* PORT for D  */
     #define TRIS_E   TRISBbits.TRISB3    	/* TRIS for E  */
    LCD.h
    Code:
    #include"xlcd.h"
    ...
    //#define D_LCD PORTB
    #define D4 PORTBbits.RB4
    #define D5 PORTBbits.RB5
    #define D6 PORTBbits.RB6
    #define D7 PORTBbits.RB7
    ...
    TRISB = 0b11110000;// Les 4 bits de poids fort configurer en sortis.
    PORTB = 0b00000000; // Initialisation des variables, mise à zéro des 4 broches de poid faible du PORTB.
    J'aimerais que tu me valides mes changements, parce que malgré cela, je n'ai toujours rien.
    Mon PORTB est bien configuré ?
    Dernière modification par Mickl1722 ; 31/08/2011 à 12h26.

  20. #19
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Il ne faut pas mettre en commentaire #define D_LCD PORTB puisqu'il définit l'affectation du portB.

  21. #20
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Code:
    TRISB = 0b11110000;// Les 4 bits de poids fort configurer en sortie.
    PORTB = 0b00000000; // Initialisation des variables, mise à zéro des 4 broches de poid faible du PORTB.
    Non !

    TRISB = 0b11110000 signifie que les bits de poids FORT sont dirigés en ENTREE, à 0 ils sont en sortie !

    TRISB = 0b(b7b6b5b4b3b2b1b0)
    Dernière modification par HULK28 ; 31/08/2011 à 12h57.

  22. #21
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Il faut donc que tu mettes aussi en sortie b1, b2, et b3 car tu dois piloter aussi R/W, E, et RS.

    Donc TRISB = 1 ou 0b00000001 ce qui revient au même.

    soit:

    Code:
    PORTB = 0;
    TRISB = 1;

  23. #22
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    J'ai fait les retouche appropriés, mais toujours rien sur mon écran lcd.
    Est ce que mon initialisation est bonne ?

  24. #23
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Tu n'as pas de messages d'erreurs ou de warning à la compilation ?

    Si j'étais toi je ferais un montage sur une bête plaque veroboard.

    PS: ton quartz il n'apparait pas sur ton schéma, met à jour le schéma complet et reviens ici avec pour continuer la discussion.
    Je vais regarder de plus près ton code.

    @+
    Dernière modification par HULK28 ; 31/08/2011 à 13h35.

  25. #24
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Mon quartz ? Mais j'utilise l'horloge interne non? Normalement, elle est de 4MHz.

  26. #25
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Essaye ça, j'ai rien testé.
    Il faut utiliser le "busy flag" donc ENLEVER R/W de la masse et le mettre sur un port du µC pour le controler (je crois avoir vu que tu lui avais déjà trouver une place sur le port B).

    Code:
    #include <p18f4520.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<delays.h>
    #include<string.h>
    #include<xlcd.h>
    
    PORTB = 0;
    TRISB = 1;
    
    void main(void)
    {
    
       	
    	OpenXLCD(FOUR_BIT & LINES_5X7 );          
               WriteCmdXLCD(0x80);
               while(BusyXLCD());
               WriteCmdXLCD(DOFF & CURSOR_OFF & BLINK_OFF);
               while(BusyXLCD());
               WriteCmdXLCD( 0x01); //Efface l'ensemble de la mémoire de donnée. Ramène le curseur en position « home », à l'adresse 00.
               while(BusyXLCD());
               WriteCmdXLCD(DON);
               while(BusyXLCD());
    	putrsXLCD( "Hello World" );
    }
    
    void DelayFor18TCY(void)
    {
        Delay10TCYx(2);
    }
    
    
    
    void DelayXLCD(void)
    {
     	Delay1KTCYx(20);     //Delai de 20 ms
    }
    
    unsigned char BusyXLCD(void)
    {
            RW_PIN = 1;                     // Set the control bits for read
            RS_PIN = 0;
            DelayFor18TCY();
            E_PIN = 1;                      // Clock in the command
            DelayFor18TCY();
    
            // 4-bit interface
            if( DATA_PORT & 0x80 )
             {
                    E_PIN = 0;              // Reset clock line
                    DelayFor18TCY();
                    E_PIN = 1;              // Clock out other nibble
                    DelayFor18TCY();
                    E_PIN = 0;
                    RW_PIN = 0;          
                    return 1;              
            }
            else                            // Busy bit is low
            {
                    E_PIN = 0;              // Reset clock line
                    DelayFor18TCY();
                    E_PIN = 1;              // Clock out other nibble
                    DelayFor18TCY();
                    E_PIN = 0;
                    RW_PIN = 0;          // Reset control line
                    return 0;               // Return FALSE
            }
    
    }
    Dernière modification par HULK28 ; 31/08/2011 à 14h47.

  27. #26
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Citation Envoyé par Mickl1722 Voir le message
    Mon quartz ? Mais j'utilise l'horloge interne non? Normalement, elle est de 4MHz.
    Alors pourquoi je lis ça sur ton post en page 1 ?

    #pragma config OSC = INTIO67 // Internal Oscillator @ 8Mhz with OSC2 at RA6 & OSC1 at RA7

  28. #27
    invite03481543

    Revois tout ça tranquillement et vérifie bien tout ce que tu postes.

    Il faut d'abord être bien sur du hard et des bits de config selon ce que tu as définit dans le projet, sans quoi on va "brûler le soleil" à cause de quelques "détails" idiots.

    Code:
    /* #define UPPER */
    Je vois ce truc dans XLCD.h commenté donc inactif, vu que tu utilises les 4 bits supérieurs je suggère de virer les commentaires pour essayer, je trouve que c'est pas très limpide cette bibliothèque...
    Il faut évidemment recompiler tout.
    @+
    Dernière modification par HULK28 ; 31/08/2011 à 14h59. Motif: Plus compact

  29. #28
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Quand tu auras testé, si ça marche toujours pas tu me postes ton schéma à jour et ton code à jour (celui que tu auras testé).
    @+

  30. #29
    Mickl1722

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    C'est la bibliothèque interne du MC18 que j'ai installé sur MPLAB.
    Lorsque je change quelque chose dans cette bibliothèque, il faut la compilé avant de compiler le projet, ou tout est compilé d'un seul coup avec le projet.
    J'ai essayé ton programme. Mis à part la compilation, je n'ai que des warnings à la simulation.

  31. #30
    invite03481543

    Re : Débuter avec un LCD programmer en, et un pic 18F4520

    Bon, tu en est où ?

    Dans une étude ou un développement de programme il est très rare que tout fonctionne du premier coup sans avoir à faire la moindre retouche.
    Un bon principe général est d'avoir de la méthode et d'avancer pas à pas en validant au fur et à mesure pour ne pas avoir à y revenir après coup.

    Si tu as des warnings il est important d'en tenir compte, car même si ça ne provoque pas d'erreur détectée par le compilateur il y a de fortes chances que ça ne marche pas derrière, vu que le compilateur est bête et méchant, tant qu'il peut compiler il compile même des conneries dans le programme...

    Donc fait voir ces fameux warnings pour qu'on avance.
    Je te rappelle également qu'il me faut ton schéma mis à jour et le dernier code que tu as compilé.

    @+

Page 1 sur 3 12 DernièreDernière

Discussions similaires

  1. programmer les pic avec CCs
    Par karim3181 dans le forum Électronique
    Réponses: 1
    Dernier message: 18/03/2007, 15h59
  2. Réponses: 0
    Dernier message: 18/03/2007, 15h43
  3. probleme avec convertisseur,pic et LCD
    Par invite817b2e6f dans le forum Électronique
    Réponses: 4
    Dernier message: 30/01/2007, 14h16
  4. programmer des PIC avec un psion
    Par invite39462866 dans le forum Électronique
    Réponses: 15
    Dernier message: 18/10/2006, 06h37
  5. Débuter à programmer en java
    Par invite0b127ea6 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 20/09/2006, 16h35
Découvrez nos comparatifs produits sur l'informatique et les technologies.