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 :
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)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 */
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
Comment m'en sortir?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(); } }
Merci de votre aide,
Bonne nuit
-----