Go Down

Topic: Capteur de température DALLAS DS18S20 (Read 3454 times) previous topic - next topic

Bonjour, j'ai acheter 2 capteurs e température DS18S20.
Sur les capteurs il y a marquer DALLAS DS1820 1121C4 +919AA...

Avec le code de mon-club-elec pour le DS18B20 (http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertCapteursComplexesDS18B20ThermometreSimple) ça m'affiche ça dans le terminal:

Code: [Select]
1 capteur 1-wire present avec code adresse 64 bits : 10 10 96 54 02 08 00 64
Le capteur present n'est pas un capteur de temperature DS18B20.
Verification du code CRC de l'adresse 64 bits de ce capteur : VALIDE !
----- fin de la recherche du capteur ----

Temperature = 2.75 Degres Celsius.
...


Dans ma maison et le thermomètre a coté affiche 21.4°C...

Donc j'aimerais savoir ce qu'il faut modifier pour avoir la température avec le capteur que j'ai ...

Merci de votre aide :)

chicotore

#1
Oct 27, 2011, 12:57 pm Last Edit: Oct 27, 2011, 12:59 pm by chicotore Reason: 1
Tu as un DS18S20 et le code est pour un DS18B20 ....

Code: [Select]
Le capteur present n'est pas un capteur de temperature DS18B20

Il doit donc y avoir une différence sur la transmission des donnés entre ces deux capteurs ;)

Regarde peut-être ça =>

Code: [Select]
#include <LiquidCrystalRus.h>
#include <OneWire.h>
#include <OneWireTempSensor.h>

LiquidCrystalRus lcd(12, 11, 10, 5, 4, 3, 2);
OneWireTempSensor sensors(8);
int numdevs;
int value;
int temp;
byte newChar[8] = {
  B11000,
  B11000,
  B00110,
  B01001,
  B01000,
  B01001,
  B00110,
  B00000
};

void setup()
{
  lcd.createChar(0, newChar);
  lcd.begin(16, 2); 
  numdevs = sensors.getDevices();
}

void loop() {
  value = (int) sensors.getTempC(0);
if (value != 85)
{
    if (value < 10)
    {
      temp = value/10;
    }
    else
    {
      temp = value;
    }
}
lcd.setCursor(0,0);
lcd.print("Tемпература=");
lcd.setCursor(12,0);
lcd.print(temp);
lcd.setCursor(14,0);
lcd.write(0);
}


ici aussi => http://www.arduino.cc/playground/Learning/OneWire
Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Artouste


Bonjour, j'ai acheter 2 capteurs e température DS18S20.
Sur les capteurs il y a marquer DALLAS DS1820 1121C4 +919AA...

Avec le code de mon-club-elec pour le DS18B20 (http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertCapteursComplexesDS18B20ThermometreSimple) ça m'affiche ça dans le terminal:

Code: [Select]
1 capteur 1-wire present avec code adresse 64 bits : 10 10 96 54 02 08 00 64
Le capteur present n'est pas un capteur de temperature DS18B20.
Verification du code CRC de l'adresse 64 bits de ce capteur : VALIDE !
----- fin de la recherche du capteur ----

Temperature = 2.75 Degres Celsius.
...


Dans ma maison et le thermomètre a coté affiche 21.4°C...

Donc j'aimerais savoir ce qu'il faut modifier pour avoir la température avec le capteur que j'ai ...

Merci de votre aide :)

bonjour
C'est un probleme récurrent avec les DS18x20
Les DS18S20 ont une résolution fixe de 9 bits
Les DS18B20 ont une résolution programmable entre 9 et 12 bits
la c'est bien un DS18S20 (code famille 10H pour un S, 28H pour un B)
Il faut donc voir le code et le modifier pour qu'il lise en 9 bits 

chicotore: ça ne marche pas car je pense pense pas avoir la librairie OneWireTempSensor ...

J'avais remarquer que ce n'étais pas les mêmes ;)
Mais alors comment lire en 9bits ? (déja que je sais pas faire en 12bits ^^)

Jean-François

Si ça peut aider :

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1209105786/all
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Bof ... Je sais pas comment lire la température en 9 Bits ...

Pouvez vous me donner un code qui marche avec le DS18S20 svp

Jean-François

