разница есть.когда пользовал ДС-ки эту проблему решил следующим образом:
по прерыванию синхронизации сети запускаем таймер шима ,далее в линию выдаём три команды DSReset , SKIP ROM [CCh], CONVERT T [44h]- таким образом запускаем преобразование всех датчиков которые висят на линии 1-Wire (у меня их было 8-мь). выставляем флаг что преобразование запущено. выходим из прерывания.
далее в каждом прерывании проверяем готовность линии 1-Wire. если линия готова , опрашиваем все датчики на линии на это у нас есть 10мС за вычетом времени на запуск шима. этого более чем достаточно.
m16, 25 Окт. 13, 21:43
Я делаю подобным образом. Сначала выдаю команду датчикам DSReset , SKIP ROM [CCh], CONVERT T [44h], выхожу из прерывания, в прерывании есть счетчик секунд. Когда при очередном прерывании определяю, что прошла секунда, с момента выдачи команды на датчики то опрашиваю датчик, не проверяя готовность линии. За секунду-то она точно будет готова. Или нет?
Сейчас сделал замеры времени, требуемое на команды DSReset , SKIP ROM [CCh], CONVERT T [44h], оказалось 400 тиков 125кгц таймера. Это около 312 герц.
Опрос датчика занимает 2101 тиков 125кгц таймера. Это около 60 герц, то есть еще два полупериода. Так что от полного помаргивания не избавиться.
Ага, проанализировав код программы (а я делал свои функции на основе библиотечных) определ, что при каждом обмена информацией с датчика считываются все 8 байт информации, а мне нужно только 2 первых байта - температура. При считывании только двух байт опрос датчика происходит за 1400 тиков. Тоже многовато, учитывая, что полупериод длится около 1200 тиков. Основное время уходит на передачу в однопроводную шину 8 байт уникального номер датчика. Впрочем, можно попробовать разбить передачу уникального номера на две части.