1-wire на STM8
Apr. 6th, 2015 02:42 pm(написал бы вчера, но почти двое суток интернета не было в поселке)
Потихоньку мои сниппеты для STM8 разрастаются. Чтобы переделать "вольтметр" в термометр на 1-wire (кстати, можно и простое термореле сделать на трехсимвольном "вольтметре" — у него свободных ног достаточно),понадобилась поддержка 1-wire. Все, что в интернете находил, было реализовано совершенно некрасиво: ногодрыгом с жуткими задержками (по сути, операция опроса термодатчика везде делалась блокирующей, что не очень хорошо для таких вещей, как динамическая индикация, опрос клавиатуры и т.п.).
Я сделал на таймере: у трехсимвольного "вольтметра" как раз второй канал compare/capture таймера TIM2 используется как аналоговый вход для измеряемого напряжения, т.е. модифицировать будет проще всего. И Вот, что получилось. Пока что код непричесанный, содержит много отладочной информации + не до конца допиленный.
Что уже реализовано:
Что еще нужно реализовать (UPD 08.04):
Потом еще хочу с DHT11/DHT22 научиться работать. Но у них совсем все уныло, т.к. только 1 датчик на линию можно вешать. Да и точность там ну совсем жуткая, даже DS18 фору даст!
А еще надо бы закончить с реализацией аппаратного 1-wire (через таймер с DMA) на STM32.
Потихоньку мои сниппеты для STM8 разрастаются. Чтобы переделать "вольтметр" в термометр на 1-wire (кстати, можно и простое термореле сделать на трехсимвольном "вольтметре" — у него свободных ног достаточно),понадобилась поддержка 1-wire. Все, что в интернете находил, было реализовано совершенно некрасиво: ногодрыгом с жуткими задержками (по сути, операция опроса термодатчика везде делалась блокирующей, что не очень хорошо для таких вещей, как динамическая индикация, опрос клавиатуры и т.п.).
Я сделал на таймере: у трехсимвольного "вольтметра" как раз второй канал compare/capture таймера TIM2 используется как аналоговый вход для измеряемого напряжения, т.е. модифицировать будет проще всего. И Вот, что получилось. Пока что код непричесанный, содержит много отладочной информации + не до конца допиленный.
Что уже реализовано:
- опрос одного-единственного датчика с командой Skip ROM,
- вывод температуры в тысячных долях °C,
- сохранение ROM-кода подключенного датчика в EEPROM (т.к. я рассчитывал на STM8S003, то, несмотря на то, что у 105-го, на котором я тренируюсь, 1кБ EEPROM, датчиков максимум 14, т.к. у 003-го всего лишь 128Б),
- поочередный опрос всех датчиков с сохраненным ROM и выдача температуры.
Что еще нужно реализовать (UPD 08.04):
убрать тысячные (т.к. точность DS18 ниже плинтуса, там даже округление до целых градусов — многовато, по-хорошему, надо в сторону ближайшей тройки, а то и четверки округлять),(сделано), теперь по крайней мере не так в глаза бросается; вот, например, для "устаканившихся" трех B20 и одного (четвертого) S20: 23.6, 23.5, 23.4, 23.5. А то и вообще: 23.6, 23.6, 23.4, 24.0...добавить возможность удаления ROM несуществующих датчиков,(сделано)- перенести весь код на "вольтметр".
Потом еще хочу с DHT11/DHT22 научиться работать. Но у них совсем все уныло, т.к. только 1 датчик на линию можно вешать. Да и точность там ну совсем жуткая, даже DS18 фору даст!
А еще надо бы закончить с реализацией аппаратного 1-wire (через таймер с DMA) на STM32.
no subject
Date: 2015-04-06 10:31 pm (UTC)no subject
Date: 2015-04-06 10:39 pm (UTC)// кстати, про слухи: некоторые верят, что DS18B20 позволяет измерять температуру с точностью до десятой доли градуса! А фактически они вообще невоспроизводимые результаты дают. И никакая калибровка не поможет! ±1.5°C на интервале где-то от -10°C до +35°C — наверное, наилучшее, что из них можно выжать. Правда, если посмотреть на цену, то это и понятно...
no subject
Date: 2015-04-06 11:11 pm (UTC)no subject
Date: 2015-04-07 05:31 am (UTC)А вот где-то от -40..-10 и до +40..+100 уже куча полупроводниковых с реальной точностью не хуже ±0.1°C на всем интервале (после калибровки).
no subject
Date: 2016-04-06 03:59 pm (UTC)no subject
Date: 2016-04-06 09:34 pm (UTC)Аналогично с термометрами: хочешь ±1°C — берешь DS18B20. Хочешь ±0.1°C — покупаешь уже что-то более приличное, раз в 50 дороже.