fure88
Joined: 29 May 2012 Posts: 1
|
capacimetre *** Locked |
Posted: Tue May 29, 2012 10:16 am |
|
|
+++++++++++++++++++++
Locked.
Reason: Please use English on the CCS forum.
La langue de ce forum est l'anglais.
S'il vous plaît utiliser le traducteur de Google pour convertir votre explication à l'anglais.
http://translate.google.com
Ne pas poser des questions dans le Forum Code Library.
Poster questions dans le forum de discussion général.
- Forum Moderator
+++++++++++++++++++++
bonjour,
je suis un débutant au CCS, j'ai le projet "capacimètre".
mon programme consiste à calculer la période à l'entré du CCP1 puis déduire la taille de la capacité( T=ln2*C*(R1+2R2))
malheureusement mon programme ne fonctionne pas, il affiche une fausse valeur.
aider moi svp!!!
[#include "18F2550.h"
#device ADC=10
#use delay(clock=20M)
#byte CCP1CON=0xFBD
#word TMR1=0x0FC
#byte PORTB=0xF81
#byte TRISB=0xF93
#byte PORTC=0xF82
#byte TRISC=0xF94
#bit RC0=PORTC.0
#bit RC1=PORTC.1
#bit RC6=PORTC.6
#bit RC7=PORTC.7
int i;
char calibre='f',text[3]="C=",val[6];
float const log2=0.6931471805599453;
float C=0;
int32 T=0;
#int_ccp1
void front_montant()
{float ancien=0;
T=CCP_1-ancien;
ancien=CCP_1;
}
////// commande d'affichage sur LCD///////////
void envoie_commande(int commande)
{
RC6=0; //RS=0 ==> mode commande
PORTB=commande;
RC7=1; //Enable ==> lecture de la commande
delay_us(80); // temps necessaire pour l'execution de la commande
RC7=0; // fin du mode commande
}
void init_LCD (void)
{
delay_ms(20); // temps de 20 ms necessaire pour demarrer le LCD
envoie_commande(0x3C); //8bit 2 lignes 5*10character
delay_ms(5);
envoie_commande(0x0C);// affichage ON, Curseur Off, Blink Off
envoie_commande(0x01); // efface lCD
delay_ms(5);
}
void aff_LCD(char text)
{
RC6=1; //RS=1 ==> mode ecriture
delay_us(80);
PORTB=text;// ==> envoie code ASCII du caractère
RC7=1;//Enable ==> lecture de la commande
delay_us(80);// temps necessaire pour l'execution de la commande
RC7=0;// fin du mode ecriture
}
///////////////////////////////////////////
void calcul_temps(void)
{
front_montant();
}
void calcul_cap(void)
{
C=T/(log2*200000);//R1+2R2=200000
if(C<=1)
{ C=C*1000.0
calibre='p';
}
else
{
calibre='n';
}
}
void affichage(void)
{
sprintf(val,"%6.2f",C);
envoie_commande(0x83);
for(i=0;i<6;i++) aff_LCD(val[i]);
envoie_commande(0x8A);
aff_LCD(calibre);
}
void main(void)
{
TRISB=0x00;// portb est lié à LCD
TRISC=0b00111110;///
RC0=1;/// alimentation du timer 555
init_LCD();
envoie_commande(0x80);
for(i=0;i<2;i++) aff_LCD(text[i]);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8 );
enable_interrupts(INT_TIMER1);
setup_ccp1(CCP_CAPTURE_FE);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
while(true)
{
calcul_temps();
calcul_cap();
affichage();
}
}] |
|