Термометр на mega8, DS18B20 и LED-индикаторе

В данном проекте мне удалось изобрести предельно простой и дешевый велосипед. При этом, он обладает всеми преимуществами цифрового измерителя и превосходит аналогичные устройства. Применен нестандартный способ работы с термодатчиком, благодаря чему, DS18B20 измеряет температуру с точностью до десятых долей градуса.

При разработке устройства особое внимание было уделено стабильности показаний на LED-дисплее — не люблю, когда цифры на дисплее «подергиваются» или едва заметно мерцают. Кроме того, показания индикатора программно корректируются таким образом, что-бы не показывался «незначащий 0» и знак «-» всегда был рядом с цифрами. Т.е., если значение температуры показывается на дисплее в формате «-00.0», то температура (например) -25.3°C показывается «как есть». А если температура (например) -5.5°C, то знак «-» программно «пододвигается» к значению температуры и на дисплее показывается «-5.5» вместо «- 5.5» или «-05.5» или «-5.50». Таблица истинности в соответствующей подпрограмме написана для индикатора с общим анодом.

Основные характеристики и особенности термометра:

  • Микроконтроллер: ATmega8A.
  • Термодатчик: DS18B20.
  • Индикация результата: 7-сегм. 4-символьном LED-дисплее с ОА.
  • Гашение «незначащего 0» на дисплее.
  • Перемещение знака «-» ближе к цифрам на дисплее.
  • Измеряемая температура ограничена возможностями термодатчика: от -55 до +125°C.
  • Точность индикации (не измерения) температуры: 0.1°C.
  • Возможность передачи значения измеренной температуры по UART.
  • Стабильная индикация значения температуры на дисплее, без «подмигиваний», «подергиваний» и мерцаний.
  • Размер платы термометра: 25х75мм.
  • Источник питания: внешний.
  • Напряжение питания: 5В.
  • Потребляемый ток: от 20мА (зависит от применяемых индикаторов).

Версия 1.3

Схема термометра предельно проста — все компоненты в «стандартном включении». В схеме нет стабилизатора как и блока питания вообще — подразумевается использование внешнего стабилизированного источника питания. Гнездо разъема IDC-10MR (ISP-10) служит как для подключения программатора, так и для подключения датчика температуры, причем «разводка» разъема спроектирована таким образом, что полноценная работа термометра возможна и при подключенном программаторе.

 

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

Немного об особенностях работы с термодатчиком DS18B20 в BASCOM. Многим знаком «классический» пример опроса датчика и преобразования полученного результата:

1wreset
1wwrite &HCC
1wwrite &HBE

Byte0 = 1wread()
Byte1 = 1wread()

If Byte1 > 248 Then
     Byte0 = &HFF — Byte0
     Byte1 = &HFF — Byte1
     N1 = 0
Else
     N1 = 1
End If

T1 = Byte0 / 16
T2 = Byte1 * 16
T1 = T1 + T2

If N1 = 0 Then
     T1 = T1 + 1
End If

If N1 = 1 And T1 = 0 Then
      N1 = 1
End If

Здесь, мы, сразу после обращения к датчику, считываем результат предыдущего измерения посредством считывания нулевого и первого байтов ОЗУ. Для того, чтобы сформировать удобочитаемый результат приходится полученные значения нулевого и первого байтов сдвигать, соответственно, влево и вправо на 4 бита. Потом пытаемся определить «отрицательность» температуры и в конце даже приходится корректировать итоговое значение для корректного отображения на дисплее. Кроме того нам требуются дополнительные переменные.

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

1wreset
1wwrite &HCC
1wwrite &H44

1wreset
1wwrite &HCC
1wwrite &HBE
Led = 1wread(2)

Led = Led * 10
Led = Led / 16

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

Версия 1.3.1

Незначительное обновление — в устройство термометра добавлено гнездо для подключения термодатчика непосредственно на плату. Это нужно для удобства отладки программы МК или когда термометр используется в качестве комнатного.