Aller au contenu


Photo
- - - - -

[c]Afficheur LCD, pic 16F877, MPLAB v8


  • Veuillez vous connecter pour répondre
8 réponses à ce sujet

#1 belha1

belha1

    Nouveau membre

  • Membres
  • 48 messages

Posté 04 avril 2010 - 06:49

Salut à tous, voila j'ai un problême avec mon petit programme pour le pic 16F877 pour commander un LCD 2*16, en mode 8bit.

Quand je compile, j'ai cette erreur:


Clean: Deleting intermediary and output files.

Clean: Done.

Executing: "C:\Program Files\bknd\CC5X\CC5X.EXE" metronome.c -CC -fINHX8M -p16F877 -IC:\Progra~1\bknd\CC5X -a -L -Q -V -FM

CC5X Version 3.4B, Copyright © B Knudsen Data, Norway 1992-2009

--> FREE edition, 8-16 bit int, 24 bit float, 32k code, reduced optim.

metronome.c:



ouvrir_lcd();

ecrire_lcd( "-=METROBELHA=-" , 0);

^------

Error[1] C:\Documents and Settings\Hsouna\Bureau\métronome\metronome.c 29 : Incompatible storage, 'const *' is required



Error options: -ew: no warning details -ed: no error details -eL: list details

BUILD FAILED: Sun Apr 04 18:50:45 2010

[/code]

Mon compilateur est CC5X. et voila mon programme:


//Debut du programme

//definition des bit

//-----------------------------

#define D0 PORTB.0

#define D1 PORTB.1

#define D2 PORTB.2

#define D3 PORTB.3

#define D4 PORTB.4

#define D5 PORTB.5

#define D6 PORTB.6

#define D7 PORTB.7

#define E PORTA.0

#define RW PORTA.1

#define RS PORTA.2



//jeu de commande



//fonction

void ecrire_octect(char data, bit type);

void reset_lcd();

void ecrire_lcd(unsigned char ligne[16], char li);

void efface_ligne(char lin);

void delay(int time);

void ouvrir_lcd();



//fonction principale

void main(void) {

ouvrir_lcd();

ecrire_lcd( "-=METROBELHA=-" , 0);

}



void ouvrir_lcd() {

ecrire_octect(0x33, 0);

ecrire_octect(0x33, 0);

ecrire_octect(0x33, 0);

ecrire_octect(0x38, 0);

ecrire_octect(0x0C, 0);

ecrire_octect(0x06, 0);

reset_lcd();

}

void delay(int time) {

while(--time);

}

void efface_ligne(char lin)

{

int i;



// Mise à la bonne adresse

if(lin == 0)

{

ecrire_octect(0x80,0);

}

else ecrire_octect(0xC0,0);

for(i=0;i<16;i++)

{

ecrire_octect(' ',1);

}

}

void ecrire_lcd(unsigned char ligne[16], char li) {

char i;

for(i = 0; i < 16; i++) {

if((ligne[i]) == 0) ligne[i] = ' ';

}

if(li == 0) {

ecrire_octect(0x80 , 0);

}else ecrire_octect(0xC0 , 0);

for(i = 0; i < 16; i++) {

ecrire_octect(ligne[i], 1);

}

}

void reset_lcd() {

ecrire_octect( 0, 0);

}

void ecrire_octect(char data, bit type) {

if(data & 0x01) {

D0 = 1;

}else D0 = 0;

if(data & 0x02) {

D1 = 1;

}else D1 = 0;

if(data & 0x04) {

D2 = 1;

}else D2 = 0;

if(data & 0x08) {

D3 = 1;

}else D3 = 0;

if(data & 0x10) {

D4 = 1;

}else D4 = 0;

if(data & 0x20) {

D5 = 1;

}else D5 = 0;

if(data & 0x40) {

D6 = 1;

}else D6 = 0;

if(data & 0x80) {

D7 = 1;

}else D7 = 0;

RW = 0;

if(type) {

RS = 1;

}else {

RS = 0;

}

E = 1;

delay(50);

E = 0;

}

