Вопросы по работе с термометрами DS18B20

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

Именно об этом я и говорю. В самом начале добавляем по одному датчику и оговариваем его местонахождение. Но чтоб добавить ещё датчиков или заменить неисправный, всё равно придётся сканировать всю "сеть", на наличие изменений.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

ну кто ж вас знает, что вы там затеяли :) грешным делом подумал, что как обычно: хата-улица термометр :)

но задачка все сконфигурировать будет нетривиальная, скажу я вам :))) хоть с меню, хоть без. такую систему надо для компа делать - у него и памяти больше, и все прочее тоже :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

Комп не устраивает энергопотреблением, габаритами и ценой. Да и особо никаких функций не надо: просто вывод температуры помещений на ЖК, для навигации - пара кнопок. Первоначальную настройку, наверное, буду по UART делать, или комповую клавиатуру приделаю, чтоб можно было дать нормальные имена датчикам. Пока более разумного ничего не придумал.
Задачу, как рас таки, считаю тривиальной - единственная сложность, которую сейчас испытываю, это именно поиск датчиков на линии. Ну и комповую клавиатуру ещё не приходилось к аврке цеплять, но, надеюсь, это не очень сложно :)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

AI_Disable писал(а):Задачу, как рас таки, считаю тривиальной
ну-ну... :)))

я б вам советровал голову не ломать над поиском, а брать готовое. для WinAVR есть отличные библиотеки, сами не найдете - могу свои предложить, CVAVR всеми любимый так вообще "встроенно" поддерживает эту функцию :)

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

Мой уютный бложик... заходите!
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

AI_Disable писал(а):...Первоначальную настройку, наверное, буду по UART делать, или комповую клавиатуру приделаю...

Я так понимаю что настройка устройства будет производиться очень редко (при первоначальном пуске и при ремонте), если вы собираетесь по UART настраивать прибор, тогда не проще ли будет сделать специальный разем для определения номера датчика, подключенный к отдельному пину меги. В этот разъем при настройке вы будете подключат по одному датчику, затем по команде с последовательного порта мега считает адрес датчика и выдаст его номер.
Далее зная номера датчиков вы сами решите какой из них будет какой. В принципе для ПК можно будет написать программку которая сформирует блок для записи в EEPROM (но можно и в ручную в текстовом редакторе сформировать). Далее этот блок можно будет также по последовательному порту загрузить в мегу и, вуаля, прибор настроен.
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

Да, конечно можно сделать и так и ещё вариантов придумать. Одно я не понимаю: зачем? Всё уже предусмотрено и нужно только суметь воспользоваться этим. Неужели это такая неподъёмная задача, что её нужно обходить окольными путями?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

AI_Disable писал(а): Неужели это такая неподъёмная задача, что её нужно обходить окольными путями?
дык чуть ли не с первого вашего вопроса вам и говорят: неужели использовать готовое невозможно?! :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

ARV, упустил из виду ваш предыдущий пост: когда я увидел эти "отличные библиотеки", весом over 2кб, то чуть не вошёл в состояние тихой паники, и подумал, что быстрее будет разобраться в принципе работы датчика, чем разумить готовую либу.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

AI_Disable писал(а):ARV, упустил из виду ваш предыдущий пост: когда я увидел эти "отличные библиотеки", весом over 2кб, то чуть не вошёл в состояние тихой паники, и подумал, что быстрее будет разобраться в принципе работы датчика, чем разумить готовую либу.
я вас не очень понимаю... что вас пугает? неужели для просмотра телевизора вы сначала изучили от и до всю технику видеовещания?! просто взять либу и использовать, не вникая в ее глубины - что тут такого?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Сообщение AI_Disable »

ARV писал(а):я вас не очень понимаю... что вас пугает? неужели для просмотра телевизора вы сначала изучили от и до всю технику видеовещания?! просто взять либу и использовать, не вникая в ее глубины - что тут такого?

