Bonjour à tous.
Comme le titre l'indique je dispose de la nouvelle carte (verte) Picdem 2 + Demo Board, équipée d'un P18f4520. Je programme sous MPLAB v8.5 avec le compliateur C18.
Mon but est d'afficher sur l'écran LCD le résultat d'une conversion analogique numérique.
Dans un premier temps, j'ai cherché à mettre en route l'écran.
J'ai trouvé sur un forum microchip la solution:
http://www.microchip.com/forums/tm.aspx ... 19&mpage=1
Je peux donc afficher ce que je veux sur l'écran via la fonction putrsXLCD("truc").
J'ai ensuite tenté de modifier mon programme histoire d'avoir une sorte de "printf" mais qui fonctionne sur l'écran LCD. J'ai essayé de bidouiller le programme suivant:
#include <spi.h>
#include <xlcdGre.h>
#include <p18cxxx.h>
#include <timers.h>
#include <delays.h>
#include <stdlib.h>
#include <string.h>
#include "LCDinit.c"
#include "ftoa.c"
#define q 4.8828e-3 // quantum pour un CAN 10bits 0v-5v
/*****/
#pragma config OSC = HS
#pragma config PWRT = ON
#pragma config WDT = OFF, WDTPS = 1
#pragma config LVP = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF
#pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF,WRT3 = OFF,WRTB = OFF,WRTC = OFF,WRTD = OFF
#pragma config EBTR0 = OFF,EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF,EBTRB = OFF
#define TRUE 1
#define ButtonPP !PORTAbits.RA4 // RE2 push button
#define ButtonFF !PORTBbits.RB0 // RE0 push button
#define CLEAR_DISPLAY 0x01
void DelayFor18TCY(void);
void DelayPORXLCD(void);
void DelayXLCD(void);
char filename[14] ="Picdem2+ test";
char teststring[15]="End of Testing";
char artist[17]="----------------" ;
char title[17]="----------------" ;
void clear_lcd(int line)
{
char ln;
int x;
if (line==2) ln = 0xC0;
else ln = 0x00;
Delay10KTCYx(5);
SetDDRamAddr(ln); // set line
for (x=0; x<16; x++)
{
Delay10KTCYx(5);
WriteDataXLCD(' '); // write a blank
}
Delay10KTCYx(5);
SetDDRamAddr(ln); // set back to beginning
return;
}
/******************************/
void led(void){
PORTBbits.RB1 = 1;
Delay10KTCYx(100);
PORTBbits.RB1 = 0;
Delay10KTCYx(100);
}
/*************** main starts here **************/
void main (void)
{
char chaine;
float res;
int i;
int somme, result, s, x, y,rs;
//Setup Ports
PORTB = 0b00000000; // Setup PORTB
TRISB = 0b00000001; // RB0 as input. Reset as output
DDRAbits.RA4 = 1; // play/pause
DDRBbits.RB0 = 1; // next track
OpenXLCD(FOUR_BIT & LINES_5X7); // Init the LCD Display
// Set cursor off
Delay10KTCYx(20);
WriteCmdXLCD(DON&CURSOR_OFF&BL INK_OFF);
while(BusyXLCD());
Delay10KTCYx(20);
res=(float)5*q; // calcul simple
ftoa(res,chaine,5,'f'); // convertit en chaine
for (i=0;i<0x1ffff;i++); // petite tempo
putrsXLCD(chaine); // Affichage du résultat sur l'écran
while (!ButtonPP); //wait for keypress
Delay100TCYx(0x01);
while (ButtonPP);
clear_lcd(2); //set and clear second line
Delay10KTCYx(10);
putsXLCD(filename);
while (!ButtonPP); //wait for keypress
Delay100TCYx(0x01);
while (ButtonPP);
clear_lcd(1); //set and clear second line
Delay10KTCYx(10);
putsXLCD(teststring);
while (1)
{
led();
}
}
Je n'obtiens par d'erreur, mais rien n'apparait sur l'écran LCD. Je pense que ma façon de procéder n'est pas la bonne.
Cordialement.
-----