Сколько DS18b20 можно повесить на одну шину?

avgaz
Offline
Зарегистрирован: 23.09.2014

В общем хотел подключить 6 датчиков но обломался при подключении более 5 перестают работать, подлючены дачики все паралельно через один резистор 4.7К, думал шестой датчик не рабочий но поменял его местами с пятым он работает.

использую мегу и такой скетчь

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 9

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);
DeviceAddress Thermometer1 = {
  0x28, 0xFF, 0x45, 0xF7, 0x4C, 0x04, 0x00, 0x35 }; 
  DeviceAddress Thermometer2 = {
  0x28, 0xFF, 0x16, 0x50, 0x73, 0x04, 0x00, 0x40 };
  DeviceAddress Thermometer3 = {
  0x28, 0xFF, 0x17, 0x43, 0x3A, 0x04, 0x00, 0x82 }; 
DeviceAddress Thermometer4 = {
  0x28, 0xFF, 0x1A, 0x19, 0x63, 0x14, 0x03, 0x56 };  
DeviceAddress Thermometer5 = {
  0x28, 0xFF, 0xD6, 0x33, 0x63, 0x14, 0x03, 0x3E }; 
  DeviceAddress Thermometer6 = {
  0x28, 0xFF, 0xCF, 0x41, 0x63, 0x14, 0x03, 0x1E };

void setup() {

  sensors.begin();
sensors.setResolution(Thermometer1, 12);
  sensors.setResolution(Thermometer2, 12);
  sensors.setResolution(Thermometer3, 12);
  sensors.setResolution(Thermometer4, 12);
  sensors.setResolution(Thermometer5, 12);
  sensors.setResolution(Thermometer6, 12);

  Serial.begin(9600);
}

void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  Serial.println(tempC);
}
void loop() {

  sensors.requestTemperatures();
  Serial.print("Sensor1  ");
  printTemperature(Thermometer1);

  Serial.print("Sensor2  ");
  printTemperature(Thermometer2);
Serial.print("Sensor3  ");
  printTemperature(Thermometer3);

  Serial.print("Sensor4  ");
  printTemperature(Thermometer4);
Serial.print("Sensor5  ");
  printTemperature(Thermometer5);

  Serial.print("Sensor6  ");
  printTemperature(Thermometer6);

}

В чем может быть проблема?

vov4ik
Offline
Зарегистрирован: 10.09.2013

Не факт но попробуйте   sensors.requestTemperatures(); delay(1000); 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Одиннадцать штука параллельно работают без проблем. Резистор один.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Резистор поменьше- 1к5 поставьте.....

bwn
Offline
Зарегистрирован: 25.08.2014

А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

bwn пишет:

А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?

а как еще можно подключить эти датчики? Они же на одной шине...

bwn
Offline
Зарегистрирован: 25.08.2014

Gippopotam пишет:

bwn пишет:

А что в данном случае вы понимаете под словом параллельно? Где и как расположены датчики?

а как еще можно подключить эти датчики? Они же на одной шине...

раскидать звездой в параллель, достаточно длинными шлейфами.

avgaz
Offline
Зарегистрирован: 23.09.2014

vov4ik пишет:

Не факт но попробуйте   sensors.requestTemperatures(); delay(1000); 

Не помогло, такое ощущение что не хватает питания датчикам от ардуины к ней ещё tft экран подключен и реле.

avgaz
Offline
Зарегистрирован: 23.09.2014

bwn пишет:

раскидать звездой в параллель, достаточно длинными шлейфами.

примерно так и есть резистор у самой ардуины далее выходять 20см три провода и к ним уже цепляются разной длины провода ко всем датчикам

bwn
Offline
Зарегистрирован: 25.08.2014

avgaz пишет:

bwn пишет:

раскидать звездой в параллель, достаточно длинными шлейфами.

примерно так и есть резистор у самой ардуины далее выходять 20см три провода и к ним уже цепляются разной длины провода ко всем датчикам

Насколько помню, правильно - это один шлейф и от него ответвления максимально короткие.

avgaz
Offline
Зарегистрирован: 23.09.2014

bwn пишет:

Насколько помню, правильно - это один шлейф и от него ответвления максимально короткие.

Ну посути у меня отдин шлейф только короткий а отводы на датчики длиные по другому не как, датчики в разных сторонах и на разном растоянии самый далекой метров 15 остальные в пределах 2-5метров.

 

