Go Down

Topic: Capteur de température DALLAS DS18S20 (Read 3709 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy