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

astwo
Offline
Зарегистрирован: 10.07.2019

Darkherald пишет:

Мне нужен более умный поиск. 


Дураку программисту требуется умный код. Так вот, датчики температуры нужны не сами по себе, а для измерения температуры в конкретной точке. Ну перестанет показывать температуру датчик в баке воды, как вам поможет только что найденный датчик температуры воздуха, или бака в масле. И как датчик определит что он засунут в бак. Только человек может прописать в настройках за что отвечает конкретный датчик или он дублирует другой. И никак иначе

astwo
Offline
Зарегистрирован: 10.07.2019

Если вас так плющит, то просто выделите конкретный пин под датчики температуры бака. И уже не важно сколько датчиков там висит. Ответ первого живого датчика и есть температура бака. И все.

Darkherald
Offline
Зарегистрирован: 30.08.2019

astwo пишет:
Darkherald пишет:

Мне нужен более умный поиск. 

Дураку программисту требуется умный код. Так вот, датчики температуры нужны не сами по себе, а для измерения температуры в конкретной точке. Ну перестанет показывать температуру датчик в баке воды, как вам поможет только что найденный датчик температуры воздуха, или бака в масле. И как датчик определит что он засунут в бак. Только человек может прописать в настройках за что отвечает конкретный датчик или он дублирует другой. И никак иначе

Да почему. Зачем Arduino нагружать слежкой на тем где, что и когда случилось с датчиками? Ее задача найти и передать. В маем случаи.

Гриша
Offline
Зарегистрирован: 27.04.2014

Darkherald пишет:

 Да по 78 посту.  DS18B20 средством OneWire

Гриша пишет:

ds.reset_search(); while (ds.search(addr) после этого все ДЦАТЬ датчиков начинают одновременно дружно слать свой адрес в шину и учитывая Открытый Коллктор этих датчиков таки у них это получается :) 

это не "вспышке на луне", а озарение получить "правильно" хотя бы 1 адреса двух датчиков верно. 

Все верно, но из-за вспашке на луне периодически не доходит адрес с датчиков.

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

Вы пытаетесь реализовать не реализуемое, по причине противоречия c  теорией и физикой построения устройств на данной шине!!!! Если  требуется использовать несколько датчиков 18В20 без получения их адреса, объявляют несколько экземпляров шины  OneWire на разные пины МК и соответственно шину данных с КАЖДОГО датчика "цепляют" к отдельной ноге МК. 

как вам написали выше - занимаетесь ерундой - впихнуть не впихуемое в занятое пространство. 

Darkherald
Offline
Зарегистрирован: 30.08.2019
void  ConvertTemp() 
{
  readTempTimeCount = millis();
  
  ds.reset();
  ds.write(0xCC); 
  ds.write(0x44);
}

void  readTemp() 
{
  byte addr[8], data[9], i, j, addrCount = 0;
  for(i = 0; i < SIZEOF_SENSORDATA; i++) sensorsData[i] = 0;  //инициализация массива
  
  ds.reset_search();
  while (ds.search(addr)) 
  {   
      if ( OneWire::crc8( addr, 7) == addr[7])
      {  
        ds.reset();
        ds.select(addr); 
        ds.write(0xBE);
      
        for (i = 0; i < 9; i++)
        {
          data[i] = ds.read();
          if (i <= 5) sensorsData[5 + sensorsData[4] * 8 + i] = addr[i+1]; 
        }
        if (OneWire::crc8(data, 8) == data[8])
        {
          sensorsData[5 + sensorsData[4] * 8 + 6] = data[0];
          sensorsData[5 + sensorsData[4] * 8 + 7] = data[1]; 
        }
        sensorsData[4]++; //5-й элемент содержит число датчиков
      }
  }
  
  Serial.print(F("Sensors "));
  printArray(sensorsData, 5 + sensorsData[4] * 8);
  
  sendData();
}

 

Вот часть кода. Возможно я занимаюсь ерундой.
Но мне надо избавиться от потери датчиков на программном уровне. пропадают они раз в сутки один или два. Если это невозможно. Так и скажите. Буду дальше думать.
 
