Modifier PORT xlcd.h
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Modifier PORT xlcd.h



  1. #1
    invitec054e296

    Modifier PORT xlcd.h


    ------

    Bonjour à tous,

    Après avoir suivi les exemples des cours aix-mrs des pic18 et des LCD j'ai réussi à utiliser l'ecran sur les ports A.
    Mais je souhaite modifier l'emplacement de l'ecran et le mettre sur les ports D.

    J'ai donc modifier le header xlcd.h tel que :
    Code:
    /* DATA_PORT defines the port to which the LCD data lines are connected */
     #define DATA_PORT      		PORTD
     #define TRIS_DATA_PORT 		TRISD
    
    /* CTRL_PORT defines the port where the control lines are connected.
     * These are just samples, change to match your application.
     */
     #define RW_PIN   LATDbits.LATD6   		/* PORT for RW */
     #define TRIS_RW  DDRDbits.RD6    	/* TRIS for RW */
    
     #define RS_PIN   LATDbits.LATD5   		/* PORT for RS */
     #define TRIS_RS  DDRDbits.RD5    	/* TRIS for RS */
    
     #define E_PIN    LATDbits.LATD4  		/* PORT for D  */
     #define TRIS_E   DDRDbits.RD4    	/* TRIS for E  */
    Je souhaite garder le header xlcd.h d'origine et ne pas le modifier que pour le pic que j'utilise. (recompiler pour tous les pics j'en ai pour 48h non stop)
    Pour cela j'ai essayé quelques méthodes trouvées avec google comme:
    - Mettre dans le workspace tous les fichiers .C qui se trouve dans src\pmc_common\XLCD et le fichier xlcd.h modifié
    - Compiler le fichier xlcd.h modifié avec Mplab et ensuite creer une librairie xlcd.lib avec la commande dos et mplib.exe et de mettre ce xlcd.lib dans le workspace

    Bref avec la simulation sur ISIS rien ne s'affiche... alors que sur les ports A c'etait bon.

    Voici mon code source que j'ai très peu modifié pour passer des ports A aux ports D

    Code:
    // CD 01/2005
    // test printf sur PICDEM2+ et MCC18 v2.40
    #include <p18f452.h>
    #include <stdio.h> 		// printf
    #include"C:\Users\rastoll\Desktop\test\Modification xlcd\xlcd.h"
    
    #pragma config WDT = OFF
    
    unsigned char c;
    int i;
    unsigned char tampon[10];
    rom const unsigned char chrom[]=" en ROM";
    unsigned char chram[]=" en RAM";
    unsigned char * pram;
    rom unsigned char *prom;
    float f;
    
    // dirige user_putc vers l'afficheur LCD du PD2+
    int _user_putc (char c)
    {
    	putcXLCD(c);
    }
    
    
    void touche(void)
    {
     while(PORTAbits.RA4 & 1);
     while(!(PORTAbits.RA4 & 1));
    // efface l'afficheur LCD
     SetDDRamAddr(0);		
     fprintf(_H_USER,"                ");
     SetDDRamAddr(0x40);
     fprintf(_H_USER,"                ");
    } 
    
    
    void main(void)
    {	
    	TRISAbits.RA4=1;		// PORTA en entrée pour S2
    	TRISD=0b00000000;
    
    	SPBRG = 25; /* configure la vitesse (BAUD) 9600 N 8 1*/
    	TXSTA = 0x24;
    	RCSTA = 0x90; /* active l'USART*/
    
    	OpenXLCD(FOUR_BIT & LINES_5X7 );	//initialise PIC pour LCD sur PD2
        SetDDRamAddr(0);					//ligne 0 de l'afficheur
    
    	fprintf (_H_USART, "fprintf USART\n"); // vers USART
    
    	f=5000.0/3.0;
    	i=150-200;
    	c='A';
    	pram=(unsigned char *)0x12AB ;
    	prom=(rom unsigned char *)0xAB12;
    	while(1)
    		{
       			SetDDRamAddr(0);					//ligne 0 de l'afficheur
    			fprintf(_H_USER,"TESTS PRINTF");
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER,"appuyez sur S2");
    			touche();
    
    			SetDDRamAddr(0);
    			fprintf(_H_USER,"caracteres: %c ",c);
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER,"%d %X %#X ",c,c,c);
    			touche();
    
    			SetDDRamAddr(0);
    			fprintf(_H_USER,"integers: %d",i);
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER,"%u %#x",i,i);
    			touche();
    
    			SetDDRamAddr(0);
    			fprintf(_H_USER,"binaires: %b",0x1A);
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER,"%010b",0x1A);
    			touche();
    
    			SetDDRamAddr(0);
    			fprintf(_H_USER,"Ptr RAM: %p",pram);
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER,"%#010P",pram);
    			touche();
    
    			SetDDRamAddr(0);
    			fprintf(_H_USER,"Ptr ROM: %p",prom);
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER,"%#010P",prom);
    			touche();
    
    			SetDDRamAddr(0);
    			fprintf(_H_USER,"RAM %s",chram);
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER,"ROM %S",chrom);
    			touche();
    
    			SetDDRamAddr(0);
    			ftoa(f,tampon,3,'s');
    			fprintf(_H_USER,"Reel: %s",tampon);
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER,"Reel: %s",ftoa(f,tampon,5,'f'));
    			touche();
    
    			SetDDRamAddr(0);
    			fprintf(_H_USER,"caract%cres perso",5);
    			SetDDRamAddr(0x40);
    			fprintf(_H_USER," %c%c%c%c%c%c%c%c ",0,1,2,3,4,5,6,7);
    			touche();
    		}
    }
    Comment m'en sortir?

    Merci de votre aide,

    Bonne nuit

    -----

  2. #2
    invitec054e296

    Re : Modifier PORT xlcd.h

    Personne n'utilise xlcd.h avec le LCD branché sur les port D?

  3. #3
    paulfjujo

    Re : Modifier PORT xlcd.h

    bonjour,

    J'utilise aussi le port D pour les Data et le Port C pour le control.
    Mais je me suis refait un fichier specifique pour ne pas utiliser Xlcd.h
    Je mets la config particuliere de connections au LCD, en dur dans mon fichier principal.
    et un fichier *.h reprenant les commandes du LCD
    que j'integre ensuite dans mon C principal

  4. #4
    invitec054e296

    Re : Modifier PORT xlcd.h

    Merci de ton aide, mais ne serait il pas possible d'avoir les data et le contrôle du lcd sur les ports D seulement? Bien sur mon pcs est en 4 bits.

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

    Re : Modifier PORT xlcd.h

    bonjour,

    bien sur, il suffit simplement de declarer les bits de controle sur le port D !
    en accordance avec le hardware.

    exemple

    // DATA_PORT defines the port to which the LCD data lines are connected
    #define LCD_DATAPORT PORTD
    #define LCD_DATAPORT_TRIS TRISD

    //ReadWrite Pin
    #define LCD_RWPIN PORTSbits.RD3
    #define LCD_RWPIN_TRIS TRISDbits.TRISD3
    //RS Pin
    #define LCD_RSPIN PORTDbits.RD2
    #define LCD_RSPIN_TRIS TRISDbits.TRISD2
    //Enable Pin
    #define LCD_ENPIN PORTDbits.RD1
    #define LCD_ENPIN_TRIS TRISDbits.TRISD1

  7. #6
    invitec054e296

    Re : Modifier PORT xlcd.h

    Je suis d'accord que ça parrait pourtant simple, avec tous les autres ports je m'en sors bien.
    Mais impossible avec le port D.

    Comme j'utilise beaucoup les exemples des cours aix-mrs, il y a cette ligne dans openxlcd.c
    Code:
    DDREbits.PSPMODE = 0;			/* Configure le port D en mode Entrées / Sorties générales */
    Est ce que ça peut être la cause?
    Actuellement, pour libérer mes ports analogiques j'ai mis le controle du LCD sur les ports B.

  8. #7
    paulfjujo

    Re : Modifier PORT xlcd.h

    bonjour

    Dans mon init hardware concernant le portD, je n'ai mis que cela
    ANSELD=0;// pas d'analog !!
    TRISD=0; // all outputs

    nota: je n'utilise pas Openxlcd , mais je me suis refait un fichier à partir des elements existant
    pour l'utiliser avec un fichier externe d' adapatation de la config hardware PIC-> LCD

Discussions similaires

  1. MCC18 + PICDEM2 + XLCD librairie pourquoi????
    Par invite8ee4d94b dans le forum Électronique
    Réponses: 5
    Dernier message: 15/08/2009, 19h30
  2. Problème Librairie XLCD - compilateur C18
    Par invite3c35244f dans le forum Électronique
    Réponses: 27
    Dernier message: 08/06/2009, 08h00
  3. Utilisation XLCD sur pic18F
    Par inviteac0c62a8 dans le forum Électronique
    Réponses: 23
    Dernier message: 05/02/2009, 14h17
  4. Gérer l'affichage avec XLCD.C/Maestro software
    Par invite3c35244f dans le forum Électronique
    Réponses: 1
    Dernier message: 04/10/2007, 23h34
  5. modifier numero d' un port serie
    Par invite3a1051d7 dans le forum Électronique
    Réponses: 6
    Dernier message: 04/06/2005, 12h29
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...