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 :
la fonction delay prise de la bibliotèque de cc5x voila son code :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; } }
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); }
-----