1-wire на STM8

Apr 06, 2015 14:42

(написал бы вчера, но почти двое суток интернета не было в поселке)

Потихоньку мои сниппеты для 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.

stm8, железяки

Previous post Next post
Up