Скорей всего так и придётся сделать. Просто, помимо использовать, ещё хотелось понять.
kolobok0
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Re: ds18b20помогите

Сообщение kolobok0 »

roma писал(а):Здравствуйте. Окажите консультацию пожалуйста. С помощью тини2313 хочу мерить температуру используя только один DS18B20. У меня такая беда-все время показывается температура 85 градусов. Это значение записывается в ОЗУ термометра по умолчанию с завода. Первоначально я написал прогу таким образом что после передачи команды "конвертировать температуру" я засекаю 1секунду и поистечении этого времени читаю первые два байта ОЗУ. В результате отображается число 85.
Потом переписал прогу и получилось так:после передачи команды "конвертировать температуру" я формирую там слот в виде отрицательного фронта и читаю линию таким образом
qwerty: sbis PIND,6 ;пропуск след команды если разряд =1
rjmp qwerty.
Дык вот незадача, в линии устанавливается лог 0 в виде напряжения 0,28 Вольт и никуда этот ноль не уходит. Потом я просто отрываю провод соеденяющий ногу микроконтролера с информационной ногой термометра и вижу что на информационной ноге термометра напряжение равно напряжению питания а на МК U=0.28В. Присоеденив снова МК к термометру напряжение в линии падает до 0,28В.
О чем это говорит? Че я делаю не так? Пробовал даже другой термометр ставить -все аналогично.


1) обеспечить подтяжку внутренним резистором к +5 при чтении линии МК.
2) постоянное число при приёме - обычно говорит о том, что Вы не правильно формируете задержки и(или) форму сигнала.

Всё строго по даташиту и будет Вам счастье!
Моменты на какие стоит обратить внимание.
1) временные интервалы - тут _очень_строго_ 99% всех бед отсюда.
2) чтение линии необходимо производить следующим образом:
а) выставляем пин как выход, подаём "1"
б) ждём 1 мкс
в) выставляем пин как вход, с подтяжкой к +5
г) ждём около 7 мкс (чтоб не словить заваленный фронт на длинных линиях).
д) читаем пин. это и есть исходное значение.
е) продолжаем задержку (минималка по даташиту - на вскидку не помню).
ж) повтор на следующий бит.


удачи Вам
(круглый)
ЗЫ
Двадцатка по даташиту (стандартное сканирование +-0,5 градуса). При самостоятельном расчёте точность до 0,06 градуса.
Двадцать первый при повышенной точности даёт 0,01 градуса.
ЗЫ ЗЫ
При точных измерениях не забываем про тарификацию по эталонам и про разогрев датчиков (сканирование не чаще 1 раза в минуту, если память не подводит)
Аватара пользователя
bevice
Открыл глаза
Сообщения: 54
Зарегистрирован: Сб июн 06, 2009 11:13:56
Контактная информация:

Сообщение bevice »

После запроса на измерение температуры нужно подождать 750мс (уточните по даташиту максимальное время измерения) прежде чем забрать результаты измерения.
После нас - хоть потоп (с) Лойсо
roma
Встал на лапы
Сообщения: 133
Зарегистрирован: Вс сен 13, 2009 23:38:58
Откуда: Шелехов ирк обл

Re: ds18b20помогите

Сообщение roma »

Я сделал всё в соответствии спунктами которые вы оговорили за исключением одной поправки При чтении задержка не 7мкс а13-15мкс.(по даташиту)
Если умышленно поменять это время то на семисигментном индикаторе будет рисоваться какаято загагулина.
Вопрос в другом
после команды конвертировать я делаю отрицательный фронт путём настройки пина на ввод,через 5мкс отпускаю линию и через 2мкс я её читаю читаю и читаю.(датчик должен выдавать лог 0 пока идёт преобразование) Дык вот линия всё время находится в нуле.