Гриша
Offline
Зарегистрирован: 27.04.2014

Darkherald пишет:

Вот часть кода. Возможно я занимаюсь ерундой.
Darkherald
Offline
Зарегистрирован: 30.08.2019

Гриша пишет:

Darkherald пишет:

Вот часть кода. Возможно я занимаюсь ерундой.

Спасибо поправил.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Darkherald пишет:

Все верно, но из-за вспашке на луне периодически не доходит адрес с датчиков.

попроси Клапу запретить пахать Луну.

А вообще, может лучше с соплями в пайке и источниками шумов разобраться чем самому себе мозг выносить? Если у тебя "адреса не доходят", с чего ты взял, что значения будут доходить? Нахрена тогда тебе вообще такие датчики?

Darkherald
Offline
Зарегистрирован: 30.08.2019

Ворота пишет:

Darkherald пишет:

Все верно, но из-за вспашке на луне периодически не доходит адрес с датчиков.

попроси Клапу запретить пахать Луну.

А вообще, может лучше с соплями в пайке и источниками шумов разобраться чем самому себе мозг выносить? Если у тебя "адреса не доходят", с чего ты взял, что значения будут доходить? Нахрена тогда тебе вообще такие датчики?

дело в том, я вынес себе мозг. доведя до идеала шлейф. приделывая всевозможные фильтра. но потери есть.

Logik
Offline
Зарегистрирован: 05.08.2014

Гриша
Offline
Зарегистрирован: 27.04.2014

Darkherald пишет:

Вот часть кода. Возможно я занимаюсь ерундой.
 
я тоже учусь и иногда действительно проще написать свой код, чем разобраться в чужом - в вашем коде я ничего не понял :( просто набор  "похожий на код для ардуино" 
 
может вам немного поможет этот топик, начинайте читать с поста 50
 
ну и если  по Русски трудно воспринимать информацию - читайте этот топик с начала.
.
Darkherald
Offline
Зарегистрирован: 30.08.2019

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

b707
Offline
Зарегистрирован: 26.05.2017

Darkherald пишет:

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

конечно можно. Можно даже в ЕЕПРОМ записать, чтобы и после выключения питания список не пропал

b707
Offline
Зарегистрирован: 26.05.2017

Darkherald пишет:

Вот часть кода. Возможно я занимаюсь ерундой.

очень похоже что да. Судя по коду - вы при каждом чтении температуры поиском собираете массив адресов датчиков - но на следующий раз не используете, а снова ищете....- в чем смысл в этой операции?

Logik
Offline
Зарегистрирован: 05.08.2014

Если бы массив датчиков собирался.. Там просто нашел очередной датчик - опросил его, дальше ищем следующий. Похоже что основная проблема в недостатке умения писать на си. Иначе проблемы в работе с массивом адресов не было бы.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Darkherald пишет:

Мне нужен более умный поиск. 

Предположим датчиков 5 при первом поиске из-за "вспышке на луне" нашлись всего 2 их надо запомнить и произвести повторный поиск датчиков. Если находятся еще новые адреса (остальные 3 из 5), то добавить их к общей куче датчиков и отобразить предположим в мониторе порта. На выходе за два прохода он должен найти все которые есть на линии не зная об их количестве.

" - ты и верно дурак и Андрей пошёл с пескарями (датчиками) домой"

" - видишь там на луне, светит светоидиоТ, вотт ат ниго 1w шину и прЁт"

У меня больше слов не нашлосЪ      :)))

Darkherald
Offline
Зарегистрирован: 30.08.2019

b707 пишет:

Darkherald пишет:

Вот часть кода. Возможно я занимаюсь ерундой.

очень похоже что да. Судя по коду - вы при каждом чтении температуры поиском собираете массив адресов датчиков - но на следующий раз не используете, а снова ищете....- в чем смысл в этой операции?

Смысл в замене датчиков. без замены ПО

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