#6
Oct 27, 2011, 02:41 pm Last Edit: Oct 27, 2011, 02:46 pm by Jean-François Reason: 1

Bof ...


hum... toujours un plaisir de vouloir aider !  XD



Pouvez vous me donner un code qui marche avec le DS18S20 svp


En cherchant un peu comment ça fonctionne.... ça peut aussi le faire  XD
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

:D je sais ^^ mais je comprend pas trop comment lire la valeur en 9 bits...
Si non y a pas une librairie qui fais ça ? qui décode la valeur ?

OneWireTempSensor fais ça ? je trouve pas ou la télécharger ..

Jean-François

Tu as essayé ça :

http://www.netfluvia.org/code/ds18B20_test.pde
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Maintenant oui ^^
et ...
Device is not a DS18B20 family device.

Logique ... c'est un DS18S20 ;) mais la code de mon club elec marche mais affiche pas la bonne température car il lis en 12 Bits

chicotore

Et si au lieu de ça

Code: [Select]
byte data[12]; // Tableau de 12 octets pour lecture des 9 registres de RAM et des 3 registres d'EEPROM du capteur One Wire
byte adresse[8]; // Tableau de 8 octets pour stockage du code d'adresse 64 bits du composant One Wire


tu met

Code: [Select]
byte data[9]; // Tableau de 9 octets pour lecture des 9 registres de RAM et des 3 registres d'EEPROM du capteur One Wire
byte adresse[8]; // Tableau de 8 octets pour stockage du code d'adresse 64 bits du composant One Wire
Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Jean-François

Tu changes ça :

Code: [Select]
  if ( addr[0] != 0x28) {
Serial.print("Device is not a DS18B20 family device.\n");
return;


Par ça :

Code: [Select]
if ( addr[0] != 0x10) {
      Serial.print("Device is not a DS18S20 family device.\n");
      return;
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

#12
Oct 27, 2011, 03:50 pm Last Edit: Oct 27, 2011, 04:43 pm by pierreyves258 Reason: 1
Déja fait ... la ça marche mais bien sur ça ne donne pas la bonne température car il faut décoder la température en 9 Bits

EDIT: j'avais pas vu le post du dessus je vais essayer

Non ça ne marche pas (~26000°C :D)

Mais je ne comprend pas pourquoi un tableau de 12 parce que de toute façon la boucle d'écriture du tableau fais 9 tour ...

for ( i = 0; i < 9; i++)
    data = ds.read();

Artouste

#14
Oct 27, 2011, 06:09 pm Last Edit: Oct 27, 2011, 06:21 pm by Artouste Reason: 1

Non ça ne marche pas (~26000°C :D)

Mais je ne comprend pas pourquoi un tableau de 12 parce que de toute façon la boucle d'écriture du tableau fais 9 tour ...

for ( i = 0; i < 9; i++)
   data = ds.read();

re
voir
http://www.ordinoscope.net/index.php/Electronique/Hardware/Sensors/DS1820/Arduino

Code: [Select]
#include <OneWire.h>

/* DS18S20 Temperature chip i/o */

OneWire  ds(10);  // on pin 10
int t1 ;
void setup(void) {
  Serial.begin(9600);
   pinMode(13, OUTPUT);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];
 
  if ( !ds.search(addr)) {
    Serial.print("No more addresses.\n");
    ds.reset_search();
    delay(250);
    return;
  }
 
  Serial.print("R=");
  for( i = 0; i < 8; i++) {
    if (addr[i] < 16) Serial.print("0");
    Serial.print(addr[i], HEX);
    Serial.print(" ");
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n");
      return;
  }
 
  if ( addr[0] > 0x28) {
      Serial.print("Device is not a DS18S20 family device.\n");
      return;
  }

  // The DallasTemperature library can do all this work for you!

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
 
  delay(800);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
 
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("P=");
  Serial.print(present,HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print( OneWire::crc8( data, 8), HEX);
   Serial.print(" ");
   int temp = data[0]/2;
  Serial.print(temp, DEC);
  t1=temp % 2;
  Serial.print(",");
    Serial.print(t1*5,DEC);

  Serial.println();
  digitalWrite(13, HIGH);   // set the LED on
  delay(100); // for blink on activity
  digitalWrite(13, LOW);    // set the LED off
}

Go Up