Добрый день, Всем!
провел некоторые эксперименты по оценке быстродействия.
—————————————
Исходные данные:
модуль этот http://nodemcu.com/index_cn.html
———————————————————————————————
Исследуем работу с DS18B20
——————————
1) сначала сделал скрипт на LUA из примера в документации
так как в существующей библиотеке работы c 1-wire не используются прерывания, то процессор фактически занят 800 ms на одно измерение при 12 битовой точности.
Таким образом, если нам необходимо получать одно измерение в секунду то максимальное быстродействие составит 1 измерение в секунду при 80% загрузки процессора.
————————
2) подключил 2 датчика для проверки идентичности преобразования. в результате систематическая ошибка в пределах 1-2 бит т е 0.0625-0.125 гр С
——————————
3) после этого написал драйвер с использованием прерываний.
В результате время загрузки процессора составило 40 ms вместо 800 ms по примеру из пакета. Таким образом загрузка процессора уменьшилась в 20 раз.
При скорости преобразования 1 измерение в секунду (датчик быстрее с такой точностью не работает) загрузка процессора составляет 4%.
————————————————
Загрузку процессора можно еще уменьшить примерно в 2 раза для двух датчиков или в 4 — для одного. Это можно обеспечить , если читать из DS18B20 лишь два байта температуры и не проверять контрольную сумму.
В этом случае чтение показаний двух датчиков составляет 22 ms и 12 ms, если датчик один.
При этом запуск измерения в двух датчиках выполняется одновременно.
———————————————-
Таким образом, получили возможность одновременно измерять температуру в нескольких точках объекта со скоростью 1 измерение в секунду.
Загрузка процессора составляет примерно 1%.
Драйвер на LUA.
—————————
Кроме того, получились следующие времена:
tmr.now(); —23 мкс
string.char(ow.read(pin)); —1836 мкс
ow.crc8(string.sub(data,1,8)) —115 мкс
ow.reset(pin); ow.select(pin, adT[i]); ow.write(pin,rom,1); — 6800 мкс
————————————