OneWire или создаем велосипед

Тема в разделе "Проводная и беспроводная связь", создана пользователем CryNET, 30 апр 2015.

  1. CryNET

    CryNET Гик

    Всем привет!

    Делаю Slave-устройство на ATtiny45. Я не хочу взламывать домофоны, а хочу разобраться с данным протоколом. Но не могу сдвинуться дальше, т.к до конца не понимаю принцип передачи данных 1Wire.

    1. У меня получилось отвечать на RESET пульс PRESENCE пульсом.
    2. В ответ мне ведомое устройство (в моем случае Arduino) посылает команду 0xF0 (вроде SEARCH).

    Вот осциллограмма этих действий:
    upload_2015-4-30_20-42-55.png

    А вот осциллограмма если приложить iButton:
    upload_2015-4-30_21-8-20.png

    Далее мне нужно передавать по-битно данные, а в конце передать CRC-сумму.
    Тут возникают вопросы:
    1. Когда начинать передавать данные (Он должен давать импульсы, а я на них отвечать или тупо слать все биты по тайм-слотам в 60мкс?)
    2. Как закончить передавать данные (тупо оставить все как есть, само закончится?)

    Есть библиотека OneWire.h для Arduino, которой собственно я пользуюсь, но я не очень силен в таких сферах, можно сказать - первая практика. ;)

    Читал эту и ещё несколько тем:
    http://robocraft.ru/blog/communication/117.html

    Только вот не очень дошел до сознания, помогите докурить))
    Спасибо.
     
    Последнее редактирование: 30 апр 2015
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Чтобы произвести чтениеiButton, master для чтения одного бита данных просто генерирует тайм-слот записи лог. 1 (именно тайм-слот записи, а не чтения). Если бит, который посылает iButton, равен 1, то iButton просто ожидает появления следующего тайм-слота, пропуская текущий. При этом с линии данных master считывает 1. Если бит, который посылает iButton, равен 0, то iButton удерживает линию данных в состоянии лог. 0 определённое время, и master считывает с линии данных 0.
    http://microsin.ru/content/view/508/44/
     
    CryNET нравится это.
  3. CryNET

    CryNET Гик

    Спасибо за статью!
    Тут вопросик:
    [​IMG]
    Я правильно понял, что мастер должен в начале тайм-слота сделать LOW, а потом "отпускает" линию, и тут уже сам slave должен либо "LOW" либо "HIGH" остаток тайм слота держать.
    Но по осциллограмме видно, что после 8 бит команды со стороны master чуть-чуть HIGH держится линия, а потом сразу сбрасывается и заново идет цикл ожидания устройства (RESET)

    Или же все должен Slave генерировать после команды от master?
     
    Последнее редактирование: 30 апр 2015
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Я не пробовал, но похоже на то.
     
  5. CryNET

    CryNET Гик

    Ок, буду пробовать, спасибо.
    Если добью, то отпишу в этой теме как.
     
  6. Симпатичная реализация.
    http://robocraft.ru/blog/arduino/118.html
    http://robocraft.ru/blog/arduino/124.html