Подключил отдельное питание стало лучше кажет все 6 датчиков только один самый дальний переодически раз 5-10мин выдает -127

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Нет таких температур, скорее всего библиотека чует что вы опрашиваете или не существующий или не ответивший датчик и получив 1111 1111 1111 1111  ( резистор привязки) выдаёт вам -127.
 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

По поводу количества.......
Вторая колонка- номер канала (аналогового пина, так удобнее на  Мега128) к которому подключен шлейф.

И это не на столе 20 сантиметров, каждый шлейф по метров 100, запутан по зданию.

Я на нулевом канале насчитал 17 датчиков......

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Почитайте это.

Кроме того, из личного опыта:

- не используйте паразитное питание (1-wire по 2-м проводам), используйте отдельное питание (1-wire по 3-м проводам) лучше всего взять две витые пары из кабеля, по одной пустить питание, по второй данные, землю каждой пары соединить. 

- резистор 4.7к это много, по оригинальным спецификациям 2.2к, но можно ещё меньше.

- на длинной и/или кривой лини без активной подтяжки никиак.

При использовании активной подтяжки у меня без проблем работает 20 датчиков на линии 200м+ с ответвлениями на датчики по 2-3 метра.

avgaz
Offline
Зарегистрирован: 23.09.2014

KVadik пишет:

Почитайте это.

Кроме того, из личного опыта:

- не используйте паразитное питание (1-wire по 2-м проводам), используйте отдельное питание (1-wire по 3-м проводам) лучше всего взять две витые пары из кабеля, по одной пустить питание, по второй данные, землю каждой пары соединить. 

- резистор 4.7к это много, по оригинальным спецификациям 2.2к, но можно ещё меньше.

- на длинной и/или кривой лини без активной подтяжки никиак.

При использовании активной подтяжки у меня без проблем работает 20 датчиков на линии 200м+ с ответвлениями на датчики по 2-3 метра.

У меня используется 3 провода питание минус и сигнальный пин на всех датчиках, попробую конечно уменьшить до 2К резистор просто у меня нет в наличии 2.2К есть по 1К.

Что такое активная подтяжка? если использовать к примеру вроли шины витую пару то как к ней цеплять датчики? разрезать шину на отводы к каждому датчику и скручивать?

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

avgaz пишет:

У меня используется 3 провода питание минус и сигнальный пин на всех датчиках, попробую конечно уменьшить до 2К резистор просто у меня нет в наличии 2.2К есть по 1К.

-[1к]-+-[1к]- = -[2к]- , но и 1к будет работать.

avgaz пишет:

Что такое активная подтяжка? 

Что-то типа такого:

[/quote]

avgaz пишет:

если использовать к примеру вроли шины витую пару то как к ней цеплять датчики? разрезать шину на отводы к каждому датчику и скручивать?

ну да.
avgaz
Offline
Зарегистрирован: 23.09.2014

