Так надо в функцию передавать не номер датчика, а адрес, в виде uint8_t*
В принципе можно вообще вместо строки 44 влепить 104-106 без всякой функции.
Для усиления эффекта есть такое: Skip ROM (0xCC) followed by a convert T (0x44) would instruct all networked devices that have a Convert T command to perform a temperature conversion. Т.е. даем команду на массовую конвертацию, ждем один период конверсии и читаем подряд все датчики.
Для усиления эффекта есть такое: Skip ROM (0xCC) followed by a convert T (0x44).... Т.е. даем команду на массовую конвертацию, ждем один период конверсии и читаем подряд все датчики.
вот спасибо!!! а меня смутило выражение "data collision will occur on the bus as
multiple slaves transmit simultaneously" я и не проникся всей сутью.
В любом случае вы должны "читать" с шины ответ после отсылки команды конкретному датчику на возврат значения. Если уж по взрослому, то нужно прочитать весь Scratchpad и сверить CRC. Только тогда будет понятно - датчик ответил или на шине фигня творится. А прерываться на 4-м байте или нет - это вопрос веры. Особой оптимизации с этого не получить, думаю.
В любом случае вы должны "читать" с шины ответ после отсылки команды конкретному датчику на возврат значения. Если уж по взрослому, то нужно прочитать весь Scratchpad и сверить CRC. Только тогда будет понятно - датчик ответил или на шине фигня творится. А прерываться на 4-м байте или нет - это вопрос веры. Особой оптимизации с этого не получить, думаю.
Вы 100% правы, но я искал или пытался нати байт ответа на запрос по адресум (вместо 9-ти). Придумал самый простой и быстрый вариант (признак). Для серьезной ситемы с критичным отношением к температуре, безусловно, необходимо пересчитывать полином под CRC и потом сверять. В примитивных системах, полагаю, этого кода хватит. Да и работает он не в пример быстрее и весит крохи.
Ну, сколько вы там сэкономите... 20мс на датчике? У вас вся экономия в воздух уходит на строках 053 и 093. А надежность снижается.
Впрочем, система ваша - чего тут лезть с советами...
вне системы можно строки с delay оставить, а вот в конкретной системе все переводится на таймер с флагами. Я для этого разнес запрос и опрос, чтобы в промежутке кучу всего можно было сделать.
по поводу лезть с советами - я бы не постил эти вопросы, если бы советы мне были не нужны. Впрочем, большую часть ответа я получил в поста 51, за что огромное спасибо.
Здравствуйте. Сразу скажу я не программист, мне это просто интересно для реализации моей задумки. Подскажите как перекомпилировать адрес датчика температуры из вида: 28FFC850B3170108, в вид: 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0, для вставки в код скетча.
delay (30000); // задержка на конвертацию !!!!!! :))))))))))))))
если не критично для разового вывода ложных значений при включении то нафик не нужна задержка, а просто надо порядок последовательности поменять)
вначале получать данныее, а потом обновлять их, и всё по таймеру раз в секунду например
cMs = millis(); //текущее время - у меня много раз запрашивается
/******************** опрос датчиков Т *********************/
if ( pMs5 + 1000UL <= cMs ){ pMs5 = cMs; //этот код повторяться каждые 1 сек
ter1 = (int)ds.getTempCByIndex(0); // в переменную int8_t (-127+127) читаю и пишу целую часть показаний температуры
ds.requestTemperatures(); // а тут даю команду на обновление данных в датчике
}
вот кусок кода - собственно к моменту нового запроса, у датчика уже будут свежие АКТУАЛЬНЫЕ данные и никаких делеев )
Дак все прогрессивное человечество так и творит. При старте ставим флаг - НИЧИТАЙ, а в лупе, когда пора температуру обновлять, проверяем флаг НИЧИТАЙ и если установлен, то сбрасываем его, иначе читаем и обрабатываем температуру. Далее по любому запускаем преобразование (т.е. то что у Вас названо "обновляем"). Так по кругу. Флаг защищает от "разового вывода ложных значений". А время на преобразование выделяется за счет периода опроса. Правда значение температуры каждый раз немного "устаревшее", но при медленном её изменении и небольшом периоде это не существенно. Ниче не мешает так и кучу датчиков опрашивать.
Как можно одним градусником мерять температуру в двух опах? Переставлять:)
Нет тут вопрос другой.
Как двум людям узнать температуру в жопе третьего одним градусником ?
Очевидный ответ, посмотреть обоим на градусник. Желательно по очереди, чтоб друг другу не мешать.
Как можно одним градусником мерять температуру в двух опах? Переставлять:)
Нет тут вопрос другой. Как двум людям узнать температуру в жопе третьего одним градусником ? Очевидный ответ, посмотреть обоим на градусник. Желательно по очереди, чтоб друг другу не мешать.
На термостатах W1209 реализуется легко (два термостата получают данные от одного датчика), и я где то читал что люди реализуют это на ds18b20, поэтому и задал такой вопрос, а у васKakmyc во главе с товарищем inspiritus в голове одни Ж.ПЫ!!!
Все ясно что тут за спецы!!! можете не писать ответы!!!
Ну уж точно не те спецы, которе будут подключать неправильный датчик к термостату вместо десятирублевого правильного и говорить при этом "это ты тупишь".
Так надо в функцию передавать не номер датчика, а адрес, в виде uint8_t*
В принципе можно вообще вместо строки 44 влепить 104-106 без всякой функции.
Для усиления эффекта есть такое: Skip ROM (0xCC) followed by a convert T (0x44) would instruct all networked devices that have a Convert T command to perform a temperature conversion. Т.е. даем команду на массовую конвертацию, ждем один период конверсии и читаем подряд все датчики.
Для усиления эффекта есть такое: Skip ROM (0xCC) followed by a convert T (0x44).... Т.е. даем команду на массовую конвертацию, ждем один период конверсии и читаем подряд все датчики.
вот спасибо!!! а меня смутило выражение "data collision will occur on the bus as
multiple slaves transmit simultaneously" я и не проникся всей сутью.
исправлено, дополнено к посту 50, НОВЫЙ РАБОЧИЙ КОД ( с заготовками)
Может я еще чего проглядел, ну чтоб не читать 9 байт, а потом проверять четвертый на присутствие датчика?!?!?????????
В любом случае вы должны "читать" с шины ответ после отсылки команды конкретному датчику на возврат значения. Если уж по взрослому, то нужно прочитать весь Scratchpad и сверить CRC. Только тогда будет понятно - датчик ответил или на шине фигня творится. А прерываться на 4-м байте или нет - это вопрос веры. Особой оптимизации с этого не получить, думаю.
В любом случае вы должны "читать" с шины ответ после отсылки команды конкретному датчику на возврат значения. Если уж по взрослому, то нужно прочитать весь Scratchpad и сверить CRC. Только тогда будет понятно - датчик ответил или на шине фигня творится. А прерываться на 4-м байте или нет - это вопрос веры. Особой оптимизации с этого не получить, думаю.
Вы 100% правы, но я искал или пытался нати байт ответа на запрос по адресум (вместо 9-ти). Придумал самый простой и быстрый вариант (признак). Для серьезной ситемы с критичным отношением к температуре, безусловно, необходимо пересчитывать полином под CRC и потом сверять. В примитивных системах, полагаю, этого кода хватит. Да и работает он не в пример быстрее и весит крохи.
Ну, сколько вы там сэкономите... 20мс на датчике? У вас вся экономия в воздух уходит на строках 053 и 093. А надежность снижается.
Впрочем, система ваша - чего тут лезть с советами...
Ну, сколько вы там сэкономите... 20мс на датчике? У вас вся экономия в воздух уходит на строках 053 и 093. А надежность снижается.
Впрочем, система ваша - чего тут лезть с советами...
вне системы можно строки с delay оставить, а вот в конкретной системе все переводится на таймер с флагами. Я для этого разнес запрос и опрос, чтобы в промежутке кучу всего можно было сделать.
по поводу лезть с советами - я бы не постил эти вопросы, если бы советы мне были не нужны. Впрочем, большую часть ответа я получил в поста 51, за что огромное спасибо.
Гриша, а чем эта тема плоха? CRC и прочее без проблем добавить, если бобик при деле ниже там на миллисе есть.
Гриша, а чем эта тема плоха? CRC и прочее без проблем добавить, если бобик при деле ниже там на миллисе есть.
уверен, что ничем, лопатил то, что имею. Об этой теме не знал, как и о многих других. Спасибо за ссылку, почитаю.
Здравствуйте. Сразу скажу я не программист, мне это просто интересно для реализации моей задумки. Подскажите как перекомпилировать адрес датчика температуры из вида: 28FFC850B3170108, в вид: 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0, для вставки в код скетча.
Пишете адрес в строчку, через каждые два символа ставите запятую, перед ними - 0x.
Благодарю за ответ! А то я уже пытался это сделать с помощью калькулятора винды, не получилось:))
если не критично для разового вывода ложных значений при включении то нафик не нужна задержка, а просто надо порядок последовательности поменять)
вначале получать данныее, а потом обновлять их, и всё по таймеру раз в секунду например
вот кусок кода - собственно к моменту нового запроса, у датчика уже будут свежие АКТУАЛЬНЫЕ данные и никаких делеев )
Дак все прогрессивное человечество так и творит. При старте ставим флаг - НИЧИТАЙ, а в лупе, когда пора температуру обновлять, проверяем флаг НИЧИТАЙ и если установлен, то сбрасываем его, иначе читаем и обрабатываем температуру. Далее по любому запускаем преобразование (т.е. то что у Вас названо "обновляем"). Так по кругу. Флаг защищает от "разового вывода ложных значений". А время на преобразование выделяется за счет периода опроса. Правда значение температуры каждый раз немного "устаревшее", но при медленном её изменении и небольшом периоде это не существенно. Ниче не мешает так и кучу датчиков опрашивать.
Ну да, а учитывая, что с последнего сообщения, прошло чуть больше года.............
Главное что бы доходило. Неважно через сколько.)
Знать бы еще откуда эта строка скопирована.
Знать бы еще откуда эта строка скопирована.
пост 52 строка 93 :)))))))))))
Здравствуйте! У меня вопрос к специалистам, как подключить к DS18B20 два термостата настроенных на разные темпиратуры срабатывания?
Здравствуйте! У меня вопрос к специалистам, как подключить к DS18B20 два термостата настроенных на разные темпиратуры срабатывания?
Купить ещё один ds18b20.
Здравствуйте! У меня вопрос к специалистам, как подключить к DS18B20 два термостата настроенных на разные темпиратуры срабатывания?
Надо что бы от одного датчика термостаты получали данные
Как можно одним градусником мерять температуру в двух опах? Переставлять:)
Как можно одним градусником мерять температуру в двух опах? Переставлять:)
Нет тут вопрос другой.
Как двум людям узнать температуру в жопе третьего одним градусником ?
Очевидный ответ, посмотреть обоим на градусник. Желательно по очереди, чтоб друг другу не мешать.
Как можно одним градусником мерять температуру в двух опах? Переставлять:)
На термостатах W1209 реализуется легко (два термостата получают данные от одного датчика), и я где то читал что люди реализуют это на ds18b20, поэтому и задал такой вопрос, а у васKakmyc во главе с товарищем inspiritus в голове одни Ж.ПЫ!!!
На термостатах W1209 реализуется легко (два термостата получают данные от одного датчика
То есть утебя есть решение и ты просто тратишь время тупыми вопросами?
rkit это ты тупишь, вопрос был задан про ds18b20, как на них реализовать
Все ясно что тут за спецы!!! можете не писать ответы!!!
rkit это ты тупишь, вопрос был задан про ds18b20, как на них реализовать
Переписать прошивку под ds18b20 для начала. Как - спрашивай у тех, кто это "реализовал". Изначально эти термостаты прошиты под термисторы
rkit это ты тупишь, вопрос был задан про ds18b20, как на них реализовать
Переписать прошивку под ds18b20 для начала. Как - спрашивай у тех, кто это "реализовал". Изначально эти термостаты прошиты под термисторы
если сэмулировать термистор можно и не переписывать
Все ясно что тут за спецы!!! можете не писать ответы!!!
Ну уж точно не те спецы, которе будут подключать неправильный датчик к термостату вместо десятирублевого правильного и говорить при этом "это ты тупишь".
два термостата настроенных на разные темпиратуры срабатывания?
А как ты собрался разделить один датчик на два термостата?
Если на один проц и на разные пороги срабатывания - это можно, но два независимых термостата на один датчик - геморно очень...