Probleme de durée d'acquisition d'une mesure capteur OWSApres avoir testé 3 sondes DS18B20 sur un meme bus OWS , avec gestion des ID # ... OK
je teste actuellement la version 1 bus --1 sonde
nota 1: résolution 12bits +- 0,0625°C
donc avec 3 bus OWS pour RA0,RA1,RA2
Sur une demande d'acquisition de mesure via la requette 0x44
Code : Tout sélectionner
Convert T [44h]
This command initiates a single temperature conversion.
Following the conversion, the resulting thermal data is
stored in the 2-byte temperature register in the scratchpad memory and the DS18B20 returns to its low-power
idle state. If the device is being used in parasite power
mode, within 10µs (max) after this command is issued
the master must enable a strong pullup on the 1-Wire bus
for the duration of the conversion (tCONV) as described
in the Powering the DS18B20 section. If the DS18B20 is
powered by an external supply, the master can issue read
time slots after the Convert T command and the DS18B20
will respond by transmitting a 0 while the temperature
conversion is in progress and a 1 when the conversion is
done.
j'obtiens la mesure après 780mS ! , alors qu'en utilisant un delay de 485µS ( notion de time slot 480µs)
j'obtiens < de 100mS !
780x3=> .. 2,34sec ..delay redibitoire pour mon appli finale ..
j'ai bien noté aussi qu'une résolution de 11 bits diviserait par 2 le temps maxi de 780mS ...
exemple avec T2
réponse en 780mS avec attente lecture bit apres lancement lecture temper 0x44
exemple T1 et T3
réponse en 100mS avec __delay_us(485); apres lancement lecture temper 0x44
Code : Tout sélectionner
float getTemperature2()
{
unsigned char i;
float temperature1;
unsigned char scratchPad[9] = {0,0,0,0,0,0,0,0,0};
onewireInit_1();
onewireWriteByte_1(0xCC);
onewireWriteByte_1(0x44);
// 780mS avec le test ci dessous
// while (1) {
// if (onewireReadBit_1()) // au moins 1 capteur connecté
// break;
// }
// 100 ms global avec le delay
__delay_us(485);
onewireInit_1();
onewireWriteByte_1(0xCC);
onewireWriteByte_1(0xBE);
for (i = 0; i < 2; i++) scratchPad[i] = onewireReadByte_1();
onewireInit_1();
temperature1 = ((scratchPad[1] * 256) + scratchPad[0])*0.0625;
return temperature1;
}
(0.000) 00000 T1.INTER.= 18.437 ° C
(0.790) T2.EXTER.= 19.000 ° C
(0.109) T3.EAU = 18.250 ° C
(0.070)
(0.060) 00001 T1.INTER.= 18.375 ° C <-avec __delay_us(485); apres lancement lecture temper 0x44
(0.745) T2.EXTER.= 19.000 ° C <-avec attente lecture bit apres lancement lecture temper 0x44
(0.094) T3.EAU = 18.250 ° C <-avec __delay_us(485); apres lancement lecture temper 0x44
(0.085)
(0.077) 00002 T1.INTER.= 18.437 ° C
(0.729) T2.EXTER.= 19.062 ° C
(0.096) T3.EAU = 18.250 ° C
(0.089)
(0.005) 00003 T1.INTER.= 18.437 ° C
(0.795) T2.EXTER.= 19.062 ° C
(0.098) T3.EAU = 18.250 ° C
(0.082)
ça m'arrange bien .. et ne pas avoir une solution "qui tombe en marche "
Est-ce parce que les mesures ne sont pas contigües ? ( à la queue leue leue sur le meme bus ) ?avec delay 485µ sur chaque mesure et un delay de boucle de 1 sec
[i](0.998) 00021
(0.097) T1.INTER.= 19.250° C
(0.034) T2.EXTER.= 19.812 °C
(0.072) T3.EAU = 19.750 °C
(0.090)
(0.991) 00022 <--- delay de boucle 1sec
(0.048) T1.INTER.= 19.250° C
(0.055) T2.EXTER.= 19.812 °C
(0.102) T3.EAU = 19.750 °C
(0.077) <--- delay de boucle 1sec
(1.000) 00023
(0.073) T1.INTER.= 19.250° C
(0.043) T2.EXTER.= 19.812 °C
(0.083) T3.EAU = 19.750 °C
votre avis ?à suivre ...


Merçi de toujours répondre à mes élucubrations..
On ne peut nier l'evidence ,même incomprise !