Pages: [1] 2   Go Down
Author Topic: Capteur de température DALLAS DS18S20  (Read 3054 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 smiley
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu as un DS18S20 et le code est pour un DS18B20 ....

Code:
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 smiley-wink

Regarde peut-être ça =>

Code:
#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
« Last Edit: October 27, 2011, 05:59:32 am by chicotore » Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5133
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 smiley
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 
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Mais alors comment lire en 9bits ? (déja que je sais pas faire en 12bits ^^)
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si ça peut aider :

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1209105786/all
Logged

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

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bof ...

hum... toujours un plaisir de vouloir aider !  smiley-lol


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

En cherchant un peu comment ça fonctionne.... ça peut aussi le faire  smiley-lol
« Last Edit: October 27, 2011, 07:46:44 am by Jean-François » Logged

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

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-grin 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 ..
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu as essayé ça :

http://www.netfluvia.org/code/ds18B20_test.pde
Logged

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

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Offline Offline
Sr. Member
****
Karma: 0
Posts: 451
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et si au lieu de ça

Code:
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:
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
Logged

Mon Blog sur l'environnement Arduino ... Tutos fait par un débutant pour les débutants ^^

http://chicowebsite.free.fr/

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu changes ça :

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

Par ça :

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

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

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: October 27, 2011, 09:43:36 am by pierreyves258 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ça ne marche pas (~26000°C smiley-grin)

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();
Logged

Offline Offline
Faraday Member
**
Karma: 34
Posts: 5133
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ça ne marche pas (~26000°C smiley-grin)

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:
#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
}
« Last Edit: October 27, 2011, 11:21:30 am by Artouste » Logged

Pages: [1] 2   Go Up
Jump to: