Station meteo pic 16F877 avec capteurs
k-meleon
Messages postés
13
Statut
Membre
-
fopic -
fopic -
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]);
}
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:
- Station meteo pic 16F877 avec capteurs
- Station de radio - Télécharger - Médias et Actualité
- Roissy courrier international pic ✓ - Forum Laposte
- Station météo auriol problème - Forum Accessoires & objets connectés
- Pic hunter - Télécharger - Téléchargement & Transfert
- Problème station météo optex - Forum Accessoires & objets connectés
4 réponses
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