Отсоеденив МК от датчика я обнаруживаю что датчик в линию выдаёт лог 1 как и должно быть. Потом обратно соединяю и вытаскиваю из цепи датчик дык вот на соответстувющем пине МК присутствует напряжение 0,28В. Это несмотря на то что нога МК настроена как вход и подтянута к внешнему питанию через резюк 4,7К.
Ведь этого же не должно быть?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

порт настраивается на вход DDRx = 0, при этом PINx = 0 так же. внешний резистор подтяжки облеспечивает наличие на пине 1. формирование тайм-слота начинается с перевода пина на выход DDRx=1, спустя указанное время (не 15 мкс!!!!!!) линия снова отпускается DDRx=0, после чего опять же спустя заданное время (не 15 мкс!!!!!!) производится считывание PINx. состояние PORTx никогда не меняется - оно все время равно 0.

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

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

Мой уютный бложик... заходите!
Аlex

Сообщение Аlex »

Не нужно ничего ждать. После команды преобразования подождите 1 сек, имп. сброса, выбор датчика либо пропуск РОМ, затем читаем температуру. Всё !
Последний раз редактировалось Аlex Ср янв 13, 2010 09:28:53, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Аlex писал(а):Не нужно ничего ждать.
но можно :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аlex

Сообщение Аlex »

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

Вырезка из ДШ:
После конвертирования, полученные данные запоминаются в 2-байтовом регистре температуры в оперативной памяти, и DS18B20 возвращается к его неактивному состоянию. Если DS18B20 включен с внешним питанием, ведущий может контролировать конвертирование температуры (после команды [0х44]) по состоянию шины. На шине будет присутствовать логический «0» когда происходит температурное преобразование. И логическая «1», когда конвертирование выполнено. Если DS18B20 включен с паразитным питанием, эта технология уведомления не может быть использована, так как шину нужно подать высокий уровень (напряжение питания) в течение всего времени температурного преобразования.

Во время преобразования датчик не отвечает не на какие тайм слоты, не вводите людей в заблуждение ! Он в это время находится в неактивном состоянии.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Аlex писал(а):Во время преобразования датчик не отвечает не на какие тайм слоты, не вводите людей в заблуждение ! Он в это время находится в неактивном состоянии.
Ух, как я зол! :twisted: поначитаются всяких дурацких книжек и начинают "вещать"!

цитирую настоящий даташит:
If the DS18B20 is powered by an external supply, the master can issue read time slots after the Convert T command and the DS18B20 will respond by transmitting a 0 while the temperature conversion is in progress and a 1 when the conversion is done.
переводить надо?

вы хоть подумали маленько бы сами, прежде чем безаппеляционно заявлять: на шине может быть куча девайсов, все из которых долгий 0 (гораздо короче, чем время преобразования) воспримут как RESET - вы считаете, это фирма-производитель такое придумала, что когда один меряет температуру, все прочие помирают?!

так кто вводит в заблуждение людей? :twisted:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аlex

Сообщение Аlex »

Согласен, возможно и книжка дурацкая, на них не написано дурацкая она или нет. Что есть в наличии, то и читаем.
Скажите мне тогда, каким образом Вы собираетесь выбирать девайс, состояние которого Вы хотите проверить ? И, если даже Вы его выберете, назовите мне команду для чтения состояния.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

написано же в ДШ: мастер может послать тайм-слот чтения сразу после команды Convert T - вот и все. посылаете тайм-слоты, а отвечает тот, которого вы только что запустили на измерение.

данная процедура применима либо для единственного датчика на шине, либо для последнего активированного.

а чтобы понять, какое качество книжки, надо включать здравый смысл: удержание шины 1-wire в нуле более 400 мкс будет воспринято как сброс. но это еще пол-беды: если бы "измеряющий" датчик держал шину в нуле, то скажите, как бы вы смогли обратиться к другому девайсу на шине?!

P.S. советую читать не книжки, а ДШ в оригинале.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»