Programmation d'un pic 16F877
Fermé
screwbat
Messages postés
2
Date d'inscription
samedi 7 mai 2011
Statut
Membre
Dernière intervention
7 mai 2011
-
7 mai 2011 à 15:31
prypiat_child Messages postés 1344 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 10 avril 2014 - 7 mai 2011 à 16:07
prypiat_child Messages postés 1344 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 10 avril 2014 - 7 mai 2011 à 16:07
Bonjour,
Dans le cadre de mon PFE JE suis coincée au niveau de la programmation mon projet contient deux parties:
1er partie consiste à varier l'intensité lumineuse d'une lampe avec un pic 16F877 cette partie est à base d'un triac.
2éme partie consiste à placer un capteur de température LM35 prés du lampe qui va capter la température puis l'afficher sur un LCD lorsque la température dépasse un certain seuil par exemple 70degrés le LCD affichera le mot attention.
S'il vous aidez moi je vous en supplie.
Merci
Dans le cadre de mon PFE JE suis coincée au niveau de la programmation mon projet contient deux parties:
1er partie consiste à varier l'intensité lumineuse d'une lampe avec un pic 16F877 cette partie est à base d'un triac.
2éme partie consiste à placer un capteur de température LM35 prés du lampe qui va capter la température puis l'afficher sur un LCD lorsque la température dépasse un certain seuil par exemple 70degrés le LCD affichera le mot attention.
S'il vous aidez moi je vous en supplie.
Merci
A voir également:
- Programmation d'un pic 16F877
- Application de programmation - Guide
- Pic hunter - Télécharger - Téléchargement & Transfert
- Pic collage gratuit - Télécharger - Photo & Graphisme
- Roissy hub bscc pic ✓ - Forum Consommation & Internet
- Programmer un sms - Guide
3 réponses
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
Modifié par prypiat_child le 7/05/2011 à 15:35
Modifié par prypiat_child le 7/05/2011 à 15:35
On peut pas te faire ton projet à ta place...
Où es-tu coincée ?
Réfléchis bien sur papier avant de coder, puis après regarde simplement dans la documentation du PIC, pour l'utilisation des fonctions spécifiques (choix et utilisation du timer par exemple...)
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
Où es-tu coincée ?
Réfléchis bien sur papier avant de coder, puis après regarde simplement dans la documentation du PIC, pour l'utilisation des fonctions spécifiques (choix et utilisation du timer par exemple...)
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
screwbat
Messages postés
2
Date d'inscription
samedi 7 mai 2011
Statut
Membre
Dernière intervention
7 mai 2011
7 mai 2011 à 15:45
7 mai 2011 à 15:45
désolé monsieur j'ai fait plusieurs essai mais ça marche pas pour la 1ere partie la lampe est allumée mais je ne peut pas voir la variation en pourcentage sur LCD voici mon essai concernant la première partie:
#include <16F877.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#use delay(clock=20000000)
#include <assert.h>
#include <ctype.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlibm.h>
#include <string.h>
int j=0,c;
//char alpha;
int RCYCLIQUE=0,tab[10];
//int timed_getc()
// {
//alpha='x';
//for(j=0;j<=2;j++)
//{tab[j]=0;
//}
//j=0;
//while(alpha!='*'&& input(PIN_B5) )
// {
//if(c<RCYCLIQUE)
//{
// output_low(PIN_B2);
// }
//else
//{
//output_high(PIN_B2);
// }
//if(kbhit())
//{
//alpha=getc();
//if(alpha!='*')
//{
//tab[j]=alpha-48;
//putc(alpha);
//j=j+1;
//}
// }
// }
//if(j==1)
//RCYCLIQUE=tab[0];
//if(j==2)
//RCYCLIQUE=tab[0]*10+tab[1];
//if(j==3)
//RCYCLIQUE=tab[0]*100+tab[1]*10+tab[2];
//printf("%li",RCYCLIQUE);
//return(RCYCLIQUE);}
#int_EXT
int EXT_isr()
{
c=0;
return(c);
}
#int_TIMER0
int TIMER0_isr()
{
if(RCYCLIQUE>=100)
c=0;
c++;
return(c);
}
// TODO: USER CODE!!
void main()
{
setup_adc_ports(RA1_analog); //definie l'entrée RA0 du port A comme une entrée analogique
setup_adc(adc_clock_div_2); //definie l'horloge de l'ADC. dans ce cas Fosc_max= 1.25MHz
set_adc_Channel(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
// TODO: USER CODE!!
while(1)
{
tab[1]=10;
tab[2]=20;
tab[3]=30;
tab[4]=40;
tab[5]=50;
tab[6]=60;
tab[7]=70;
tab[8]=80;
tab[9]=90;
tab[10]=100;
if(input(PIN_A1)==0)
j++;
RCYCLIQUE=Tab[j];
if(c>RCYCLIQUE)
{
output_low(PIN_C2);
}
else
{
output_high(PIN_C2);
}}
le programme n'a pas d'erreur mais je sais pas d'ou vient le problème.
concernant la 2éme partie voila ce que j'ai pu faire je lit une valeur sur le LCD mais lorsque je varie le LM35 rien ne varie et voici le programme:
#include<16f877.h>
#use delay (clock=4000000)
#use rs232 (baud=9600,rcv=PIN_C7, xmit=PIN_C6)
#fuses XT,NOWDT,NOPROTECT,NOLVP
#include<math.h>
#include <stdlib.h>
#define use_portb_lcd TRUE
#include <lcd.c>
//affichage sur ecran
void ecran (long int x)
{
printf("Temperature1:%3ld C\\r",x);
delay_ms(1000);
}
//Affichage Sur LCD
void affichage (long int x)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"t1=%3ldC",x);
}
//La Lecture et la converission A/N du tensiondu por A/N et elle retourne la temperature equivalente
int lecture ()
{
float valr,val,T;
float B=9.7,A=13.6;//Les variables caracterstique de notre capteur de température
float Rc;
long int t1;
val=read_adc(ADC_START_AND_READ);
valr=(val*2.5)/128;
Rc=((1000*valr)/(5-valr));
T=B/(log(Rc/A));
t1=ceil(T);
return(t1);
}
//Programme Principale
void main()
{
long int val_res;
printf(" starting convertion : \\r");
delay_ms(1500);
lcd_init();
SETUP_ADC_PORTS(ALL_ANALOG);
SETUP_ADC(ADC_CLOCK_INTERNAL);
while(true)
{
SET_ADC_CHANNEL(0);
val_res=lecture();
ceil(val_res);
affichage(val_res);
delay_us(400);
ecran(val_res);
delay_us(400);
}
}
je vous en supplie aidez moi
#include <16F877.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#use delay(clock=20000000)
#include <assert.h>
#include <ctype.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlibm.h>
#include <string.h>
int j=0,c;
//char alpha;
int RCYCLIQUE=0,tab[10];
//int timed_getc()
// {
//alpha='x';
//for(j=0;j<=2;j++)
//{tab[j]=0;
//}
//j=0;
//while(alpha!='*'&& input(PIN_B5) )
// {
//if(c<RCYCLIQUE)
//{
// output_low(PIN_B2);
// }
//else
//{
//output_high(PIN_B2);
// }
//if(kbhit())
//{
//alpha=getc();
//if(alpha!='*')
//{
//tab[j]=alpha-48;
//putc(alpha);
//j=j+1;
//}
// }
// }
//if(j==1)
//RCYCLIQUE=tab[0];
//if(j==2)
//RCYCLIQUE=tab[0]*10+tab[1];
//if(j==3)
//RCYCLIQUE=tab[0]*100+tab[1]*10+tab[2];
//printf("%li",RCYCLIQUE);
//return(RCYCLIQUE);}
#int_EXT
int EXT_isr()
{
c=0;
return(c);
}
#int_TIMER0
int TIMER0_isr()
{
if(RCYCLIQUE>=100)
c=0;
c++;
return(c);
}
// TODO: USER CODE!!
void main()
{
setup_adc_ports(RA1_analog); //definie l'entrée RA0 du port A comme une entrée analogique
setup_adc(adc_clock_div_2); //definie l'horloge de l'ADC. dans ce cas Fosc_max= 1.25MHz
set_adc_Channel(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
// TODO: USER CODE!!
while(1)
{
tab[1]=10;
tab[2]=20;
tab[3]=30;
tab[4]=40;
tab[5]=50;
tab[6]=60;
tab[7]=70;
tab[8]=80;
tab[9]=90;
tab[10]=100;
if(input(PIN_A1)==0)
j++;
RCYCLIQUE=Tab[j];
if(c>RCYCLIQUE)
{
output_low(PIN_C2);
}
else
{
output_high(PIN_C2);
}}
le programme n'a pas d'erreur mais je sais pas d'ou vient le problème.
concernant la 2éme partie voila ce que j'ai pu faire je lit une valeur sur le LCD mais lorsque je varie le LM35 rien ne varie et voici le programme:
#include<16f877.h>
#use delay (clock=4000000)
#use rs232 (baud=9600,rcv=PIN_C7, xmit=PIN_C6)
#fuses XT,NOWDT,NOPROTECT,NOLVP
#include<math.h>
#include <stdlib.h>
#define use_portb_lcd TRUE
#include <lcd.c>
//affichage sur ecran
void ecran (long int x)
{
printf("Temperature1:%3ld C\\r",x);
delay_ms(1000);
}
//Affichage Sur LCD
void affichage (long int x)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"t1=%3ldC",x);
}
//La Lecture et la converission A/N du tensiondu por A/N et elle retourne la temperature equivalente
int lecture ()
{
float valr,val,T;
float B=9.7,A=13.6;//Les variables caracterstique de notre capteur de température
float Rc;
long int t1;
val=read_adc(ADC_START_AND_READ);
valr=(val*2.5)/128;
Rc=((1000*valr)/(5-valr));
T=B/(log(Rc/A));
t1=ceil(T);
return(t1);
}
//Programme Principale
void main()
{
long int val_res;
printf(" starting convertion : \\r");
delay_ms(1500);
lcd_init();
SETUP_ADC_PORTS(ALL_ANALOG);
SETUP_ADC(ADC_CLOCK_INTERNAL);
while(true)
{
SET_ADC_CHANNEL(0);
val_res=lecture();
ceil(val_res);
affichage(val_res);
delay_us(400);
ecran(val_res);
delay_us(400);
}
}
je vous en supplie aidez moi
prypiat_child
Messages postés
1344
Date d'inscription
vendredi 30 octobre 2009
Statut
Membre
Dernière intervention
10 avril 2014
272
Modifié par prypiat_child le 7/05/2011 à 16:09
Modifié par prypiat_child le 7/05/2011 à 16:09
A quoi correspondent toutes les lignes commentées du premier code ?
J'avoue que j'ai du mal à me situer dans ce code... tu devrais mettre des balises "code" pour qu'il soit plus clair^^
A quoi sert la variable que tu as appelée "c" ?
Et vu que, même si j'ai fait un projet semblable il y a deux ans (sur un PIC16F182), je n'ai ni mes codes source ni la doc sous les yeux, j'avoue j'ai du mal à voir a quoi servent certaines fonctions : par exemple, "output_low(PIN_C2)" met bien la sortie à 0 ou je me trompe ?
edit : "RCYCLIQUE=Tab[j]; " ca compile ca ? sachant que c'est tab[] que tu initialises et non Tab[]
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."
J'avoue que j'ai du mal à me situer dans ce code... tu devrais mettre des balises "code" pour qu'il soit plus clair^^
A quoi sert la variable que tu as appelée "c" ?
Et vu que, même si j'ai fait un projet semblable il y a deux ans (sur un PIC16F182), je n'ai ni mes codes source ni la doc sous les yeux, j'avoue j'ai du mal à voir a quoi servent certaines fonctions : par exemple, "output_low(PIN_C2)" met bien la sortie à 0 ou je me trompe ?
edit : "RCYCLIQUE=Tab[j]; " ca compile ca ? sachant que c'est tab[] que tu initialises et non Tab[]
"Si Satan aime le jazz, alors il doit écouter Naked City, confortablement installé
sur son canapé en cuir humain."