[/code]

#2 MikeFr

MikeFr

    Membre occasionnel

  • Membres
  • Pip
  • 82 messages

Posté 04 avril 2010 - 09:14

Salut Belha1,

Si tu regarde ton erreur, c'est au niveau de la ligne 29 :
Si je remonte dans ta fonction, on arrive a une autre fonction :
Je pense que ton erreur vient de là, essaye de "caster" ton premier paramètre de type
Par contre si je peut te donner un conseil, utilise plutôt le compilateur MCC18 avec MPLAB, je l'ai utilisé de nombreuse fois et il est très stable. Il intègre aussi une librairie pour gérer les écrans LCD (qui s'appelle XLCD, tu peut te renseigner sur Google tu trouveras pleins de trucs...).

Voila, bon courage! :)


#3 belha1

belha1

    Nouveau membre

  • Membres
  • 48 messages

Posté 09 avril 2010 - 12:24

Merci MikeFR, je vais essayer tes conseils... sinon je vais voir MCC18 et voir des tutos.. merci beaucoup!

#4 MikeFr

MikeFr

    Membre occasionnel

  • Membres
  • Pip
  • 82 messages

Posté 09 avril 2010 - 12:43

Y'a pas de quoi Belha, si jamais tu as d'autres questions n'hésite surtout pas ;)

#5 belha1

belha1

    Nouveau membre

  • Membres
  • 48 messages

Posté 13 avril 2010 - 11:17

A propos, où est ce que je donwload le compilateur MCC18? Et il marche pour les pic de la familles 16F??
Plutot, as-tu des tutoriels pour MCC18??

#6 MikeFr

MikeFr

    Membre occasionnel

  • Membres
  • Pip
  • 82 messages

Posté 13 avril 2010 - 12:41

Alors pour ce qui est de la compatibilité avec la famille 16F il faut que tu vérifie, personellement, je ne l'ai utilisé qu'avec des PIC 18... :)



Pour le télécharger, tu le trouveras à cette adresse, avec beaucoup plus d'info : Site Officiel Microchip



Si tu veut un tuto sur son utilisation, moi je me basait beaucoup la dessus : Tuto MCC18 PDF



Enjoy! ;)



PS : As-tu réussi a faire marcher ton code ??

#7 belha1

belha1

    Nouveau membre

  • Membres
  • 48 messages

Posté 17 avril 2010 - 08:37

Dsl pour le retard pour la réponse, j'ai été privé de connexion internet pendant longtemps! Pour mon code, non, toujours une erreur est toujours présente!!
Je n'arrive pas a la déterminé!! S.v.p, de l'aide...
Je crois que je vais abandonner le MCC18.. Je ne suis pas encore prêt à utiliser les 18.. De plus ils sont cher chez nous, vous voyez. Donc, je vais me contenter de CC5X

#8 MikeFr

MikeFr

    Membre occasionnel

  • Membres
  • Pip
  • 82 messages

Posté 19 avril 2010 - 12:29

Ok, alors dans ce cas tu peut nous donner le message d'erreur que tu as, ainsi que ton code.
Je jeterais un coup d'œil!

#9 philou-RX

philou-RX

    Habitué

  • Membres
  • PipPip
  • 261 messages
  • Gender:Male
  • Location:Riviera - Vaudoise
  • Interests:Electronique / Informatique / Robotique / BD / et surtout les boissons fermentées au houblon

Posté 19 avril 2010 - 02:56

Hello Bel,



Je pense que ton soucis se situe au niveau de fonction : ecrire_octect(char data, bit type)




void ecrire_octect(char data, bit type)

{...}

[/code]



je pense que "bit type" n'est pas reconnu comme un type boolean, donc le compilateur ne comprend pas la valeur que tu lui indiques comme 2ème paramètre. Regarde si le type boolean existe sur ton compilateur -> genre : _bool, ou autres types d'écriture.



Je ne dis pas que c'est la solus, mais c'est peut-être une piste à suivre.



Bon courage dans ton débugage

A bientot.




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users