Bonjour je galère en ce moment pour mettre en place un systeme pic 18f4550 avec une sonde DS18B20.
je n'arrive pas a recuperer les bits de temperature.
Tout le reste fonctionne bien car sur l'oscillo j'ai bien la valeur de la temperature de l'octet haut et bas qui correspondent.
cependant je n'arrive pas a le recuperer sur la variable valeur du programme ci dessous. HELP!!!!
les tempos sont bonnes c'est juste que le code suivant ne me permet pas de capturer la valeur du bus a l'instant.Code:unsigned char _Readbyte(void) { unsigned char valeur=0; TRISAbits.TRISA0 = 0; PORTAbits.RA0 = 0; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us TRISAbits.TRISA0 = 1; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us if (PORTAbits.RA0) { valeur=valeur|0x01; } Delay10TCYx(5);//lecture premier bit TRISAbits.TRISA0 = 0; PORTAbits.RA0 = 0; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us TRISAbits.TRISA0 = 1; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us if (PORTAbits.RA0) { valeur=valeur|0x02; } Delay10TCYx(5);//lecture 2 bit TRISAbits.TRISA0 = 0; PORTAbits.RA0 = 0; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us TRISAbits.TRISA0 = 1; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us if (PORTAbits.RA0) { valeur=valeur|0x04; } Delay10TCYx(5);//lecture 3 bit TRISAbits.TRISA0 = 0; PORTAbits.RA0 = 0; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us TRISAbits.TRISA0 = 1; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us if (PORTAbits.RA0) { valeur=valeur|0x08; } Delay10TCYx(5);//lecture 4 bit TRISAbits.TRISA0 = 0; PORTAbits.RA0 = 0; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us TRISAbits.TRISA0 = 1; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us if (PORTAbits.RA0) { valeur=valeur|0x10; } Delay10TCYx(5);//lecture 5 bit TRISAbits.TRISA0 = 0; PORTAbits.RA0 = 0; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us TRISAbits.TRISA0 = 1; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us if (PORTAbits.RA0) { valeur=valeur|0x20; } Delay10TCYx(5);//lecture 6 bit TRISAbits.TRISA0 = 0; PORTAbits.RA0 = 0; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us TRISAbits.TRISA0 = 1; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us if (PORTAbits.RA0) { valeur=valeur|0x40; } Delay10TCYx(5);//lecture 7 bit TRISAbits.TRISA0 = 0; PORTAbits.RA0 = 0; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us TRISAbits.TRISA0 = 1; _asm nop nop nop nop nop nop nop nop nop nop nop nop nop nop _endasm//15us if (PORTAbits.RA0) { valeur=valeur|0x80; } Delay10TCYx(5);//lecture 8 bit return valeur; }
je joins aussi une photo du montage sous isis.Code:if (PORTAbits.RA0) { valeur=valeur|0x80; //ou 0x01,0x02,0x04,0x08,0x10,0x20,0x40 }
merci de votre aide.![]()
-----