Цифровой термометр на DS18B20 (устарела)

Давно на сайте была выложена конструкция цифрового термометра с двумя датчиками DS18S20. Во время недавнего обновления той статьи была разработана прошивка работы контроллера с датчиками DS18B20.

Датчик DS18B20

Датчик DS18B20

В прошивку были внесены некоторые изменения. А именно расширения предела измеряемых температур, теперь он мереет от -55 до +128 градусов Цельсия, термодатчик используется по полной. Был удалён дробный разряд.

Основой функционал остался прежним. Термометр по-прежнему поддерживает 2 термодатчика и между ними переключается начатием кнопки.

Схема и печатку для изготовления термометра привожу из предыдущей статьи, т.к. они не изменились. Если к ним нужно описание, то смотрите их в статье Цифровой термометр на ds18s20.

Схема цифрового термометра

Схема цифрового термометра

Печатная плата

Печатная плата

Проверка термометра

Проверка термометра

Проект содержит:

  • прошивку для PIC16F628A
  • исходник на С
  • проект для proteus
  • печатку в формате SL5 (*.lay)

Скачать файлы проекта

Статья и прошивка обновлена 5 марта 2011

59 комментариев на « Цифровой термометр на DS18B20 (устарела)»

  1. iggi пишет 04.03.2011 в 01:04 #

    Собрал в железе, работает, но мерцает приблизительно 2 раза в секунду, камера мобилки мерцание слабо передаёт. Почемуто не хочет работать с паразитным питанием Даласа.

  2. iggi пишет 04.03.2011 в 09:38 #

    И ещё, отрицательные температуры показывает с десятичной точкой?

  3. iggi пишет 04.03.2011 в 21:52 #

    и ещё немного добавлю: вместо 10 индицирует 0, переключение кнопкой «туговатое» — при нажатии нужно придержать, иначе не переключает. Кстати в Протеусе тоже подмаргивает, в железе постоянно а виртуально периодически, может от компа зависит? Самому тямы подправить не хватает, если б коменты по подробней были б.

  4. Alex_EXE пишет 05.03.2011 в 00:40 #

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

  5. iggi пишет 05.03.2011 в 01:06 #

    Кнопка переключения датчиков стала ещё «туже» в Протеусе, прошивку попробовать в железе пока нет возможности, только после праздников. Кстати десятичную точку можна вообще исключить из схемы, она ж не используется.

  6. Alex_EXE пишет 05.03.2011 в 20:28 #

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

  7. Oleg пишет 06.03.2011 в 12:20 #

    Добрый день собрал термометр всё работает хорошо есть конечно мерцание но наверное от этого не избавится,но и сильно не мешает,Алекс хотел тебя спросить при какой максимальной длине кабеля датчик будет работать хочу попробывать поставить в машину в систему охлаждения и на бамфер? Заранее благодарен.

  8. Alex_EXE пишет 06.03.2011 в 21:35 #

    Схема с DS18S20 проверялась на 10 метровом аудио-видео кабеле (был под рукой). С подтягивающем резистором, расположенным возле датчика, всё работает.
    В спецификации линии написана максимальная длина 300м.
    Советую посмотреть документацию на шину 1-wire.

  9. iggi пишет 10.03.2011 в 00:22 #

    Залил последнюю прошивку, вроди всё гут, но мерцание практически не изменилось, по крайней мере визуально. Есть какие то резервы для улучшения конструкции?

  10. Alex_EXE пишет 10.03.2011 в 01:36 #

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

  11. iggi пишет 10.03.2011 в 10:36 #

    Проверяю в железе, мерцать стало приблизительно раз в секунду. И ещё, заметно что разряды имеют разную яркость, например: минус светится заметно ярче чем соседняя цифра, может в анодах использовать транзисторные ключи?

  12. Alex_EXE пишет 11.03.2011 в 00:26 #

    Ключи могут помочь.
    Минус ярче светиться – т.к. весь ток течёт через один сегмент.

  13. Игорь пишет 30.06.2011 в 03:02 #

    Индикатор с общим анодом или катодом ?

  14. Alex_EXE пишет 30.06.2011 в 21:29 #

    С общим анодом.

  15. gend пишет 26.08.2011 в 04:17 #

    Почему-то в прошивке калибровочная постоянная оказалась в первой строке, а первая строка с конфигурацией в конце. И непонятно значение конфигурации 3F78 для указанного контроллера.

  16. Alex_EXE пишет 30.08.2011 в 22:44 #

    Фьюзы: внутренний осцилятор, порты свободны, MCLR, BODEN.
    Использую компилятор HI-TECH, программатор на прошивки не жаловался. В структуру hex файлов прошивок не вдавался, как-нибудь потом гляну.

  17. Zahar пишет 24.12.2011 в 12:42 #

    Здравствуйте! Скачал файлы проекта, а при разархивировании пишет что нет файлов для извлечения. В чем может быть дело?

  18. Alex_EXE пишет 26.12.2011 в 00:09 #

    Архив рабочий, обновите архиватор.

  19. denis пишет 09.01.2012 в 13:28 #

    Подскажите, пожалуйста, сколько данное стройство работает непрерывно от «кроны»? Собрал устройство, от новой батареи проработало всего 12 часов 🙁

  20. Alex_EXE пишет 09.01.2012 в 13:47 #

    Подсказать точно не могу, но не очень долго, светодиодный дисплей достаточно потребляет.
    За всё время эксплуатации (3 года или более) своего термометра – в нём стоит вторая или третья по счёту крона (использую недорогие GP батареи), но при этом обычно держу включённым его менее минуты.

  21. denis пишет 09.01.2012 в 14:01 #

    понятно, спасибо!

  22. Саша пишет 15.01.2012 в 19:42 #

    Здравствуйте! Собрал схему. отлично работает спасибо!))

  23. Александр пишет 25.02.2012 в 02:07 #

    Собрал Ваш термометр- при включении показывает 85, дальше d- 1 и дальше все потухло. Датчик стоит один- где накосячил или обязательно второй датчик цеплять?

  24. Alex_EXE пишет 26.02.2012 в 15:11 #

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

  25. Александр пишет 01.03.2012 в 20:33 #

    Разобрался- оказался не исправным датчик- заменил и все работает, но только постоянно мигает сначала d-1 показывает температуру, а потом d-2 и температура с другого датчика- на кнопку не реагирует вообще ни как. Период переключения приблизительно 2 сек. Что может еще быть?

  26. Александр пишет 02.03.2012 в 20:19 #

    Все нашел- все работает исправно- спасибо за термометр.

  27. Alex_EXE пишет 04.03.2012 в 20:33 #

    Пользуйтесь на здоровье 🙂

  28. Евгений пишет 08.03.2012 в 22:39 #

    На днях соберу Ваш термометр для своей любимой ВАЗ 2107. Так вот незадача по ошибке купил с общими катодами 🙁 пожалуйста переделайте прошивку под катоды. Исходник пока не смог скомпилировать только учусь 🙁

  29. lan пишет 08.03.2012 в 22:52 #

    Уважаемый Евгений, хочу Вам очень популярно объяснить, что переделать прошивку под другой дисплей — это довольно сложная задача. Лучше уж Вы сходите ещё раз в магазин и купите правильный дисплей. Другой вариант — если Вы сами разберётесь и переделаете прошивку и поделитесь с нами. Тогда мы с радостью вывесем на сайт Ваш вариант схемы и программы.
    Надеюсь на понимание.
    p.s. А вообще мы словили кучу лулзов от такой просьбы. Бугага)))))
    Для нас это звучит как:
    Я случайно залил солярку в бензобак, вместо 92 бензина. Перенастройте мне карбюратор, что-то машина коптит и не тянет.

  30. Дмитрий пишет 13.03.2012 в 13:36 #

    насколько сложная задача добавить на вывод RA4 кнопку для фиксации значения температуры до следующего нажатия т.е. на некоторое время «заморозить» значение температуры на индикаторе??? или изменить функцию имеющийся кнопки(переключение датчиков) на функцию фиксации температуры на некоторое время но уже с одним датчиком??

  31. Владимир пишет 13.03.2012 в 15:55 #

    Собрал схему. При включении загорается 85 потом показывает температуру 5 сек и выдает d-1. Пререпробовал 3 датчика. Отсюда собственно вопрос- в чем подвох?

  32. Alex_EXE пишет 14.03.2012 в 00:22 #

    Владимир
    Если используется только один датчик, то он должен быть подключен к RA1, кнопку лучше из схему убрать, от случайного нажатия, но её вход (RA7) должен быть подтянут резистором к + питания. Если основного датчика нет или переключиться на несуществующий датчик, то вольтметр повиснет.
    Проверьте кнопку и её обвяз?
    Дмитрий
    Это всё сделать не очень сложно, но я сосредоточен на других задачах, исходники к проекту прикреплены.

  33. Виталий пишет 10.04.2012 в 10:31 #

    Подскажите можно ли использовать в данной схеме световой индикатор GND-5622FS-21

  34. Alex_EXE пишет 10.04.2012 в 22:26 #

    Можно, только десятых градусов видно не будет. Распиновку проверяйте сами.

  35. Вадим пишет 20.11.2012 в 16:43 #

    Здравствуйте Alex_EXE. Попытался откомпилировать прошивку но у меня это не получилось. Вернее прошивка откомпилировалась и при постановке ее в Протеус не отобрадается температура при чередовании это «d-1″, » -«, «d-2″, » -«, «d-1″…
    Компилировал в MPLAB c компилятором HI-TECH ANSI C Compiler.
    При компиляции выдает несколько ошибок
    HI-TECH C PRO for the PIC10/12/16 MCU family V9.65
    Copyright (C) 1984-2009 HI-TECH SOFTWARE
    Serial number: HCPICP-654321
    Error [482] D:\test\test.obj; 50. symbol «__end_of_make_ds1820_low_pin» is defined more than once in «test.obj»
    Error [482] D:\test\test.obj; 52. symbol «_read_ds1820_one_byte» is defined more than once in «test.obj»
    Error [482] D:\test\test.obj; 53. symbol «_seg7» is defined more than once in «test.obj»
    Error [482] D:\test\test.obj; 53. symbol «_low_init» is defined more than once in «test.obj»
    Error [1346] D:\test\test.obj; 0. can’t find 0x2 words for psect «config» in segment «CONFIG» (largest unused contiguous range 0x1)
    Наверное у меня нет файла по датчику 18В20 какого-то.

    Ну и если вам не сложно это сделать то можно подправить прошивку таким образом чтобы отображалось «car», » 20″, «Out», «-10», «Car»… или же » In», » 20″, «Out», «-10″, » In»…

    Так как это я боюсь все равно не осилю. Прибор как и вольтметр который я делал в корпусе 2103 по Вашей схеме планируется для установки в автомобиль, для индикации салонной и наружной температуры. Отчет о результате как и вольтметр предоставлю для сайта, ссылки на первоисточник и авторство согласно законодательства :). CAR можно написать как afed, gedcDp, eg хотя если будет не читабельно то лучше In, Out.

    Заранее благодарю за помощь

  36. Виталий! пишет 05.01.2013 в 05:12 #

    Подскажите что за функция read_ds1820_one_byte()

    В упор не могу понять что это за манипляции, и что за значение в переменной temp.

    PORTA=0x00;
    TRISA=mask;
    TRISA=0xff;

    temp=PORTA;

    А вопрос вообще вот такой, Если подключен 1 датчик. То это 1 нога микросхемы.

    Зачем манипулировать всем портом (TRISA вход выход) Если можно только нужной ногой.

    TRISA0 = 0; RA0=1;

  37. Виталий! пишет 05.01.2013 в 18:53 #

    Разобрался с работой дачика. Переделываю исходник под себя.

    У кого есть мерцает это можно убрать используя статическую индикацию. Но для этого нужно 3 отдельных сегмента, и 3 сдвиговых регистра (например 74hc595). Так же увеличится сама схема.

  38. Андрей пишет 17.03.2013 в 13:15 #

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

  39. slozya пишет 18.03.2013 в 13:53 #

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

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

  40. slozya пишет 18.03.2013 в 13:56 #

    во-первых. в даташите первый контакт датчика посажен на массу а в схеме на плюс, непонятно.

    на схеме датчик нарисован перевернутым

  41. Alex_EXE пишет 21.03.2013 в 00:53 #

    Если не путаю, то на одну линию можно посадить до 127 датчиков, правда, при таком их числе понадобиться спец.решения. Линия, а точнее интерфейс, по которому подключены датчики, называется — одно проводная или 1-Wire.
    В принципе, написать и про, примерно, 5-ти точечный термометр можно будет, но не в скором времени.

  42. darik пишет 16.11.2013 в 11:10 #

    здравствуйте.собрал ваш девайс,залил прошивку для датчика ds18b20.при запуске индикатор показывает «10»,потом переключается и показывает «3».датчик у меня ds1820 без буквы «b» или «s».решил залить прошивку для датчика ds18s20 заработала без проблем.

  43. толик пишет 20.12.2013 в 00:50 #

    Подскажите как выставить фьюзы в програматоре к 150

  44. Alex_EXE пишет 20.12.2013 в 01:47 #

    С этим программатором не сталкивался, подсказать не могу.

  45. vik1917 пишет 19.01.2014 в 03:18 #

    Здравствуйте! Подскажите, пожалуйста, что в такой ситуации может быть: схема спаяна правильно, индикатор не светится совсем, МК прошит без ошибок (по крайней мере РicKit2 выдал так)… Прошил 2 МК, результат такой же… МК не исправны? Датчики тоже 2 поменял… Перед записью стирал полностью… OSSCAL не тербуется? Уже до психов доходит… Не могу понять, хоть и схема простенькая…

  46. DX2 пишет 04.03.2014 в 17:29 #

    Собрал, работает, но когда датчики на коротком «поводке», подключил кабеля по 20м (приблизительно) пишет «0»

  47. Alex_EXE пишет 09.03.2014 в 13:27 #

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

  48. Анатолий пишет 09.03.2014 в 21:34 #

    Залил новую прошивку, все работает вот только моргает. Можно ли этот недостаток убрать?

  49. Alex_EXE пишет 11.03.2014 в 14:35 #

    К сожалению пока-что нет.

  50. Гость пишет 01.04.2014 в 15:28 #

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

  51. Alex_EXE пишет 12.04.2014 в 14:53 #

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

  52. olegtur77 пишет 28.05.2014 в 18:23 #

    Кто-то исправил мигание индикатора в термометре? А то у меня пока не получается

  53. olegtur77 пишет 02.06.2014 в 00:26 #

    Немного поигрался с программой термометра. Сделал два варианта под ОК и ОА(с исправлениями), увеличил задержку между обновлениями прим 5 сек, теперь мигает намного реже, правда пришлось пожертвовать временем удержания кнопки(нужно держать дольше). Если Алекс не будет возражать, вот ссылка на архив с проектами. Еслу посчитает нужным разместить здесь архив — я конечно же только ЗА, так как он мне реально помог
    Архив тут http://yadi.sk/d/m_SrHRMmRujkw
    Добавил на сайт, теперь и тут то же — скачать

  54. Alex_EXE пишет 02.06.2014 в 00:38 #

    Не возражаю, только за.

  55. Ser_Vic пишет 11.06.2014 в 14:45 #

    olegtur77, а можно ли наоборот увеличить обновление для того чтобы глазом не было заметно?

  56. olegtur77 пишет 15.07.2014 в 22:54 #

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

  57. Alex90 пишет 25.09.2014 в 08:47 #

    Здравствуйте, а можно ли переделать прошивку, чтоб контроллер выдавал показания в двоичном коде, а индикатор включать через дешифратор «ИД2»? Есть необходимость снимать показание не только для индикатора. Заранее спасибо за помощ

  58. Александр пишет 13.11.2015 в 23:36 #

    Добрый вечер.Очень понравился термометр, собрал , работает, случайно спалил порт RA3, помогите изменить на RA4. Спасибо.

  59. Alex_EXE пишет 23.11.2015 в 04:14 #

    RA4 не самый хороший вывод, тем более для индикатора с общим анодом, т.к. это выход с открытым коллектором.
    При желании можете попробовать задействовать его:
    1. в прошивке на 17 строчек измените RA3 на RA4
    2. можно попробовать добавить подтяжку к RA4 порядка 1кОм, но этого будет много и сегмент будет светиться очень тускло. Наиболее оптимальный вариант поставить туда pnp транзистор с необходимой обвязкой.

Комментарии RSS

Оставьте отзыв