В данном проекте мне удалось изобрести предельно простой и дешевый велосипед. При этом, он обладает всеми преимуществами цифрового измерителя и превосходит аналогичные устройства. Применен нестандартный способ работы с термодатчиком, благодаря чему, 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мА (зависит от применяемых индикаторов).
Схема термометра предельно проста — все компоненты в «стандартном включении». В схеме нет стабилизатора как и блока питания вообще — подразумевается использование внешнего стабилизированного источника питания. Гнездо разъема 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
В данном случае конвертирование значения температуры выполняется в самом датчике и от него мы получаем вполне реальное число, положительное или с знаком «минус». Помимо того, что упрощается текст исходника и экономятся ресурсы микроконтроллера, для получения результата нужна всего одна переменная, а определение «положительности» температуры не требуется.
Незначительное обновление — в устройство термометра добавлено гнездо для подключения термодатчика непосредственно на плату. Это нужно для удобства отладки программы МК или когда термометр используется в качестве комнатного.