Термометр на DS18B20

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

Все те термометры которые я встречал, показывали не нужные мне два знака после запятой. Данный термометр производит округление до целого числа. Конечно при желании прошивку можно переписать (исходнки прилагаются). Прошивка написана на Си с использованием компилятора CodeVisionAVR. Это позволит без особого труда перенести код на другой контроллер. (например tiny2313). В схеме термометра нет ничего экзотического: линейный стабилизатор, индикаторы, контроллер, датчик, токоограничивающие резисторы и резистор подтяжки шины 1-wire:

Поскольку термометр включается два-три раза в день на несколько секунд то я решил не ставить резисторы R2-R9. Всё нормально работает который год. Но на всякий случай их лучше поставить. Сам датчик я засунул в термоусадку и выкинул за окно. Фьюзы контроллера должны быть настроены на тактирование от внутреннего RC генератора настроенного на частоту 1 Мгц. Ах да чуть не забыл!  Подтяните вывод RESET к плюсу питания через резистор на 10к. Это не обязательно, но желательно.

Скачать прошивку и исходник

Термометр на DS18B20: 49 комментариев

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

  2. To STT:
    По правде говоря у меня вообще этих резисторов нету :-) Когда я паял его я особо не задумывался о таких вещах как ограничение тока.. давно это было а щас переделывать лень. да и проблем ни каких нет. AVR — железный контроллер который стерпит всё! Но рисковать лучше не надо.

  3. Здравствуйте, подскажите данный термометр в Протеусе показывает температуру только при включении??? при изменении температуры в датчике ds18b20 изменений никаких не происходит, так что нужно постоянно выкл.вкл чтоб увидеть правильную работу???

    1. Тут есть определённые сложности без и существенной переделки прошивки их не преодолеть. Дело в том, что я чтоб особо не заморачиваться с чтением температуры , использовал стандартную библиотеку входящую в состав CVAVR. В этой библиотеке есть функция ds18b20_temperature которая непосредственно возвращает температуру. У нее есть один недостаток. Между вызовом процедуры и моментом когда она возвращает результат проходит примерно секунда. Динамическая индикация остановится пока функция не отработает. Такая большая задержка связана с тем что датчик не может быстро оцифровать температуру. Выход конечно же есть. Нужно сделать так чтоб пока датчик оцифровывает температуру, контроллер продолжал крутить динамическую индикацию. Но для этого придётся отказаться от использования этой библиотеки. возможно когда у меня будет побольше свободного времени (эх сессия :-( )я сделаю и второй вариант прошивки.

  4. вообщем я сделал термометр, но с другим кодом. Суть та же. Он не показывает постоянно, а зависает во время опроса датчика на 750 мс ну или на сколько выставишь точность. Я твою схему не собирал но код один в один. Только индикацию сделал без прерываний и таймеров. У тебя он тоже мигает сам индикатор???

    1. Индикатор у меня не мигает т.к. опрос датчика у меня происходит только 1 раз во время включения. Хочешь чтоб не мигал индиктор придётся отказаться от использования стандартной библиотеки для работы с датчиком и написать свою..

    1. Не у меня нет. Я не писал она мне не к чему просто. Есть вариант проще кстати =)
      Можно использовать не семисегментные индикаторы а жк индикаторы с контроллером hd44780. Тогда можно будет не парится по поводу 750-ти миллисекундной задержки, ничего мигать не будет.

  5. ну мне надо сделать модный регулятор, и надо не терять задержку 750 мс :) С жк знаю конечно, но забержка в кристалле…. Ладно, спс, буду шаманить))

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

    1. На одном проводе может висеть дофига подобных датчиков. Следовательно теоретически может возникнуть ситуация когда один датчик захочет установить на проводе логическую единицу а другой в тот же момент захочет подать ноль. В результате — короткое замыкание. Для того чтоб этого избежать применяют подтягивающий резистор. Когда кому-то из датчиков нужно сделать логический ноль на шине то он просто придавливает её к земле. Если нужно создать логическую единицу то датчик просто отпускает шину переводя свой вывод данных в высокоомное состояние и на шине логическая единица установится сама благодаря подтяжке.

    1. Они нужны микроконтроллеру и индикатору.
      Хотя если включать термометр кратковременно и не часто, то ничего не будет и без них
      Но по идее это не совсем правильно. но у меня тоже без них уже два года работает

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

    1. Я шью из Avr Studio.
      Давай щас открой окно фьюзов, подключи программатор к контроллеру и везде нажми кнопку read (или что там у тебя) и вставь сюда скриншот окна.
      Разберемся так у тебя фьюзы стоят или нет.

  7. Доброго времени суток! Подскажите такая проблема: делаю данный термометр на mega16, переделал исходник в Протеусе работает, а в железе на индикаторе отображаются только два последних знака. Подскажите что делать!!!!???
    Спасибо!!!

      1. Вроде все проверял. Проверю еще раз. А может быть, что-то с программой? Там же я так понимаю под mega 16 особо ничего переделывать не нужно? Компилятор вроде ошибок не выдает.

Добавить комментарий