Вот объясните мне, тупому, зачем искать датчики, если не знаем в каком месте они меряют? Читаю который день, нихрена понять не могу.((((

Darkherald
Offline
Зарегистрирован: 30.08.2019

bwn пишет:

Вот объясните мне, тупому, зачем искать датчики, если не знаем в каком месте они меряют? Читаю который день, нихрена понять не могу.((((

далее в 1С они назначаются.

Гриша
Offline
Зарегистрирован: 27.04.2014

Гриша пишет:

может вам немного поможет этот топик, начинайте читать с поста 50
 
ну и если  по Русски трудно воспринимать информацию - читайте этот топик с начала.
.

читаем из первой ссылки посты 50, 51, 52 если вообще не понимаете, читаете до просветления пост 52

если не понимаете по русски читаете по второй ссылке

sadman41
Offline
Зарегистрирован: 19.10.2016

Учёт датчиков в 1C? Что ни день, то новые открытия на этом форуме... И по какому счёту они идут?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

sadman41 пишет:

Учёт датчиков в 1C? Что ни день, то новые открытия на этом форуме... И по какому счёту они идут?

Ну зачем Вы так. Щас ТС будет спрашивать как поставить 1С на Ардуину.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Запросто. Берёшь дурдуину и двухсторонний скотч и лепишь сверху 1с. Если сею конструкцию перевернуть - будет 1с на дурдуине, иначе - наоборот  :)))

MaksVV
Offline
Зарегистрирован: 06.08.2015

ТС , тебе нужно просто в еепроме хранить адреса датчиков, а также инфу какой температуре соответствует какой адрес. и сделать возможность р изменять эту информацию из вне. Тогда ты можешь без замены ПО менять датчик и потом просто настраивать замененный датчик из вне. Если тебе так легче. Многим проще это в скетче поправить и перезалить скетч.

MaksVV
Offline
Зарегистрирован: 06.08.2015

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

Darkherald
Offline
Зарегистрирован: 30.08.2019

MaksVV пишет:
А вообще раз у тебя глюки с опросом датчиков, нафиг этот еепром. Сначала без всякого еепрома научиться датчики нормально опрашивать и нах их менять не пойму, они годами работают, че им сделается.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Учёт датчиков в 1C? Что ни день, то новые открытия на этом форуме... И по какому счёту они идут?

Это только по забалансовым можно проводить

Logik
Offline
Зарегистрирован: 05.08.2014

Darkherald пишет:

MaksVV пишет:
А вообще раз у тебя глюки с опросом датчиков, нафиг этот еепром. Сначала без всякого еепрома научиться датчики нормально опрашивать и нах их менять не пойму, они годами работают, че им сделается.

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

Та ничего не узнаешь. Просто надо понимать что редкие единичные сбои неизбежны. В общем на любой шине, а на 1w подавно. И софт нужно писать (а есть сомнения в твоей способности это делать) учитывая это. контролировать и отрабатывать ошибки. У тя возможность обнаружить проблему тока на уровне 1С, но оттуда нельзя повторить опрос, а в контроллере повторить работу с датчиком можно, но нельзя обнаружить необходимость этого. Архитектура кривая. Так часто бывает когда выбирают простые, но непродуманные решения. И начинают лепить костыли )))

Гриша
Offline
Зарегистрирован: 27.04.2014

Logik пишет:

Darkherald пишет:

MaksVV пишет:
А вообще раз у тебя глюки с опросом датчиков, нафиг этот еепром. Сначала без всякого еепрома научиться датчики нормально опрашивать и нах их менять не пойму, они годами работают, че им сделается.

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

Та ничего не узнаешь. Просто надо понимать что редкие единичные сбои неизбежны...

теперь  осталось переписать Datasheet  под хотелки Darkherald. Потому-что Darkherald надо так,как он хочет, и нафиг читать ДШ.

b707
Offline
Зарегистрирован: 26.05.2017

Гриша пишет:

теперь  осталось переписать Datasheet  под хотелки Darkherald.

переписать даташит - не проблема. Но вот кто обьяснит датчикам. что они теперь работают по новому даташиту  ? :)

MaksVV
Offline
Зарегистрирован: 06.08.2015

Придется ваять новую библиотеку