Bonjour,

j'ai un pic 16f876A avec cristal 4MHZ et 2 condensateurs 22PF et un DS18b20 connecté a RA0 par une résistance 4,7K connecté au 5V.
une diode led connecté a RA5 pour tester la présence du ds18b20.

je veux essayé la fonction ow_reset mais toujours la led est éteinte lorsque je déconnecte le ds18b20
je le connecte ou je le déconnecte elle est toujours éteinte.
voila le code avec cc5x et mplab :

Code:
#pragma chip PIC16F876
#include "int16CXX.H"
#include "delay.c"
#define DQ_P PORTA.0
#define DQ_T TRISA.0
unsigned char ow_reset(void)
{
unsigned char presence;
DQ_T = 0; //Output a zero reset pulse length
DQ_P = 0; //pull DQ line low
delay_ms(1); // en principe 480us g mis 1ms
DQ_T = 1;// allow line to return high
delay_10us(9); // en principe 60us g mis 90
presence = DQ_P; // get presence signal
delay_10us(50); // en principe 240us g mis 500us
return(presence); // presence signal returned
} // 0=presence, 1 = no part

void main(void)
{
//Setup Ports

 TRISA = 0b00000001; // RA input

OPTION.7 = 0; //Enable weak pull-ups


       while(1)
        {   
          if (ow_reset() == 1)
           PORTA.5 = 1;
          else
           PORTA.5 = 0;    
        }
  
}
la fonction delay prise de la bibliotèque de cc5x voila son code :

Code:
/*
delay_10us (char) : delay en multiple de 10 us pour un quartz de 4 MHz
delay_ms (char) : delay en ms pour un quartz de 4 MHz
delay_10ms (char) : delay en multiple de 10 ms pour un quartz de 4 MHz
 */
//--------------------------delay en multiple de 10 us. Quartz de 4 MHz ---------------
void delay_10us (char usecs)
{
while (-- usecs > 0)
{
clrwdt(); // only if necessary, nop(); a la place
nop();
nop();
nop();
nop();
}
}
//--------------------------delay en multiple de ms. Quartz de 4 MHz -----------------
void delay_ms (char millisec)
{
OPTION = 2; // prescaler divide by 8
do
{
TMR0 = 0;
clrwdt(); // only if necessary
while (TMR0 < 125); // 125us * 8 =1000us
}
while (-- millisec > 0);
}
//-----------------delay en multiple de 10ms. Quartz de 4 MHz, erreur 0.16 %--------------
void delay_10ms (char n)
{
char i;
OPTION = 7; //prescaler to 256
do
{
clrwdt(); // only if necessary
i =TMR0 +39; // 256us * 39 =10 ms
while (i != TMR0);
}
while (--n > 0);
}