Немного общей информации:
- Протокол связи с датчиком поддерживает два режима, широковещательный и адресный (для случая с одним датчиком на линии или несколькими соответственно). Второй (полноценный) вариант протокола реализовывать не стал, т.к. сами датчики не понравились.
- Протокол стабильный с проверкой контрольной суммы. Имеются отдельные запросы на измерение и на считывание.
- АЦП датчика работает с разной разрядностью (самая большая точность 0,061℃). Чем меньше разрядность, тем меньше точность и период считывания температуры.
- Варианты подключения: двухпроводной с паразитным питанием и трехпроводной (земля, питание, данные, более стабильный).
- Датчик с пределом в 127 градусов (7 бит, 8-й бит знак минус), что и является пределом для микросхемки в обычном пластиковом корпусе, а хотелось бы 300.
- Полностью цифровой и откалиброванный на заводе, никакой возни (почти), только подай питание и запроси температуру.
А теперь о том как его подключать, о полностью фоновой работе с использованием DMA можно забыть сразу, т.к. протокол мудреный. А после того, как я подключил его, используя аппаратный UART, то обнаружил, что датчик отвалился после 50 градусов. Поплыли тайминги асинхронной шины во время ответов датчика. Видимо на них влияет емкость PN перехода транзистора внутри микросхемы, которая, в свою очередь, зависит от температуры. Не говоря уже о том, что тайминги изначально не совпадали с теми, что были в документации. Переход на полностью программную реализацию с бг-мерзкими задержками выдал стабильную работу. Но вот добиться такого можно только, подкручивая тайминги на глазок, что мягко говоря не научно.
Видимо все дело в том, что настоящих датчиков я и не видел, да их и в городе скорее всего нет. Оригинал нужно покупать у тех продавцов, про которых знает сам производитель, а там дорого. Т.е. далеко не те 20р, что предлагает алиекспресс и не 128, что в ООО Радиомастер. Возможно у настоящих датчиков все тайминги строго как в документе и никаким подкручиванием там заниматься и не нужно. А пока что вот, полюбуйтесь на картинку, мне она кажется жутковатой.
тайминги считывания и записи битов |
В остальном, такую гадость как программный интерфейс с задержками на западе прикрывают умным словом blocking API. Для тех, кто ничего не понимает, звучит солидно, значит всё нормально. Но вот если отвлечь такой интерфейс прерыванием, то операция явно закончится ошибкой CRC. Комментарии к коду будут в следующем посте, а так вот исходники ds18b20.c и ds18b20.h. И пример работы на видео.
Комментариев нет :
Отправить комментарий