Сообщение от oleg110592
|
Между вызовом процедуры и моментом когда она возвращает результат проходит примерно секунда. Динамическая индикация остановится (прерывания запрещаются) пока функция не отработает.
|
В функции
ds18b20_temperature()
нет запрета прерываний. Можете посмотреть ассемблерный код.
Но тут проблема: чтение и запись
1wire чувствительны к таймингам. И если в неподходящий момент чтения/записи возникнет прерывание на индикацию, которое будет выполняться хотя бы 10 мкс, то чтение/запись может выполниться некорректно.
Фактически, всё сводится к нескольким десяткам вызовов
w1_write() /
w1_read().
И чтобы всё работало корректно, достаточно запретить прерывания именно на момент вызова этих функций (~ 500 мкс).
Ни к чему запрещать прерывания на весь период преобразования (~750 мс на лучшей точности измерения).
Для этого, правда, потребуется написать свои функции работы с
1wire (или изменить имеющиеся).
Прерывания даже на 1 мс существенно не нарушат динамической индикации (если только не используется регулировка яркости ШИМ-ом).
P.S. 10 мкс - это всего лишь вход и выход в обработчик прерывания на частоте 1 МГц. Работа с
float - это миллисекунды.