bricofoy:
pourtant cette lib fonctionne, j'ai fait un datalogger qui enregistre les temp sur carte SD avec. j'avais 3 18B20 raccordés dessus, ça fonctionne, dont deux en tube inox comme les tiens.
mais par contre je n'ai pas essayé de recompiler le truc avec la 1.0, peut-être que ça ne fonctionne que avec 0.22 ?
Que ce soit avec la 1.0 ou la 0.22, j'ai le même problème, température a 0
Bon j'ai recommandé des nouveaux capteurs, nus ce coup ci que je cablerais moi même.
barbudor, je penche aussi pour un problème de fabrication, je ne vois pas d'autres explications
JE serais fixé d'ici une semaine, le temps de recevoir les autres capteurs.
j'avais trouvé un "scanner de bus 1Wire" qui listait tout ce qui répondait sur le bus, il te faudrait essayer un programme dans ce genre. Je crois d'ailleurs que dans les exemples de la lib que j'ai posté il y a un truc dans ce genre.
Après, pour ce que j'en ai vu, ls DS18b20 sont assez résistants, tu peux inverser data et +5 pour tester sans trop de risque de les cramer. Si ça se trouve data est sur le rouge... j'ai cherché les miens hier pour vérifier, et je ne les ai pas retrouvés
bricofoy:
j'avais trouvé un "scanner de bus 1Wire" qui listait tout ce qui répondait sur le bus, il te faudrait essayer un programme dans ce genre. Je crois d'ailleurs que dans les exemples de la lib que j'ai posté il y a un truc dans ce genre.
Après, pour ce que j'en ai vu, ls DS18b20 sont assez résistants, tu peux inverser data et +5 pour tester sans trop de risque de les cramer. Si ça se trouve data est sur le rouge... j'ai cherché les miens hier pour vérifier, et je ne les ai pas retrouvés
bricofoy:
j'avais trouvé un "scanner de bus 1Wire" qui listait tout ce qui répondait sur le bus, il te faudrait essayer un programme dans ce genre. Je crois d'ailleurs que dans les exemples de la lib que j'ai posté il y a un truc dans ce genre.
Après, pour ce que j'en ai vu, ls DS18b20 sont assez résistants, tu peux inverser data et +5 pour tester sans trop de risque de les cramer. Si ça se trouve data est sur le rouge... j'ai cherché les miens hier pour vérifier, et je ne les ai pas retrouvés
Ok,je teste cela ce soir et vous tiens au courant
Bonjour
Il serait étonnant que tes 2 sondes soient HS
Je penche plutôt pour un "pb" de cablage
si j'en crois la photo
le cable sort sur 4 conducteurs : tresse,noir,rouge,jaune
tu a cablé comment ? tresse et noir sont reliés en interne ?
les ds18b20 n'ont besoin que de 2 fils (au moins pour test)
fait un test en parasitic power avec le code dessous, je viens de tester en IDE 1.02 , 18b20 en TO92, 1920 en ibutton
tu relie tresse,noir,rouge sur GND arduino (je sais ça surprend mais c'est prevu pour ( voir datasheet ds18b20)
et jaune sur 8 arduino (j'ai testé sur 2,8,10)
bien verifier la 4.7K entre +5V et 8 arduino
#include <OneWire.h>
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library
OneWire ds(8); // on pin 8
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
delay(1000); // 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(" Data = ");
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.println();
// convert the data to actual temperature
unsigned int raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// count remain gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print(" Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
}
Bonjour, j'ai une solution avec 3 sondes qui fonctionne, j'ai pioché du code un peu de partout et j'utilise la librairie DallasTemperature, voici le résultat (PHP + MySQL + JpGraph) :
bricofoy:
j'avais trouvé un "scanner de bus 1Wire" qui listait tout ce qui répondait sur le bus
Bonjour bricofoy
J'ai rapidement modifié à la hussarde un des prog pour en faire un "pseudo scanner OW"
Les compos listés sont ceux que j'ai aujourd'hui disponibles sous la main
ça liste juste l'ID et calcul/verifie le CRC
petite info : la plupart des compo en 1W repondent à la lecture de rom en parasitic power, ce qui est suffisant pour les detecter, mais attention
sorti de là, un certain nombre ne sont pas fonctionnels sans alim externe .
#include <OneWire.h>
OneWire ds(8); // on pin 8
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.println();
Serial.println("END OF SCAN.");
Serial.println();
ds.reset_search();
delay(2500);
return;
}
Serial.println("--------------");
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
Serial.print("CHIP FAMILY ");
Serial.print(addr[0],HEX);
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x01:
Serial.println(" DS1990"); //
break;
case 0x02:
Serial.println(" DS1991"); //
break;
case 0x04:
Serial.println(" DS1994"); //
break;
case 0x05:
Serial.println(" DS2405"); //
break;
case 0x06:
Serial.println(" DS1992"); //
break;
case 0x08:
Serial.println(" DS1993"); //
break;
case 0x10:
Serial.println(" DS18S20 DS1920"); // or old DS1820
break;
case 0x21:
Serial.println(" DS1921");
break;
case 0x22:
Serial.println(" DS1822");
break;
case 0x24:
Serial.println(" DS1904");
break;
case 0x28:
Serial.println(" DS18B20");
break;
case 0x29:
Serial.println(" DS2408");
break;
case 0x41:
Serial.println(" DS1923");
break;
default:
Serial.println(" is not listed.");
return;
}
}
Je ne sais pas si cela change quelque chose mais je n'ai que 3 fils qui sortent du capteur.
J'essayerais quand même le code en rentrant voir si le capteur fonctionne.
polotche:
Bon,
j'ai testé ton programme artouste, et j'ai dans le sérial monitor "end of scan" et c'est tout =(
bonsoir
rien d'autre de cablé que le DS18B20 ?
test fait en parasitic power (noir+rouge sur gnd) ?
verif (valeur) de la 4.7K et câblage ?
test sur un autre pin que le 8 (adapter le programme)
par acquis de conscience , j'ai "reverifié/rechargé" le prog posté plus haut
avec 4 compos differents sur la ligne, ça retourne çà
ROM = 10 2F 7D BC 0 8 0 1D
CHIP FAMILY 10 DS18S20 DS1920
ROM = 28 EC FB B8 0 0 0 11
CHIP FAMILY 28 DS18B20
ROM = 5 A5 CA F 0 0 0 7B
CHIP FAMILY 5 DS2405
ROM = 5 73 CA F 0 0 0 D
CHIP FAMILY 5 DS2405
END OF SCAN.
je continue a croire que c'est bien mon capteur qui est en cause, je viens de refaire des tests et j'ai toujours "end of scan" tout seul.
J'ai aussi utilisé l'autre capteur et c'est toujours pareil.
J'ai fait exactement ce que tu m'as dit, c'est a dire:
-le rouge et noir sur gnd
-le jaune sur un autre pin avec adaptation du programme
-verif de la résistance
-rien d'autre de branché sur l'arduino
Ca me parait bizarre quand même que les deux capteurs soient cramés, a moins d'avoir fait une mauvaise manip au début mais bon, je n'y croit pas de trop.
polotche:
Ca me parait bizarre quand même que les deux capteurs soient cramés, a moins d'avoir fait une mauvaise manip au début mais bon, je n'y croit pas de trop.
Les DS18B20 particulierement (et les compos1W en général) sont très tolérants aux "erreurs" de connections , j'en "martyrise" depuis des années
et je ne me souvient pas en avoir "cuit" un seul (évidemment en restant sur du 5V "correct" 8) )
Pourquoi la lib OneWire ne pourrait-elle pas utiliser une pin An ?
On peut bien pourtant les utiliser comme des pins numériques ?
Je l'ai encore fait ce week-end pour tester une matrice de leds 8x8.
Est-ce pas plutôt que tu n'a pas indiqué le numéro de pin correctement ?
D'ailleurs ton code exemple plus haut dit qu'il utilise la pin 8.
barbudor:
Pourquoi la lib OneWire ne pourrait-elle pas utiliser une pin An ?
On peut bien pourtant les utiliser comme des pins numériques ?
Je l'ai encore fait ce week-end pour tester une matrice de leds 8x8.
Est-ce pas plutôt que tu n'a pas indiqué le numéro de pin correctement ?
D'ailleurs ton code exemple plus haut dit qu'il utilise la pin 8.
salut,
j'ai suivi le code et mis le data sur le pin 8 analog in de l'arduino et ca ne marchais pas. lorsque je l'ai mis sur le pin8 pwm cela fonctionne nickel.