Station meteo pic 16F877 avec capteurs

Fermé
k-meleon Messages postés 13 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 16 janvier 2008 - 27 mars 2007 à 18:01
 fopic - 26 juin 2009 à 11:59
Bonjour!
je suis en galère sur mon programme c. on a projet à faire qui est le suivant: configuer un pic16F877 pour qu'il puisse communiquer avec un module zigbee.
differents capteurs sont connectés au pic( temperature, humidité).
voici le format de notre trame RS232:
start/mode(Lecture, ecriture, config)/identifiant capteur (A1)/checksum/ données/checksum/stop
on a 8 bit en tout.
j'ai fait les programme de communication RS232. mon problème est au niveau du programme principal (main).
je n'arrive pas à definir le cheminement du prog.
reconnaissance du bit de start, mode,etc...

est ce que quelqu'un pourrait m'aider avec du code concret car je suis bloque. j'ai fait Bigonoff et la plupart des sites et j'ai plein d'exemples de prog.

merci d'avance

/*********************************************************
PROGRAMME PRINCIPAL DU PIC
*********************************************************/
#include "main.h"


//---------- Configuration des fusibles ----------
__CONFIG(HS&WDTDIS&PWRTDIS&BORDIS&LVPDIS&DUNPROT); //Configuration des fusibles
//Osc Quartz, watchdog disabled, brown out reset disbled, Low voltage programmation disabled
//data code unprotected, Flash memory write unprotected //&WRTDIS&UNPROTECT

//---------- MAIN ----------
void main(void)
{
/** INITIALISATIONS **/
Init_Data(); //Initialisations des données du programme
Init_RS232(); //Initialisations de la voie série
TRISB=0b00000000; //Port RB7-RB0 en sortie

/** LECTURE DE LA TRAME **/
Decodage_trame();

/** GESTION **/
/*switch(mode)
{
case 'L':;break;
case 'E':;break;
case 'C': Configuration();break;
}*/
}

//---------- Sub-fonctions ----------

void Init_Data(void)
{
unsigned char i;
for (i=1;i<=FRAMENBBYTE;i++) //Données recues
data[i]=NULL;
mode=NULL; // mode de fonctionnement
}

/*** Checksum , fonction qui calcul la somme de la trame. le checksum doit faire 0***/
char Checksum(char offset,char nboct,char posCS)
{
unsigned char cs=0;
unsigned char i;

//Réalisation du checksum
for(i=offset;i<=nboct;i++)
cs+=Buffer[i];
//Test du checksum
if((cs+Buffer[posCS])!=0) return -1;
return 0; // On a récupéré les données envoyées
}

/*** Signalisation de l'erreur au PC ***/
void Erreur(void)
{
Transmit_RS232(ERROR);// emet '!' le caractere transmi qui est une erreur
}

/*** Détection ***/
char Decodage_trame(void)
{
unsigned char i;
//*** Réception des données dans un buffer
for (i=1;i<=FRAMENBBYTE;i++)
Buffer[i]=Receive_RS232();
//*** Détection du START
if(Buffer[STARTPOS]!=START) // si le premier char n'est pas le start
{
Erreur();
return -1; //signale l'erreur au main
}//sinon on passe à l'octet suivant
//*** Détection du mot de controle (mode + id périphérique)
// mode
if(Buffer[MODEPOS]=='L'||Buffer[MODEPOS]=='E'||Buffer[MODEPOS]=='C')
mode=Buffer[MODEPOS];
else
{
Erreur();
return -1; //signale l'erreur
}
//id périphérique (type + num)
for(i=0;i<=NBPERIPHMAX;i++)
{
if(Buffer[TYPEPOS]==Liste_Periph[i][0]) // type du capteur
{
if(Buffer[2]==Liste_Periph[i][1]) //numéro du capteur
{
Peripherique[0]=Buffer[1]; //Capteur reconnu...
Peripherique[1]=Buffer[2]; //... on l'enregistre
}
}
else
{
Erreur(); //On a pas reconnu l'en-tête
return -1; //signale l'erreur au main
}
}
//*** Checksum
if(Checksum(STARTPOS,TYPEPOS,CS1POS)!=0)
{
Erreur();
return -1; //signale l'erreur
}
//*** Détection des données
/* for(i=DATAPOS;Buffer[i]==ENDFRAME||i==FRAMENBBYTE;i++)
{
//data[i-DATAPOS]=Buffer[
}*/
}

/*** Traite les interruptions ***/
/*static void interrupt interruptions(void)
{
// Réception d'un octet sur le port série
if(RCIF) //serial receive flag
Decodage_trame();
}*/


// detection de données

for(i=DATAPOS;

outport(buffer[i]);
}Buffer[i]=Receive_RS232();






/********************************************************
Effacement des buffers envoi, réception
*********************************************************/

Efface_buff(void)
{for(i=0;i<=FRAMENBBYTE;i++)
outport(buffer[i]);
}




A voir également:

4 réponses

jackie007 Messages postés 15 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 6 avril 2012 8
11 févr. 2009 à 10:29
je l'ai déja réalisé ce projet.je prendrai lke temps bientot de vous aider !
8
station meteo (capteur pression +capteur temperateur +pic 16f277+afficheur lcd) je demander un schema et un programme par c et merci votre attention et lire mon message
4
je veut l'aide
0
bonjour je suis un étudiant tunisien j'ai un projet à faire qui est la conception et la réalisation d'une carte de commande a base de pic 16f877 afin de commander des moteurs ,des afficheurs ...
juste j'ai besoin des informations concernant la mise en oeuvre de pic,la protection de la carte
-1
salut ton projet est un bon projet mais je voudrais le modifier quelque peu pourait tu me l'envoyer ..
merci
0