Offline
Newbie
Karma: 0
Posts: 42
|
 |
« on: October 27, 2011, 05:17:02 am » |
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: 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
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 451
|
 |
« Reply #1 on: October 27, 2011, 05:57:44 am » |
Tu as un DS18 S20 et le code est pour un DS18 B20 .... 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 => #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
|
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2440
|
 |
« Reply #2 on: October 27, 2011, 06:00:22 am » |
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: 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 DS18 S20 ont une résolution fixe de 9 bits Les DS18 B20 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
Newbie
Karma: 0
Posts: 42
|
 |
« Reply #3 on: October 27, 2011, 06:48:47 am » |
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 ^^)
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #4 on: October 27, 2011, 07:05:36 am » |
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 42
|
 |
« Reply #5 on: October 27, 2011, 07:37:42 am » |
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
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #6 on: October 27, 2011, 07:41:42 am » |
Bof ... hum... toujours un plaisir de vouloir aider !  Pouvez vous me donner un code qui marche avec le DS18S20 svp
En cherchant un peu comment ça fonctionne.... ça peut aussi le faire 
|
|
|
|
« 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 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 42
|
 |
« Reply #7 on: October 27, 2011, 08:00:19 am » |
 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
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #8 on: October 27, 2011, 08:03:49 am » |
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 42
|
 |
« Reply #9 on: October 27, 2011, 08:19:54 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 451
|
 |
« Reply #10 on: October 27, 2011, 08:24:11 am » |
Et si au lieu de ça 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 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
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #11 on: October 27, 2011, 08:33:54 am » |
Tu changes ça : if ( addr[0] != 0x28) { Serial.print("Device is not a DS18B20 family device.\n"); return; Par ça : 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 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 42
|
 |
« Reply #12 on: October 27, 2011, 08:50:22 am » |
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
Newbie
Karma: 0
Posts: 42
|
 |
« Reply #13 on: October 27, 2011, 09:54:49 am » |
Non ça ne marche pas (~26000°C  ) 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
Edison Member
Karma: 6
Posts: 2440
|
 |
« Reply #14 on: October 27, 2011, 11:09:19 am » |
Non ça ne marche pas (~26000°C  ) 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#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
|
|
|
|
|
|