Помогите разобраться c DS18B20
- Сообщения: 7
- Зарегистрирован: Чт ноя 05, 2009 22:36:22
Здравствуйте! Есть контроллер ATtiny2313V и датчик DS18B20. Датчик воспринимает как сигнал сброса и формирует ответ при удержании низкого уровня в линии более 28 мкс (при эмуляции в AVRStudio), а не 480, как должно быть. Не понятно как все остальные задержки формировать. Пишу на asm-е, все задержки программные. Помогите разобраться...
Последний раз редактировалось Ray Вт ноя 10, 2009 23:03:06, всего редактировалось 1 раз.
- Реклама
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
- Сообщения: 7
- Зарегистрирован: Чт ноя 05, 2009 22:36:22
По даташиту, после Reset-а ответ PRESENCE приходит через 15 - 60 мкс, ещё 60 - 240 мкс сам PRESENCE. При проверке ответа (организован цикл) через 15 мкс ответ фиксируется, а через 65 мкс уже нет (15 мкс + 60 мкс = 75 мкс). Длительность при передаче/приёме данных 60 - 120 мкс, а я уже при 28 мкс получаю RESET и PRESENCE...
help, Help, HELP!!!
help, Help, HELP!!!
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
imho Это требование не к 1-wire устройству, а к хосту - удержать линию не менее чем 480 мксек. устройство может сброситься и от более короткого импульса, но это не значит, что все устройства это отработают. Насчет сигнала presence, я лично не заморачиваюсь - делаю окно в 480мксек после сброса и проверяю - был ли сигнал и снялся ли за это время. А нет, всё же проверяю еще, чтобы появился в течение 60 мкс.Ray писал(а):Здравствуйте! Есть контроллер ATtiny2313V и датчик DS18B20. Датчик воспринимает как сигнал сброса и формирует ответ при удержании низкого уровня в линии более 28 мкс (при эмуляции в AVRStudio), а не 480, как должно быть. Не понятно как все остальные задержки формировать. Пишу на asm-е, все задержки программные. Помогите разобраться...
По поводу коротких импульсов - возможно это связано с HighSpeed 1-wire протоколом. Некоторые новые устройства поддерживают такую фичу.
- Реклама
- Сообщения: 7
- Зарегистрирован: Чт ноя 05, 2009 22:36:22
Build and Run. При отладке смотрю время выполнения программы в контрольных точках, где происходят переключение состояний линии и задержки.Pooher писал(а):А расскажите по подробнее, как Вы эмулируете работу 1820 в студии?
Я делаю тоже самое, кроме последней проверки на 60 мкс. Потом отправляю команды SKIP ROM и READ ROM, потом пробую читать. Сигналы формируются, но все "1", т.е. датчик ничего не отвечает.uldemir писал(а): imho Это требование не к 1-wire устройству, а к хосту - удержать линию не менее чем 480 мксек. устройство может сброситься и от более короткого импульса, но это не значит, что все устройства это отработают. Насчет сигнала presence, я лично не заморачиваюсь - делаю окно в 480мксек после сброса и проверяю - был ли сигнал и снялся ли за это время. А нет, всё же проверяю еще, чтобы появился в течение 60 мкс.
Первый раз про такое слышу. Попробую поискать...uldemir писал(а): По поводу коротких импульсов - возможно это связано с HighSpeed 1-wire протоколом. Некоторые новые устройства поддерживают такую фичу.
Последний раз редактировалось Ray Пн ноя 09, 2009 12:31:05, всего редактировалось 1 раз.
- Сообщения: 7
- Зарегистрирован: Чт ноя 05, 2009 22:36:22
Я пробовал отправлять эти команды и раздельно по одной, результат идентичен, идут стробы ("1"). При задержке между слотами более 30 мкс вылезает PRESENCE.uldemir писал(а): read rom нельзя делать после skip rom. и skip rom, и read rom могут быть только первой командой после сброса.
Если есть режим HighSpeed, то какие тайминги нужны для него?
Автору - переименовать тему, неинформативное название.
Оптимизм х (Опыт + Знания) = const
Стоп-стоп. Так может проблема не в сбросе, а в чтении? задержка между слотами может быть неограниченно большой. Впринципе, если отлаживаете просто интерфейс с 1-wire добейтесь выполнения последовательности: сброс, presence, read rom (разумеется на шине должно быть только одно устройство) и чтение сериального номера. Следующий read rom или skip rom можно давать только после сброса (смотрите внимательно диаграмму! хоть она и на двух листах). У меня раз была проблема: когда-то давно делал чтение ds1990a, а потом эту же библиотеку хотел прикрутить к термометру и тоже "почему-то читались одни единицы". Оказалось что при чтении нужно было подвинуть момент когда делать "sampling", чтобы надежно читалось.Я пробовал отправлять эти команды и раздельно по одной, результат идентичен, идут стробы ("1"). При задержке между слотами более 30 мкс вылезает PRESENCE.
Забудьте про него - видимо, это не ваш случай. если интересно, ds2413 такой поддерживает. Освежил память - правильно называется overdrive mode. ds18s20 - такой не поддерживают.Если есть режим HighSpeed, то какие тайминги нужны для него?
- Сообщения: 7
- Зарегистрирован: Чт ноя 05, 2009 22:36:22
Всё это я вижу на осциллографе. 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 писал(а): Стоп-стоп. Так может проблема не в сбросе, а в чтении? задержка между слотами может быть неограниченно большой. Впринципе, если отлаживаете просто интерфейс с 1-wire добейтесь выполнения последовательности: сброс, presence, read rom (разумеется на шине должно быть только одно устройство) и чтение сериального номера. Следующий read rom или skip rom можно давать только после сброса (смотрите внимательно диаграмму! хоть она и на двух листах).
Можно по подробнее?uldemir писал(а): У меня раз была проблема: когда-то давно делал чтение ds1990a, а потом эту же библиотеку хотел прикрутить к термометру и тоже "почему-то читались одни единицы". Оказалось что при чтении нужно было подвинуть момент когда делать "sampling", чтобы надежно читалось.
А чего там... Вот посмотрел старые исходники... и обалдел - какой бред я написал и в течение 10 лет не заметил опечатку! Для 1990а время сэмлинга было установлено на 21+5=26 микросекунд от начала окна. Для 1990 - это еще работало, а для 18s20 - уже нет. Оказалось, по даташиту для 18s20 - должно быть не более 15. А в комментариях у меня написано было правильно:Можно по подробнее?
Код: Выделить всё
movlw 21/3 ; 12 мкс задеpжка до начала окна отсчета


