Датчик ds18b20. Как перевести дискретность на 12 бит???
- Войдите на сайт для отправки комментариев
Пнд, 08/02/2016 - 00:06
Знаю что по умолчанию должен стоять 12. Но уменя 9. Как вернуть на 12бит???? Сейчас меряет только по пол градуса.
Знаю что по умолчанию должен стоять 12. Но уменя 9. Как вернуть на 12бит???? Сейчас меряет только по пол градуса.
в setup
sensors.setResolution(Thermometer1, 10);
пологаю что так
ds.reset();
ds.select(addr);
ds.write(0x4E);
ds.write(0x7F); // верх и низ для аварийных температур
ds.write(0xFF);
ds.write(0x60); // это разрядность конвертации
ds.write(0x48);
Знаю что по умолчанию должен стоять 12. Но уменя 9. Как вернуть на 12бит???? Сейчас меряет только по пол градуса.
Коллеги, вроде всё сказали. Хочу только добавить: вообще-то у него точность по даташиту - полградуса, так может и пусть? На меньшем разрешении быстрее измеряет.
Знаю что по умолчанию должен стоять 12. Но уменя 9. Как вернуть на 12бит???? Сейчас меряет только по пол градуса.
Коллеги, вроде всё сказали. Хочу только добавить: вообще-то у него точность по даташиту - полградуса, так может и пусть? На меньшем разрешении быстрее измеряет.
Евгений, не соглашусь с Вами. Точность и разрядность разные вещи. Постоянное отклонение от фактической температуры никак не препятствует производить замер с требуемым разрешением. Ведь никто не мешает произвести поверку конкретного экземпляра и вносить эту поправку в измерения. ИМХО.
bwn,
я не об этом. Я о том, что если у прибора точность 0,5 градуса, то, скажем, показывать результат на экране с более, чем одной цифрой после запятой просто не имеет смысла. Поэтому высокая там разрядность или поменьше, как бы разницы особой нет. Правда, это при условии, что точность у него не зависит от разрядности и всегда 0,5 градуса.
Кстати, по поводу фразы : "если у прибора точность 0,5 градуса, то, скажем, показывать результат на экране с более, чем одной цифрой после запятой просто не имеет смысла" - она родилась из реальной практики. Я тут не так давно делал термостат для травления плат в персульфате (нужно держать 50С). Там контроллером работала ATtiny45. Памяти у неё не густо, и когда не стало влезать я посмотрел кто её отжирает. Выяснил, что DallasTemperature непосрественно перед возвращением готового результата, преобразовывает его к double, чтобы умножить на коэффициент. Нигде больше double у меня не использовался и получалось, что из-за этого несчастного умножения у меня притягивается добрых полтора килобайта кода библиотеки работы с плавающей точкой. Переделал возвращаемый результат таким образом: всё только в целых числах, но возвращается температура, умноженная на 10. Все сравнения делаю с учётом этого (допустим целевая температура не 50С, а 500). А при выводе температуры на семисегментник, просто нагло добавляю во вторую справа цифру десятичную точку. Всё отлично работает и полтора килобайта сэкономил.
ЕвгенийП, надстройкой над OneWire я принципиально не пользуюсь. Не вижу в ней смысла.
Для визуального отображения, больше одного знака после запятой бессмысленно, а чаще и он лишний. А вот для математики и обработки и три не лишних. Для того же ректификатора, надо держаться в коридоре 0,2-0,3 градуса, здесь уже используется полная разрядность. А точность как раз не важна, ибо порог стабилизации даже в течении дня сдвигается, а значит эталоном является относительная замеренная температура.
В последних разработках, тоже от float-ов избавился, жрут много, толку мало.))))
И кстати декларируемые 0,5гр. это крайний случай. Проверял комплектно из разных партий, обычно разброс не более 0,2гр, а это уже медицинский термометр.))))
Как вообщем програму написать эти команды я видел в библиотеке тоже. Блин я тоже могу так ответить.
Дайте конкретную программу для его зброса.
Дай, на той неделе хером подавился. Вставляешь в Setup, что я написал, и будет счастье. Адрес не забудь прописать.
Дайте конкретную программу для его зброса.
Конкретные программы дают в разделе "ищу исполнителя".
Что-ж жадные все такие...людям библиотеки подавай, без #инклюд готовая программа не работает
#include <OneWire.h>
#include <DallasTemperature.h>
void setup(void)
{
sensors.setResolution(insideThermometer, 12);
}
void loop(void)
{}
ззззззззбрасывайте
все у вас под носом и лежит. в трудных случаях надо почесать репу, взять бубен, потанцевать и все получится.
.ds.reset();
ds.select(addr);
ds.write(0x4E);
ds.write(0x7F); // верх и низ для аварийных температур
ds.write(0xFF);
ds.write(0x60); // это разрядность конвертации
ds.write(0x48);
думаю что это у него не заработает. ну не напечатает он одинпровод.АШ
и спросит где аддр брать...
ds.reset();
ds.select(addr);
ds.write(0x4E);
ds.write(0x7F); // верх и низ для аварийных температур
ds.write(0xFF);
ds.write(0x60); // это разрядность конвертации
ds.write(0x48);
Я вставлял и что? Вытягиваеш с юсб ардуино вставляеш еще раз и снова все збилось.
Я уже делал так спасибо к вам претензий нет. Сам допер
Что-ж жадные все такие...людям библиотеки подавай, без #инклюд готовая программа не работает
#include <OneWire.h>
#include <DallasTemperature.h>
void setup(void)
{
sensors.setResolution(insideThermometer, 12);
}
void loop(void)
{}
ззззззззбрасывайте
все у вас под носом и лежит. в трудных случаях надо почесать репу, взять бубен, потанцевать и все получится.
Я уже делал так спасибо к вам претензий нет. Сам допер
ds.reset();
ds.select(addr);
ds.write(0x4E);
ds.write(0x7F); // верх и низ для аварийных температур
ds.write(0xFF);
ds.write(0x60); // это разрядность конвертации
ds.write(0x48);
Я вставлял и что? Вытягиваеш с юсб ардуино вставляеш еще раз и снова все збилось.
смотря куда вставить....
Я вставлял и что? Вытягиваеш с юсб ардуино вставляеш еще раз и снова все збилось.
возможно у вас в коде настройка на 9 стоит, ее "выкинуть надо"
какуой код используете, бибилиотеку?
возможно вы используете подсчет температуры от 9 бит, в то время как датчик дает 12.( raw считается от 9 бит, остальные выкидываются). и от флоат уюти надо к инт, быстрее работать будет.
в библиотеке <DallasTemperature.h> есть пример, на сериал кидается на какую разрядность запрограмирован датчик. или можете спросить его BEh и почитать ответ, послушать все 9 не прерывая, он все сам раззззззкажет.
https://yandex.ru/search/?text=18b20%20datasheet&lr=213 первая ссылка, даже по русски
и не надо ззззбрасывать, надо бит 5 и 6 регистра конфигурации установить в 11 и меньше юзать чужие проги, не разобравшийсь в них. попробуйте с нуля написать его опрос(я не говорю ванваре.Х выкинуть, с ее использованием) поймете, что где лежит у 1820 и как это что-то доставать и куда что-то класть.
даташит вам в помощь, да прибудет с вами СИ
ds.reset();
ds.select(addr);
ds.write(0x4E);
ds.write(0x7F); // верх и низ для аварийных температур
ds.write(0xFF);
ds.write(0x60); // это разрядность конвертации
ds.write(0x48);
Я вставлял и что? Вытягиваеш с юсб ардуино вставляеш еще раз и снова все збилось.
смотря куда вставить....
Ну куда вставить скажи слушаю? В сетаб вставлял в цыкл вставлял куда еще бля.
ds.reset();
ds.select(addr);
ds.write(0x4E);
ds.write(0x7F); // верх и низ для аварийных температур
ds.write(0xFF);
ds.write(0x60); // это разрядность конвертации
ds.write(0x48);
Я вставлял и что? Вытягиваеш с юсб ардуино вставляеш еще раз и снова все збилось.
смотря куда вставить....
Ну куда вставить скажи слушаю? В сетаб вставлял в цыкл вставлял куда еще бля.
вставить в сетап , один раз прошить прогу ( датчик запомнит разрядность преобразования ) , убрать это из сетапа...
да , датчики с конвейра идут под разрешение 12 , что-то у тибя в другом проблема , мне кажется....
код покажи уж :)
Действительно, прогу показывай. Этот кусок из работающего кода. Там при запуске, для автоопределения датчиков у меня два раза разрядность изменяется сперва на 9, потом на 12 бит. Все работает. Покажи как кодил для изменения и свою программу в которой на 9 бит возвращается.
вставить в сетап , один раз прошить прогу ( датчик запомнит разрядность преобразования ) , убрать это из сетапа...
да , датчики с конвейра идут под разрешение 12 , что-то у тибя в другом проблема , мне кажется....
код покажи уж :)
Супер, а что значит byte addr1[8]; ? Где в него адрес заносится?
Действительно, прогу показывай. Этот кусок из работающего кода. Там при запуске, для автоопределения датчиков у меня два раза разрядность изменяется сперва на 9, потом на 12 бит. Все работает. Покажи как кодил для изменения и свою программу в которой на 9 бит возвращается.
В этом варианте все работает но я хочу уйти от библиотеки далас. Мне надо место сэкономить и она тормозит систему.
#include <OneWire.h>
#include <DallasTemperature.h>
void setup(void)
{
sensors.setResolution(insideThermometer, 12);
}
void loop(void)
{}
То, что я дал это OneWire, надстройкой вообще не пользуюсь.
Супер, а что значит byte addr1[8]; ? Где в него адрес заносится?
Если один датчик используется то его можно описать так. Она ищет все датчики которые есть, независимо от адреса.
OneWire сама не ищет, либо делать поиск с занесением в массив, либо ручками прописывать.
В любом случае, если Далласовская библа тебе адрес изменила на правильный, он сам не должен больше меняться.
В любом случае, если Далласовская библа тебе адрес изменила на правильный, он сам не должен больше меняться.
Я вкурсе. А он меняется прикинь? Пока не вставиш эту строку: sensors.setResolution(insideThermometer, 12);
Я ж не зря это все говорю может.
OneWire сама не ищет, либо делать поиск с занесением в массив, либо ручками прописывать.
Там где у тебя byte addr1[8] пропиши код датчика руками. Потом запусти обычный пример, без твоей проги и посмотри, изменится или нет. В Далласовской библиотке не знаю, переписывает в EEPROM датчика или нет. В моем куске записывает.
OneWire сама не ищет, либо делать поиск с занесением в массив, либо ручками прописывать.
Так ты потом где температуру смотришь? Если в своей программе, то посмотри в чем нибудь другом.
В любом случае, если Далласовская библа тебе адрес изменила на правильный, он сам не должен больше меняться.
Пока ипользую Далас и ту строку все нормально она походу сразу конвертирует через библу. Но я хочу избавится от библы Далас.
OneWire сама не ищет, либо делать поиск с занесением в массив, либо ручками прописывать.
Так ты потом где температуру смотришь? Если в своей программе, то посмотри в чем нибудь другом.
В другом
Попробуй после изменения этот код запустить.
Для Атмеги328
Попробуй после изменения этот код запустить.
Для Атмеги328
Сначала все работает. Только выключаю с юсб и включаю снова, снова только по половинке показывает.
Попробуй после изменения этот код запустить.
Для Атмеги328
Сначала все работает. Только выключаю с юсб и включаю снова, снова только по половинке показывает.
Я уже думаю может часы реального времени нужно поставить?
А часы то здесь при чем? Оставь этот код преобразования в сетапе, он при каждом перезапуске будет по новой настраивать. Не сталкивался с такой х-ней. Может датчик глючный попался.
может быть в датчике "блокнот" убитый , ничо не запоминает ? другой есть ? третий , четвёртый....
ЧРВ - не нужны они датчику
А часы то здесь при чем? Оставь этот код преобразования в сетапе, он при каждом перезапуске будет по новой настраивать. Не сталкивался с такой х-ней. Может датчик глючный попался.
Ну да часы непричем...Понятно ну ладно спасибо. Куплю другой датчик.
А часы то здесь при чем? Оставь этот код преобразования в сетапе, он при каждом перезапуске будет по новой настраивать. Не сталкивался с такой х-ней. Может датчик глючный попался.
Ну да часы непричем...Понятно ну ладно спасибо. Куплю другой датчик.
Так когда умрет совсем, тогда и купишь. Чем тебя эти пять строчек напрягают?
Prototipnew , можешь код из #30 доделать чтобы в Сериал выводился весь блокнот датчика ?
что-то здеся не так.....
и уйди с пина 2 ( и 3 ) - если выкладываешь не весь код то может быть прерывания тибе , коду :) мешают ?
этот пример что в Сериал выдаёт ?
покажи....
А часы то здесь при чем? Оставь этот код преобразования в сетапе, он при каждом перезапуске будет по новой настраивать. Не сталкивался с такой х-ней. Может датчик глючный попался.
Ну да часы непричем...Понятно ну ладно спасибо. Куплю другой датчик.
Так когда умрет совсем, тогда и купишь. Чем тебя эти пять строчек напрягают?
Ты не поверишь))))))))) То же самое строки не помогли)) Бля...ахаха
Мож ну его этот датчик , к чертовой матери. Мож лучше с блинком поиграться топикстартеру, а потом и с блинком без делей.Если бы датчик читать умел - уже бы и сам поменял разрядность и без загрузки скетчей...Не умея менять разрядность датчика , имеем желание иметь температуру с тысячными градуса. .
этот пример что в Сериал выдаёт ?
покажи....
А что -такое СЕРИАЛ?
Ctrl + Shift + M
пардон , просто я так его называю :)
Мож ну его этот датчик , к чертовой матери. Мож лучше с блинком поиграться топикстартеру, а потом и с блинком без делей.Если бы датчик читать умел - уже бы и сам поменял разрядность и без загрузки скетчей...Не умея менять разрядность датчика , имеем желание иметь температуру с тысячными градуса. .
После тех пяти строчек проблема на 9 будет вернуться. Но возвращается, если только ТС ничего не умалчивает. Ощущение, что у него в EEPROM датчика не пишется.
аха , #39 :)
и #43....
Зайди сюда почитай , и возми там библиотеку.Там явно указано как менять разрешение датчика..