DS18B20 écriture dans le scratchpad

Informations et questions sur les composants tiers de la boutique (émetteur/récepteur RF, capteurs...)

DS18B20 écriture dans le scratchpad

Message non lude richie » Jeu 7 Mar 2013 16:53

Bonjour,
je souhaiterais modifier la précision de T° en modifiant les bits R1 et R0 du registre de configuration (byte 4 du scratchpad) ceci afin de réduire le temps de conversion.
je ne comprends pas le fonctionnement de la commande 4EH.
quelqu'un l'aurait il fait ou compris ?
merci pour votre aide
richie
 
Messages: 8
Inscription: Ven 17 Aoû 2012 15:01

Re: DS18B20 écriture dans le scratchpad

Message non lude pavan » Sam 20 Avr 2013 08:46

bonjour : on n'a pas (à notre niveau ) à écrire dans le scratchpad. La seule commande à en effectuer est la lecture des octets 1 et 2

poids fort (1er octet) exemple 0000 0111 poids faible (second octet) 1101 0000

les 5 premiers octets du poids fort correspondent au signe : 0000 0 donc signe positif (1111 1 serait le signe négatif )

ensuite : puissances de 2 décroissantes 64 32 16 8 4 2 1 0,5 0,25 0,125 0,0625

donc ensuite : 111 correspond à 1*64+1*32+1*16 = 112

puis 1101 correspond à 1*8+1*4+0*2+1*1 = 13

enfin 0100 donne 0*0,5 + 1*0,25 + 0*0,125 + 0*0,00625 = 0 Soit au total 112+13+0,25 = 125,25 °C

Les températures négatives sont en complément à 2 ... (faire une petite recherche sur le sujet...)

voici un exemple de code :

#include <OneWire.h> // Inclusion de la librairie OneWire


#define DS18B20 0x28 // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 3 // Broche utilisée pour le bus 1-Wire
char msg[10];
char sge;
unsigned int temper;
unsigned int temper2;
float temper1;
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds

// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp){
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté
ds.reset(); // On reset le bus 1-Wire
ds.skip(); // On sélectionne le DS18B20

ds.write(0x44, 1); // On lance une prise de mesure de température
delay(1000); // Et on attend la fin de la mesure

ds.reset(); // On reset le bus 1-Wire
ds.skip(); // On sélectionne le DS18B20
ds.write(0xBE,1); // On envoie une demande de lecture du scratchpad, les 2 octets qui nous intéressent

for ( int i = 0; i < 2; i++) {// On lit le scratchpad
data[i] = ds.read(); // Et on stocke les octets reçus
}
temper = 256*data[1]+data[0] ;// conversion sur deux octets pour transmission
if (temper < 16384)
{sge= '+' ;//signe positif
}

else
{
sge = '-' ;//signe negatif
temper = ~temper +1 ;//complement à 2 , on décode la température en valeur absolue
}



temper2 = temper & 2047;

temper1 = float (temper2) ;
temper1 = temper1 * 0.0625 ;
}
// Pas d'erreur
return true;
}

// setup()
void setup() {



// loop()
void loop() {
float temp;

// Lit la température ambiante à ~1Hz
if(getTemperature(&temp)) {

}
}
Dernière édition par pavan le Mer 1 Mai 2013 15:58, édité 2 fois.
raspberry, arduino uno
pavan
 
Messages: 6
Inscription: Dim 24 Mar 2013 11:23

Re: DS18B20 écriture dans le scratchpad

Message non lude pavan » Dim 28 Avr 2013 09:32

j'ai modifié la réponse précédente en apportant des précisions et ai traité le cas des températures négatives.
raspberry, arduino uno
pavan
 
Messages: 6
Inscription: Dim 24 Mar 2013 11:23

Re: DS18B20 écriture dans le scratchpad

Message non lude richie » Lun 27 Mai 2013 14:21

Bonjour et merci pour votre réponse, j'ai contourné mon pb. Néanmoins si les 2 bits R0 et R1 existent c'est pour s'en servir.
lorsqu'on les lit par défaut on les trouve à 1 et 1 et le temps de conversion est de 750 msec.
Si je pouvais écrire 0 et 0 et que j'accepte une baisse de précision de 3 bits, le temps de conversion ne serait que de 94 msec.
Le constructeur a prévu 4 temps de conversion possibles associés à 4 résolutions mais n'est pas trés explicite sur la maniére de faire et je n'ai trouvé aucun exemple.
encore merci pour votre réponse.
richie
 
Messages: 8
Inscription: Ven 17 Aoû 2012 15:01


Retourner vers Composants tiers

Qui est en ligne

Utilisateurs parcourant ce forum: Exabot [Bot] et 2 invités