bonjour
nous sommes un groûpe d'étudiants et nous devons réaliser
un projet informatique mais l'école est plus orienté "méca dans les transports" d'ou notre niveau en info pour le moins pitoyable.
le but de ce projet est d'afficher une pression de pneu :le microcontrolleur récupère le signal venant du captur de pression, le convertit en valeur de pression puis l'affiche sur un afficheur LCD intelligent type RTC .
nous avons tt le matériel pour réaliser la simulation et notre progrmme est terminé
oui mais voila on a des erreurs repérées lors de l'éxécution avec bootloader et on ne connait pas leur origine...
voici les erreurs:
Error[1] E:\Projet info\prgmfinal.c 26 : Symbol 'RC2' is undefined (The definition of the symbol in not known. This can be due to
wrong spelling or letter case mismatch. Otherwise a new symbol
definition is required: variable, function, macro, etc.)
Deleting intermediary files... done.
Executing: "C:\Progra~1\Pic\CC5X\Bin\CC5X.EXE" prgmfinal.c -CC -fINHX8M -p16F877 -IC:\Progra~1\Pic\CC5X\include\avecbootloader -a -L -Q -V -FM
CC5X Version 3.2, Copyright (c) B Knudsen Data, Norway 1992-2004
--> FREE edition, 8-16 bit int, 24 bit float, 1k code, reduced optim.
prgmfinal.c:
PORTC=0;
Lcd_RS=0;
Lcd_E;
^------
Error[2] E:\Projet info\prgmfinal.c 58 : Symbol 'RC3' is undefined
#define pins PORTC
#define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;
^------
Error[3] E:\Projet info\prgmfinal.c 10 : Previous error is at macro 'Lcd_E'
Lcd_E;
^------
Error[4] E:\Projet info\prgmfinal.c 58 : Illegal statement in function 'wr_Lcd' (The syntax can not be compiled. Rewriting is required)
#define pins PORTC
#define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;
^------
Error[5] E:\Projet info\prgmfinal.c 10 : Previous error is at macro 'Lcd_E'
Error options: -ew: no warning details -ed: no error details -eL: list details
BUILD FAILED: Mon Jun 06 17:02:02 2005
voici le programme:
#pragma chip PIC16F877 //déclaration microcontrôleur
#pragma config WDTE=off,FOSC=HS
#pragma bit V@PORTA.0//capteur de pression relié au bit 0 du portA (port en analogique)
#pragma bit BP1@PORTB.1//bouton pour gonflage
#pragma bit BP2@PORTB.2//bouton pour dégonflage
#pragma bit OK@PORTB.3//bouton validation pression demandée
#pragma origin=0x05
#define pins PORTC
#define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;
#define Lcd_RS RC2
unsigned char cL;
void Efface_LCD(void);
void Ligne_LCD(char cLigne);
void Efface_LigneLCD(char cEff);
void wr_Lcd(unsigned char cVar,unsigned char cLcd_RS);
void Ini_Lcd(void);
void Tempo(char ti); // tempo
void Ini_Lcd(void)
{
// **** initialisation LCD *****
PORTC=0;
Lcd_RS=0;
for(cL=0;cL<2;cL++) {TMR0=1; while(TMR0 != 0);} //32ms afficheur
pins=0x30;
Tempo(189); // 4,3ms E inclus
Tempo(254); // 150µs
pins=0x20;
Tempo(254); // 150µs
//**** initialisation paramètres LCD **********************************
wr_Lcd(0x38,0); // Mode 8 bits 2 lignes
wr_Lcd(1,0); // Efface l'affichage initialisation DD-ram
wr_Lcd(0x0C,0); // Affichage des caractères de gauche à droite et curseur se déplace
wr_Lcd(6,0); // Déplacement vers la droite
}
void wr_Lcd(unsigned char cVar,unsigned char cLcd_RS)
{
char b3;
Lcd_RS=cLcd_RS;
b3=cVar & 0xF0; // envoi 4 bit poids fort
pins=pins & 4; // copie du bit lcd_E
pins=pins | b3;
Tempo(255);
pins=pins & 4; // envoi 4 bits poids faible
b3=(cVar<<4);
pins=pins | b3;
Lcd_E;
if((cVar>2) && (Lcd_RS==0)) TMR0=255; // tempo 86µs
else TMR0=228; // tempo 1,7ms
while(TMR0 != 0);
}
void Tempo(char ti)
{
Lcd_E;
TMR0=ti;
while(TMR0 != 0);
}
void Ligne_LCD(char cLigne)
{
if(cLigne==1) wr_Lcd(0x80,0); // afficheur ligne 1
else if (cLigne==2) wr_Lcd(0xC0,0); // afficheur ligne 2
}
void Efface_LigneLCD(char cEff)
{
if(cEff==1)
{
wr_Lcd(0x80,0); // set DDRAM passe 1 ere ligne
for(cL=0;cL<=15;cL++)wr_Lcd(0x20,1); // affiche des espaces
}
if(cEff==2)
{
wr_Lcd(0xC0,0); // set DDRAM passe 2 eme ligne
for(cL=0;cL<=15;cL++)wr_Lcd(0x20,1); // affiche des espaces
}
}
void Efface_LCD(void)
{
wr_Lcd(1,0);
}
#include<pic16877.h> // fichier du pic16F877
#include "lcdspi.h" // fichier du lcd (HD 44780),partie config juste au dessus
void Message_Lcd(const char* texte) // fonction de transfert, d'un message vers lcd
void Message_Lcd(const char* texte) // écriture d'une chaine de caractère
{
char cCount=0;
while (texte[cCount] != 0 )
wr_Lcd(texte[cCount++],1);
}
//-------------------------------------------------------------
//DECLARATION DES VARIABLES????????
float V,PA,PD;
int k;
//-------------------------------------------------------------
void conversion(V) // fonction de conversion de tension capteur en pression
{OPTION_REG=0x00//résistances pull-up actives
TRISA=0x00; // Port A en entrée (capteur)
TRISC=0x00; // Port C en sortie vers l'afficheur LCD
PORTC=0;
{
{PA=1.725*V-0.8625;
}
return PA
}
void main() // fonction qui incrémente ou décrémente la valeur de la pression demandée
{TRISD=0x00; // Port D en sortie, commande gonflage et dégonflage
TRISC=0x00; // Port C en sortie vers l'afficheur LCD
TRISA=0x00; // Port A en entrée,capteur
TRISB=0xFF; // Port B en entrée pour BP
PD=PA
{ //écriture message-> bon emplacement?????
OPTION=0b10000101; // initialise TMR0 pas de 64µs
Ini_Lcd(); // Initialisation lcd
Efface_LCD();
Ligne_LCD(1);
Message_Lcd("PRESSION EN BARS : " );
Ligne_LCD(2);
Message_Lcd("ACT : "PA" DEM : "PD" " );
while(1);
}
{while(1);
{ PA=conversion(V);
if (BP2==0) // Appui sur la touche décrémentant la pression demandée
{PD=PD-0.1;return PD
{for (k=0;k<=20;k++)(nop());} // Temporisation (pour changement trop rapide)
}
if (BP1==0) // Appui sur la touche incrémentant la pression demandée
{PD=PD+0.1;return PD
{for (k=0;k<=20;k++)(nop());} // Temporisation (pour changement trop rapide)
}
if (OK==0)// validation de la valeur demandée
{if (PD>PA)
{GONF=1;
until (PA==PD);
}
{if (PD<PA)
{DEGONF=1;
until (PA==PD);
}
{if (PD=PA) (nop());
if((GONF==1)&&(PD<PA))
{GONF=0}
if((DEGONF==1)&&(PD>PA))
{DEGONF=0}
}
}
merci d'avance pour ceux qui auront le courage de répondre et d' se pencher sur la question..