Блин замучался уже (((( не фига работать нормально не хочет, последний самый удаленный датчик переодически выдает ошибку -127 уже и повесил на одну шину и резистор поставил на 2К и датчик заменил и питание отдельное на датчики, незнаю что ещё придумать. Самое прикольное что чем больше датчиков тем чаще эта ошибка. К примеру если на шине 3 датчика то ошибка возникает где то раз в час иногда реже, если 6 датчиков то ошибка раз в 5-10 минут и уже глюкает не только последний на и предпоследний.

Самое печальное, что от этих датчиков работает реле то есть по разнице показаний температуры включается и выключается и когда ошика реле срабатывает (((

Ещё прикол в том что всю зиму эти же датчики только 4 штуки отработали с NANO без проблем, а вот решил всё перевести на мегу с tft и начались проблемы ((

Может есть варианты програмно обойти ошибку ну что бы её игнорировать?

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

avgaz пишет:

...переодически выдает ошибку -127...

...если на шине 3 датчика то ошибка возникает где то раз в час иногда реже...

...если 6 датчиков то ошибка раз в 5-10 минут...

Так игнорируйте програмно и повторяйте опрос. Вы же космическим кораблем управляете, я надеюсь.

з.ы. ой очепятка "Вы же НЕ космическим кораблем управляете, я надеюсь."

avgaz
Offline
Зарегистрирован: 23.09.2014

Вот мой полный скетч который сечас работает

// термопары
#include "max6675.h"
int thermoDO = A1;
int thermoCS = A2;
int thermoCLK = A0;
float termopara = 0;
int thermo2DO = A4;
int thermo2CS = A3;
int thermo2CLK = A5;
float termopara2 = 0;
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
MAX6675 thermocouple2(thermo2CLK, thermo2CS, thermo2DO);

  
// Экран
#include <UTFT.h>
extern uint8_t BigFont[];
extern uint8_t SevenSegmentFull[];
UTFT myGLCD(CTE32HR,38,39,40,41);

#include <EEPROM.h>
int addr = 0; //адрес в EEPROM
int starts = LOW;
int relestatus = 0;
#include <OneWire.h>
#include <DallasTemperature.h>
int val = 0; 
float temp1 = 0; 
float temp2 = 0; 
float temp3 = 0;
float temp4 = 0; 
float temp5 = 0; 
float temp6 = 0; 
#define ONE_WIRE_BUS 12 // пин DS18b20
boolean running = false;
OneWire oneWire(ONE_WIRE_BUS);
 
DallasTemperature sensors(&oneWire);
DeviceAddress Thermometer1 = {
  0x28, 0xFF, 0x17, 0x43, 0x3A, 0x04, 0x00, 0x82 }; // Котел
  DeviceAddress Thermometer2 = {
  0x28, 0xFF, 0x16, 0x50, 0x73, 0x04, 0x00, 0x40 }; // подача в котел
  DeviceAddress Thermometer3 = {
  0x28, 0xFF, 0x45, 0xF7, 0x4C, 0x04, 0x00, 0x35 }; // темп из дома 
DeviceAddress Thermometer4 = {
  0x28, 0xFF, 0x1A, 0x19, 0x63, 0x14, 0x03, 0x56 };  // подача в дом
DeviceAddress Thermometer5 = {
  0x28, 0xFF, 0xD6, 0x33, 0x63, 0x14, 0x03, 0x3E }; // ТА
  DeviceAddress Thermometer6 = {
  0x28, 0xFF, 0xCF, 0x41, 0x63, 0x14, 0x03, 0x1E }; // Улица 


void setup()
{
   
  sensors.begin();
  sensors.setResolution(Thermometer1, 9);
  sensors.setResolution(Thermometer2, 9);
  sensors.setResolution(Thermometer3, 9);
  sensors.setResolution(Thermometer4, 9);
  sensors.setResolution(Thermometer5, 9);
  sensors.setResolution(Thermometer6, 9);
  if (EEPROM.read(addr) == 0){
    starts = LOW;
  }
  if (EEPROM.read(addr) == 1){
    starts = HIGH;
  }
pinMode(11,OUTPUT);
digitalWrite(11, starts);

pinMode(2, INPUT);
digitalWrite(2, HIGH);

  Serial.begin(9600);
  

  randomSeed(analogRead(0));
  
// Setup the LCD
  myGLCD.InitLCD();
  myGLCD.clrScr();
 myGLCD.setColor(VGA_BLUE);
myGLCD.fillRect(0, 0, 479, 30);
myGLCD.fillRect(0, 100, 479, 120);
myGLCD.fillRect(0, 180, 479, 200);
myGLCD.setBackColor(VGA_BLUE);
myGLCD.setColor(VGA_WHITE);
 myGLCD.drawLine(160, 1, 160, 200);
 myGLCD.drawLine(320, 1, 320, 200);
 //myGLCD.drawLine(340, 200, 340, 478);
 myGLCD.drawLine(1, 30, 478, 30);
 myGLCD.drawLine(1, 100, 478, 100);
 myGLCD.drawLine(1, 120, 478, 120);
myGLCD.drawLine(1, 180, 478, 180);
 myGLCD.drawLine(1, 200, 478, 200);
 myGLCD.drawLine(1, 265, 478, 265);
 myGLCD.setFont(BigFont);
 myGLCD.print("TA", 50, 5);
 myGLCD.print("KOTEL", 185, 5);
 myGLCD.print("B KOTEL", 330, 5);
 myGLCD.print("DOM", 50, 102);
 myGLCD.print("IZ Doma", 185, 102);
 myGLCD.print("ULICA", 330, 102);
 myGLCD.print("T GAZOV", 20, 182);
 myGLCD.print("Temp", 205, 182);
 myGLCD.print("Nasos", 370, 182);
myGLCD.setBackColor(VGA_BLACK);
  myGLCD.print("Kw", 200, 300);
   myGLCD.print("Kot-", 1, 287);
   myGLCD.print("Dom-", 236, 287);
   myGLCD.print("Kw", 440, 300);


}

void loop()
{
  
    if (digitalRead(2) == LOW)
  {  // выключатель нажат, т.к. подтягивающий резистор будет давайть HIGH на входе, если не замкнут напрямую на землю
    delay(500);                        // ждем 0.1сек
    running = !running;                // меняем значение булевой переменной
    digitalWrite(11, running);
    EEPROM.write(addr, running);   // включаем или выключаем светодиод.
  }
  sensors.requestTemperatures();
  delay(1000);
  temp1 = sensors.getTempC(Thermometer1);
  temp2 = sensors.getTempC(Thermometer2);
  temp3 = sensors.getTempC(Thermometer3);
  temp4 = sensors.getTempC(Thermometer4);
  temp5 = sensors.getTempC(Thermometer5);
  temp6 = sensors.getTempC(Thermometer6);
  termopara = thermocouple.readCelsius();
  termopara2 = thermocouple2.readCelsius();
  
  relestatus = EEPROM.read(addr);
 if(Serial.available()>0){
  //  uint8_t inByte = Serial.read();
  
  val = Serial.read();
 if(val =='5')
         {
           digitalWrite(11, HIGH);
            EEPROM.write(addr, 1);
            digitalWrite(2, HIGH);
         }  
        if(val =='6')
         {
           digitalWrite(11, LOW);
            EEPROM.write(addr, 0);
         } 
         if(val =='3')
         {
  Serial.print(temp1);
  Serial.print(",");
  Serial.print(temp2);
  Serial.print(",");
  Serial.print(temp3);
  Serial.print(",");
  Serial.print(temp4);
  Serial.print(",");
  Serial.print(temp5);
  Serial.print(",");
 Serial.print(temp6);
 Serial.print(",");
 Serial.print(termopara);
 Serial.print(",");
 Serial.print(termopara2);
 Serial.print(",");
  Serial.print(digitalRead(11));

  Serial.println();
         }
        
 }
  
  if (temp1 > 89){
    digitalWrite(11, HIGH);
    EEPROM.write(addr, 1);
  }
  if (temp2 > temp1){
    digitalWrite(11, LOW);
    EEPROM.write(addr, 0);
  }

  
  int buf[478];
  int x, x2;
  int y, y2;
  int r;
 
// Clear the screen and draw the frame
//  myGLCD.clrScr(); 
myGLCD.setColor(VGA_WHITE);
myGLCD.setBackColor(VGA_BLACK);
myGLCD.setFont(SevenSegmentFull);
if (temp5 > 80){
  myGLCD.setColor(VGA_YELLOW);
}
if (temp5 > 85){
  myGLCD.setColor(VGA_RED);
}
myGLCD.printNumF(temp5, 1, 25, 40);//температура ТА
myGLCD.setColor(VGA_WHITE);
if (temp1 > 85){
  myGLCD.setColor(VGA_YELLOW);
}
if (temp1 > 89){
  myGLCD.setColor(VGA_RED);
}
myGLCD.printNumF(temp1, 1, 185, 40); //Темпратура котла
myGLCD.setColor(VGA_WHITE);
myGLCD.printNumF(temp2, 1, 330, 40); //Темпратура входа в котла
myGLCD.printNumF(temp4, 1, 25, 125); //Темпратура в дом
myGLCD.printNumF(temp3, 1, 185, 125); //Темпратура из дома
myGLCD.printNumF(temp6, 1, 325, 125); //Темпратура улица
myGLCD.printNumF(termopara, 1, 5, 205); //Темпратура газов
myGLCD.printNumF(termopara2, 1, 200, 205); //Темпратура доп датчик
  if(relestatus == 0){
   // myGLCD.fillScr(0, 0, 255);
  myGLCD.setColor(VGA_RED);
  myGLCD.fillRoundRect(365, 202, 479, 264);
  myGLCD.setColor(VGA_WHITE);
  myGLCD.setBackColor(VGA_RED);
  myGLCD.print("OFF", 380, 210); //состояние насоса
  }
  if(relestatus == 1){
   myGLCD.setColor(VGA_LIME);
  myGLCD.fillRoundRect(365, 202, 479, 264);
  myGLCD.setColor(VGA_WHITE);
  myGLCD.setBackColor(VGA_LIME);
  myGLCD.print("ON", 380, 210); //состояние насоса
  }
  myGLCD.setBackColor(VGA_BLACK);
  myGLCD.printNumF(0.0, 1, 70, 267);
  if(relestatus == 1){
  myGLCD.printNumF((temp1-temp2)*1.2/1000*1.16*1000, 1, 70, 267);
  }
  myGLCD.printNumF((temp4-temp3)*1.2/1000*1.16*1000, 1, 300, 267);
  
 delay (4000);
 
}

програмно я бы хотел так что  есть -127 то на экране остаются старые значения с датчика

bwn
Offline
Зарегистрирован: 25.08.2014

Из вариантов, с бубном. Рядом с последним датчиком повесьте кондеры электролит мкФ на 100-1000 + керамику 0,1-10мкФ.

А по "-127"  - If (переменная <=-127); {пропустить отображение, уйти на новый цикл измерения.}

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Интересная строка имеется в файле  DallasTemperature.h

#define DEVICE_DISCONNECTED -127

Вам это ничто не напоминает?

А в файлеDallasTemperature.cpp

// returns temperature in degrees F
// TODO: - when getTempC returns DEVICE_DISCONNECTED
//        -127 gets converted to -196.6 F
 

avgaz
Offline
Зарегистрирован: 23.09.2014

trembo пишет:

Интересная строка имеется в файле  DallasTemperature.h

#define DEVICE_DISCONNECTED -127

Вам это ничто не напоминает?

А в файлеDallasTemperature.cpp

// returns temperature in degrees F
// TODO: - when getTempC returns DEVICE_DISCONNECTED
//        -127 gets converted to -196.6 F
 

Это я уже видел и понял что -127 возникает когда нет связи с датчиком, но как это решает проблему?

bwn
Offline
Зарегистрирован: 25.08.2014

А датчики и соединения между ними у вас на пайке или разъемах?

avgaz
Offline
Зарегистрирован: 23.09.2014

bwn пишет:

А датчики и соединения между ними у вас на пайке или разъемах?

просто скрутка и изолента, что их паять если ещё сто раз пооду перебирать придется (( да и с nano так же все было.

Шина у меня ввиде провода ПВС 3х0,75 и отводы на датчики то же такие же, а около датчика 1метр роного тоненького кабеля датчики у меня водонепроницаемы в гильзах с 1метром провода.

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

avgaz пишет:

Шина у меня ввиде провода ПВС 3х0,75.

А Вы знаете толк в извращениях. Возьмите витую пару.

avgaz
Offline
Зарегистрирован: 23.09.2014

KVadik пишет:

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

avgaz пишет:

KVadik пишет:

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

Ну вы же не мощьность передаете :) Я не буду Вам сейчас лекцию читать почему витая пара для 1-wire гораздо предпочтительнее, чем Ваш провод. Попробуйте поверить так.

maksim
Offline
Зарегистрирован: 12.02.2012

avgaz пишет:

KVadik пишет:

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

В данном случае нет, тут волновое сопротивление играет большую роль. Причем при подключении нужно соблюдать следующее - сигнальный провод должен виться в паре с землей, а то если вы по паре пустите питание, а отдельным проводом сигнал, то тольку от замены вашего провода на витую пару не будет. А лучше еще отдельно по паре пустить и питание, то есть шина будет состоять из двух пар (четырех проводов: VCC x GND, SIG x GND).

avgaz
Offline
Зарегистрирован: 23.09.2014

maksim пишет:

avgaz пишет:

KVadik пишет:

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

В данном случае нет, тут волновое сопротивление играет большую роль. Причем при подключении нужно соблюдать следующее - сигнальный провод должен виться в паре с землей, а то если вы по паре пустите питание, а отдельным проводом сигнал, то тольку от замены вашего провода на витую пару не будет. А лучше еще отдельно по паре пустить и питание, то есть шина будет состоять из двух пар (четырех проводов: VCC x GND, SIG x GND).

то есть нужно 2 GND провода цеплять к одному проводу GND датчика? так же кто как делает на витой паре просто у каждого датчика разрезаем её и вкручиваем датчик или может использует кто скажем тройники витой пары и обжимает? почему с nano в обще звездно образная система работала без проблем, а тут с мега такие косяки даже с шиной на тех же проводах? может косячат библиотеки с nano было всего три OneWire.h и DallasTemperature.h и EEPROM.h а в мегу засунул ещё две UTFT.h и max6675.h может они друг с другом так косячат?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

1. При токах  аж  1 миллиампер нужен ну очень толстый кабель..... ;)

2. Главная проблема  Далласа- ёмкость кабеля.
Разряжает её на землю сам датчик, и с этим неплохо справляется его выходной транзистор, а вот заряжается она через резистор.
То есть фронты из " 0 " в   " 1 " обычно затянуты.
И конденсатор по питанию обычно бесполезен.
1 миллиампер легко обеспечит ЛЮБОЙ кондёр на выходе ЛЮБОГО блока питания.

А вот уменьшить раз в 5 длительность именно этого фронта можно просто- уменьшив сопротивление в 5 раз.
Ток будет 5 миллиамперов, что полностью соответствует документации.

Я уже говорил вам об этом- но вы не слушаете.....

Да, и не путайте повышенную защищённость от внешних помех в витой паре с искажениями сигнала внутри кабеля.
 

avgaz
Offline
Зарегистрирован: 23.09.2014

trembo пишет:

1. При токах  аж  1 миллиампер нужен ну очень толстый кабель..... ;)

2. Главная проблема  Далласа- ёмкость кабеля.
Разряжает её на землю сам датчик, и с этим неплохо справляется его выходной транзистор, а вот заряжается она через резистор.
То есть фронты из " 0 " в   " 1 " обычно затянуты.
И конденсатор по питанию обычно бесполезен.
1 миллиампер легко обеспечит ЛЮБОЙ кондёр на выходе ЛЮБОГО блока питания.

А вот уменьшить раз в 5 длительность именно этого фронта можно просто- уменьшив сопротивление в 5 раз.
Ток будет 5 миллиамперов, что полностью соответствует документации.

Я уже говорил вам об этом- но вы не слушаете.....

Да, и не путайте повышенную защищённость от внешних помех в витой паре с искажениями сигнала внутри кабеля.
 

Дак я и так уменьшил сопротивление заменив 4.7К на 2К вроде у меня и длина шины то всего метров 10-15 и датчиков 6 штук должно всего должно же хватать.

Про мой провод просто изначально он у меня был в наличии я на нем и собрал с nano и работало все и с резистором 4.7к и без внешнего питания, а тут перешол на мегу и получил косяки эти и с меньшим сопротивлением и с внешним питанием. буду пробовать витую пару последний вариант походу

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

KVadik пишет:

avgaz пишет:

KVadik пишет:

А Вы знаете толк в извращениях. Возьмите витую пару.

думаете сечение проводов играет роль? вроде чем больше тем меньше потерь

Ну вы же не мощьность передаете :) Я не буду Вам сейчас лекцию читать почему витая пара для 1-wire гораздо предпочтительнее, чем Ваш провод. Попробуйте поверить так.

Соглашусь, что ПВС - это перебор.

Но вы попробуйтн меня аргументировано убедить, что витая пара в реальных условиях лучше, чем ШВВП.

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Gippopotam пишет:

Соглашусь, что ПВС - это перебор.

Но вы попробуйтн меня аргументировано убедить, что витая пара в реальных условиях лучше, чем ШВВП.

Зачем мне это? Если Вы этого не понимаете и ленитесь поискать и разобраться - это Ваши проблемы.

avgaz
Offline
Зарегистрирован: 23.09.2014

Вчера потратил несколько часов пересобирая шину на витойпаре (((( успел только подключить 4 датчика из 6 и все напрасно ошибка -127 все равно лезет но значительно реже то есть словил я её пару раз за 6 часов, думаю если подключу оставшиеся 2 дачика время участится ((( витую делал как предложили выше VCC x GND, SIG x GND

Попробую наверно со всеми 6 датчиками времено поставить nano без экрана посмотрю будет там ошибка или нет, бельше уже не знаю на что думать.

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

И чем Вам мешает -127 (сбой) один раз в 6 часов (даже раз в несколько минут при постоянном считывании оно не критично, имхо)? Там инертность датчика такая, что потратить ещё секунду-другую на повторное обращение к датчику ничего не должно изменить.

avgaz
Offline
Зарегистрирован: 23.09.2014

KVadik пишет:

И чем Вам мешает -127 (сбой) один раз в 6 часов (даже раз в несколько минут при постоянном считывании оно не критично, имхо)? Там инертность датчика такая, что потратить ещё секунду-другую на повторное обращение к датчику ничего не должно изменить.

Она возникает на датчике самом дальнем который служит для управления циркулярным насосом то есть в коде есть условие когда температура датчика 6 меньше температуры дачика 5 насос отключается, вот и выходит что когда возникает -127 на шестом дотчике реле насоса отключается

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

avgaz пишет:

Она возникает на датчике самом дальнем который служит для управления циркулярным насосом то есть в коде есть условие когда температура датчика 6 меньше температуры дачика 5 насос отключается, вот и выходит что когда возникает -127 на шестом дотчике реле насоса отключается

Фейспалм. А в программе задать условие при котором при считывании -127 попробовать считать повторно релингия не позволяет?

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

CRC на шине иногда могут и возникать -  и это нормальное явление.
Но на ваших метрах.... Что-то здесь не так.
Подобное наблюдал когда два шлейфа на одном пине сидело- один с несколькими датчиками, а другой с одним на конце.
Длина кабелей была одинаковая.
Выяснилось что из-за длинных ( метров по  60) линий
при подключении второго переставал работать и первый и наоборот........

Предположил что при опросе дальнего датчика в любом из кабелей
со второго приходил отражённый сигнал от его "оборванного" конца ( а его не спрашивали- поэтому он молчал).
И это эхо приходило одновременно с тем, полезным, с первого кабеля.

Вылечилось вставлением в тот кабель что был с одним датчиком куска метров 20...... в бухте.....
Эхи "разбежались" по времени и больше не мешали.
Но это не правильно, просто выхода другого не было- кабеля были замазаны в стенки
 

avgaz
Offline
Зарегистрирован: 23.09.2014

Вот моя приблизительная схема обозначил растояние по шине мужду датчиками и длину отводов от шины до датчиков

 

 

Пока прикрутил пятый датчик и дописал условие

if (temp1 <= -127){
    temp1 = sensors.getTempC(Thermometer1);
  }

если датчик выдает -127 то повторно опрашивается

вроде пару часов без глюков уже работает, но все равно смущает такой выход датчик может и повторно прислать -127 тогда реле вырубится и котелок закипит (((

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

гыы сколько всего понаписали.... мне так видиться что советчикам просто скучно и они намеренно пропустили одну забавную штуку.

ДИКТУЮ БОЛЬШИМИ БУКВАМИ

avgaz пишет:

просто скрутка и изолента, что их паять 

uragan
Offline
Зарегистрирован: 23.02.2015

Или еще добавить 8 метров кабеля и соединить по правильному.

avgaz
Offline
Зарегистрирован: 23.09.2014

куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все

http://ru.aliexpress.com/item/Free-shipping-khaki-Plastic-3-Way-RJ45-LAN-Network-Ethernet-Splitter-Connector-1-to-2/32341956822.html

что бы было возможно легко снимать и менять датчики.

Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все

http://ru.aliexpress.com/item/Free-shipping-khaki-Plastic-3-Way-RJ45-LAN-Network-Ethernet-Splitter-Connector-1-to-2/32341956822.html

что бы было возможно легко снимать и менять датчики.

Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки

маразм крепчает? зачем снимать и менять датчики? они у вас что гореть будут? тут на форуме есть товарищ у него эти датчики гроздьями висят почти по 100 штук на ветке... воду он там куда то дистилирует... паять нужно, а не скручивать изолентой.. тогда и сигнал перестанет пропадать.

avgaz
Offline
Зарегистрирован: 23.09.2014

а они работают в таких условиях один греется ежедневно от 40 до 95г иногда по недосмотру и до 110 бывает, другой погружной в воду то же греется и остывает постоянно, так что иногда выходят из строя в основном погружной и основная причина выхода из строя это окисляются ножки их и отваливаются по крайне мере за 2 года я поменял 5 штук и спайкой будет геморно менять

inspiritus
Offline
Зарегистрирован: 17.12.2012

Puhlyaviy пишет:

avgaz пишет:

куда добавить ещё 8 метров? как раз осталось витой столько ))) соеденить я хочу вот на такие троиники все

http://ru.aliexpress.com/item/Free-shipping-khaki-Plastic-3-Way-RJ45-LAN-Network-Ethernet-Splitter-Connector-1-to-2/32341956822.html

что бы было возможно легко снимать и менять датчики.

Пока вроде изменения в коде вернее условие повтора опроса последнего датчика при ошибке работает без проблем со всеми 6 датчиками по крайне мере за 10 часов не одной ошибки

маразм крепчает? зачем снимать и менять датчики? они у вас что гореть будут? тут на форуме есть товарищ у него эти датчики гроздьями висят почти по 100 штук на ветке... воду он там куда то дистилирует... паять нужно, а не скручивать изолентой.. тогда и сигнал перестанет пропадать.

нууу не сто конечно а максимум что было 86, только макимум энтот не потому, что не шмогла, а потому, что на одной шине больше не нужно было , и шин таких теперь уже ПЯТЬ. И шина с 86 датчиками длиной,  порядка 50 метров и поболее. И сбоила только когда рядом варили электросваркой и когда гроза была ( по сбоям есть статистика за пару лет). И вообще по моему мнению, если её правильно готовить, 1-wire классная штука. 

Avgaz-у я посоветовал бы вертикальные сегменты делать не более 50см, резитор подтяжки поставить в конце линии, на питание в конце линии повесить электролит порядка 47 мкф. Питание ( плюс и минус) пустить витой парой, сигнал и минус пустить второй парой. Горизонталь неразрывным шлейфом, ответвления через rj-45.

Хрень вся эта работает у мну из-под бунты через адаптеры USb-1-Wire не помню название, есть на сайте радуги. Дрова owfs. Все остальное писано на пхп , пихается в мискл и показывается апачем - собственное.

ЗЫ. Не дистиллирую я воду , а ректифицирую вакуумно, с целью удаления из оной СТРАШНАГО ДЕЙТЕРИЯ. То есть из H2O+HDO удаляю HDO.

gena
Offline
Зарегистрирован: 04.11.2012

  Не читал все ответы по этому вопросу, но я бы попробовал следующее:

- возле КАЖДОГО датчика (на проводах питания) запаял бы электролитический конденсатор ёмкостью 4,7 мкФ, 10 В;

- к КАЖДОМУ датчику (возле самого датчика) подключил бы резистор "подтяжки" 10 кОм;

- на выводе платы ардуины, идущего на линию IO датчиков, тоже установил бы "подтягивающий" резистор 4,7 кОм. 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

gena пишет:

  Не читал все ответы по этому вопросу, но я бы попробовал следующее:

- возле КАЖДОГО датчика (на проводах питания) запаял бы электролитический конденсатор ёмкостью 4,7 мкФ, 10 В;

- к КАЖДОМУ датчику (возле самого датчика) подключил бы резистор "подтяжки" 10 кОм;

- на выводе платы ардуины, идущего на линию IO датчиков, тоже установил бы "подтягивающий" резистор 4,7 кОм. 

А ты сделай труд и почитай :)

У него все собрано на скрутках и изоленте... чему тут удивляться то? паять ему кажеться долго и не выгодно.

avgaz
Offline
Зарегистрирован: 23.09.2014

Puhlyaviy пишет:

У него все собрано на скрутках и изоленте... чему тут удивляться то? паять ему кажеться долго и не выгодно.

Не думаю что в этом проблема, так как все 6 на скрутке и только один глюкает последний. и то при условии повторного опроса датчика при ошибке -127 глюков больше нет, уже двое суток.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

Не думаю что в этом проблема, так как все 6 на скрутке и только один глюкает последний. и то при условии повторного опроса датчика при ошибке -127 глюков больше нет, уже двое суток.

мдаааа ну тогда конечно. я щас все платы выкину и буду просто скручивать и заматывать изолентой.. не подскажете как к чипу со 144 ногами прикрутить изолентой провода?

повторное опрашивание это костыль! там чтение может раза с 15 проходит.. а не со второго..

не ваш проект случайно? тож через повторное чтение сделали :)

avgaz
Offline
Зарегистрирован: 23.09.2014

Puhlyaviy пишет:

avgaz пишет:

Не думаю что в этом проблема, так как все 6 на скрутке и только один глюкает последний. и то при условии повторного опроса датчика при ошибке -127 глюков больше нет, уже двое суток.

мдаааа ну тогда конечно. я щас все платы выкину и буду просто скручивать и заматывать изолентой.. не подскажете как к чипу со 144 ногами прикрутить изолентой провода?

повторное опрашивание это костыль! там чтение может раза с 15 проходит.. а не со второго..

не ваш проект случайно? тож через повторное чтение сделали :)

Ну не преувеличивайте, согласен что пайка намного лучше, но нормальная скрутка в 1см то же сойдет я же не к ногам скручивал, к ножкам датчика припаян провод, а уже этот провод в общею шину на скрутку, выше писал что у меня датчики в гильзах с 1метром провода.

Повторный опрос происходит всего один раз, а не циклически пока не придут данные то есть вот так

if (temp1 <= -127){
    temp1 = sensors.getTempC(Thermometer1);
  }

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

спорим если взять витую пару как советовали выше и пропаять все датчики. то легко можно и пару сотен повесить?