Страница 1 из 1
Помогите разобраться c DS18B20
Добавлено: Чт ноя 05, 2009 22:50:40
Ray
Здравствуйте! Есть контроллер ATtiny2313V и датчик DS18B20. Датчик воспринимает как сигнал сброса и формирует ответ при удержании низкого уровня в линии более 28 мкс (при эмуляции в AVRStudio), а не 480, как должно быть. Не понятно как все остальные задержки формировать. Пишу на asm-е, все задержки программные. Помогите разобраться...
Добавлено: Чт ноя 05, 2009 23:00:58
Pooher
Всё по даташиту...
Добавлено: Пт ноя 06, 2009 12:42:58
Ray
По даташиту, после Reset-а ответ PRESENCE приходит через 15 - 60 мкс, ещё 60 - 240 мкс сам PRESENCE. При проверке ответа (организован цикл) через 15 мкс ответ фиксируется, а через 65 мкс уже нет (15 мкс + 60 мкс = 75 мкс). Длительность при передаче/приёме данных 60 - 120 мкс, а я уже при 28 мкс получаю RESET и PRESENCE...
help, Help, HELP!!!
Добавлено: Пт ноя 06, 2009 16:20:23
Pooher
А расскажите по подробнее, как Вы эмулируете работу 1820 в студии?
Re: Помогите разобраться
Добавлено: Пт ноя 06, 2009 17:59:06
uldemir
Ray писал(а):Здравствуйте! Есть контроллер ATtiny2313V и датчик DS18B20. Датчик воспринимает как сигнал сброса и формирует ответ при удержании низкого уровня в линии более 28 мкс (при эмуляции в AVRStudio), а не 480, как должно быть. Не понятно как все остальные задержки формировать. Пишу на asm-е, все задержки программные. Помогите разобраться...
imho Это требование не к 1-wire устройству, а к хосту - удержать линию не менее чем 480 мксек. устройство может сброситься и от более короткого импульса, но это не значит, что все устройства это отработают. Насчет сигнала presence, я лично не заморачиваюсь - делаю окно в 480мксек после сброса и проверяю - был ли сигнал и снялся ли за это время. А нет, всё же проверяю еще, чтобы появился в течение 60 мкс.
По поводу коротких импульсов - возможно это связано с HighSpeed 1-wire протоколом. Некоторые новые устройства поддерживают такую фичу.
Добавлено: Вс ноя 08, 2009 11:30:16
Ray
Pooher писал(а):А расскажите по подробнее, как Вы эмулируете работу 1820 в студии?
Build and Run. При отладке смотрю время выполнения программы в контрольных точках, где происходят переключение состояний линии и задержки.
uldemir писал(а):
imho Это требование не к 1-wire устройству, а к хосту - удержать линию не менее чем 480 мксек. устройство может сброситься и от более короткого импульса, но это не значит, что все устройства это отработают. Насчет сигнала presence, я лично не заморачиваюсь - делаю окно в 480мксек после сброса и проверяю - был ли сигнал и снялся ли за это время. А нет, всё же проверяю еще, чтобы появился в течение 60 мкс.
Я делаю тоже самое, кроме последней проверки на 60 мкс. Потом отправляю команды SKIP ROM и READ ROM, потом пробую читать. Сигналы формируются, но все "1", т.е. датчик ничего не отвечает.
uldemir писал(а):
По поводу коротких импульсов - возможно это связано с HighSpeed 1-wire протоколом. Некоторые новые устройства поддерживают такую фичу.
Первый раз про такое слышу. Попробую поискать...
Добавлено: Вс ноя 08, 2009 12:20:24
uldemir
Я делаю тоже самое, кроме последней проверки на 60 мкс. Потом отправляю команды SKIP ROM и READ ROM, потом пробую читать. Сигналы формируются, но все "1", т.е. датчик ничего не отвечает
read rom нельзя делать после skip rom. и skip rom, и read rom могут быть только первой командой после сброса.
Добавлено: Вс ноя 08, 2009 20:18:19
Ray
uldemir писал(а):
read rom нельзя делать после skip rom. и skip rom, и read rom могут быть только первой командой после сброса.
Я пробовал отправлять эти команды и раздельно по одной, результат идентичен, идут стробы ("1"). При задержке между слотами более 30 мкс вылезает PRESENCE.
Если есть режим HighSpeed, то какие тайминги нужны для него?
Добавлено: Вс ноя 08, 2009 20:51:44
Aheir
Автору - переименовать тему, неинформативное название.
Добавлено: Вс ноя 08, 2009 22:13:12
uldemir
Я пробовал отправлять эти команды и раздельно по одной, результат идентичен, идут стробы ("1"). При задержке между слотами более 30 мкс вылезает PRESENCE.
Стоп-стоп. Так может проблема не в сбросе, а в чтении? задержка между слотами может быть неограниченно большой. Впринципе, если отлаживаете просто интерфейс с 1-wire добейтесь выполнения последовательности: сброс, presence, read rom (разумеется на шине должно быть только одно устройство) и чтение сериального номера. Следующий read rom или skip rom можно давать только после сброса (смотрите внимательно диаграмму! хоть она и на двух листах). У меня раз была проблема: когда-то давно делал чтение ds1990a, а потом эту же библиотеку хотел прикрутить к термометру и тоже "почему-то читались одни единицы". Оказалось что при чтении нужно было подвинуть момент когда делать "sampling", чтобы надежно читалось.
Если есть режим HighSpeed, то какие тайминги нужны для него?
Забудьте про него - видимо, это не ваш случай. если интересно, ds2413 такой поддерживает. Освежил память - правильно называется overdrive mode. ds18s20 - такой не поддерживают.
Добавлено: Пн ноя 09, 2009 13:06:43
Ray
uldemir писал(а):
Стоп-стоп. Так может проблема не в сбросе, а в чтении? задержка между слотами может быть неограниченно большой. Впринципе, если отлаживаете просто интерфейс с 1-wire добейтесь выполнения последовательности: сброс, presence, read rom (разумеется на шине должно быть только одно устройство) и чтение сериального номера. Следующий read rom или skip rom можно давать только после сброса (смотрите внимательно диаграмму! хоть она и на двух листах).
Всё это я вижу на осциллографе. PRESENCE вылезает после RESETa (480 мкс) между 15 до 65 мкс, т.е. сам PRESENCE очень короткий ~10 мкс. Далее жду ещё 480 мкс. Начинаю формировать READ ROM. "0" - низкий уровень 70 мкс, "1" - низкий уровень 4,5 мкс, 65 мкс высокий уровень. Между слотами 30 мкс. При нулях снова вижу PRESENCE. Затем пауза 50 мкс и 64 строба - записываю "1" (низкий уровень 4,5 мкс, 65 мкс высокий уровень + 30 мкс задержка между слотами) не проверяя состояния в линии. Все 64 бита остаются единицами.
uldemir писал(а):
У меня раз была проблема: когда-то давно делал чтение ds1990a, а потом эту же библиотеку хотел прикрутить к термометру и тоже "почему-то читались одни единицы". Оказалось что при чтении нужно было подвинуть момент когда делать "sampling", чтобы надежно читалось.
Можно по подробнее?
Добавлено: Пн ноя 09, 2009 18:53:07
uldemir
Можно по подробнее?
А чего там... Вот посмотрел старые исходники... и обалдел - какой бред я написал и в течение 10 лет не заметил опечатку! Для 1990а время сэмлинга было установлено на 21+5=26 микросекунд от начала окна. Для 1990 - это еще работало, а для 18s20 - уже нет. Оказалось, по даташиту для 18s20 - должно быть не более 15. А в комментариях у меня написано было правильно:
Код: Выделить всё
movlw 21/3 ; 12 мкс задеpжка до начала окна отсчета
Вот из-за этой опечатки у меня читались одни "1". Так что внимательное изучение и перепроверка исходников - вот путь к разрешению всяких невероятных глюков. А еще, можно попробовать для проверки подключить другое 1-wire устройство. На сброс и read rom они все реагируют.
Добавлено: Пн ноя 09, 2009 19:57:00
uldemir
Вот ткнулся осциллогафом на зацикленный сигнал сброса:
480мкс - сброс
15мкс - пауза
65мкс - presence
480мкс - пауза и цикл повторяется снова. Правда на макетке у меня распаяны ds2405.