PIC16f877 avec mikroC et acquisition de mesures
Bonsoir ,
je programme sur mikroc pro v4.6, c'est la première fois que j'utilise ce logiciel.
je souhaiterais réaliser un système d'acquisition de température de 12 sondes et qui les affiche sur une interface graphique développée en C#.
je travaille avec PROTEUS PRO V7.7 sp2, j'ai donc utiliser un PIC 16F877 et j'ai produit le code ci-dessous, mais il n'a pas bien fonctionné avec mon interface en C# parce qu'il me transmet les 12 valeurs des sondes à l'instant où j'envoie la lettre 'c'.
ma demande et de m'aider à modifier ce programme afin d'avoir la possibilité de recevoir ces valeurs l'une après l'autre à chaque fois que j’envoie la lettre 'c' au PIC.
Merci d'avance pour vos réponses.
voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| float rtdv, rtdr, temp, y;
int msd, isd, i;
char temperature[6];
char uart_rd;
calcule()
{
rtdv=rtdv *5/1024;
rtdv=rtdv/5;
rtdr=rtdv*1000.0/(5.0-rtdv);
y=0.15274-(rtdr-100.065)*0.0002310;
if (y>=0)y = sqrt(y);
temp = (y-0.39083)/(-0.0001155);
bytetostr(temp,temperature);
delay_ms(1);
}
affichage()
{
UART1_Write_Text(temperature);
strcpy(temperature,"");
UART1_Write(13);
}
void main()
{
TRISA = 0xFF;
TRISE = 0xFF;
TRISB = 0x00;
PORTB = 1;
UART1_Init(9600);
for(;;)
{ portb.f1=1;
if (UART1_data_ready())
{
uart_rd = UART1_read();
if(uart_rd=='c') // envoie de la lettre c
{
PORTB.f0=1; // port RB0 est à 1
for (i=0;i<6;i++)
{
delay_ms(5);
rtdv=adc_read(i);
UART1_Write(13);
calcule();
affichage();
}
PORTB.f0=~portb.f0; // port RB0 prend le complément de l'état avant
for (i=0;i<6;i++)
{
delay_ms(5);
rtdv=adc_read(i);
UART1_Write(13);
calcule();
affichage();
}
}
}
}
} |