1-wire запись в устройство
- Войдите на сайт для отправки комментариев
Чт, 31/05/2012 - 15:55
Обьясните пожалуйста (на примере лучше ; )
каким способом реализовать включение-выключение 1-wire устройства.
Обьясните пожалуйста (на примере лучше ; )
каким способом реализовать включение-выключение 1-wire устройства.
Что значит "включение-выключение 1-wire устройства" ???
На шину повесил DS2413, вот это _http://pics.livejournal.com/smart_andy/pic/00011g34
назвал его DeviceAddress SW_1 = { 0x26, 0x2A, 0xCA, 0x9A, 0x03, 0x00, 0x00, 0xE6 };
Теперь сижу думаю как же его включать, тоесть записать 1 или 0 по этому адресу... я и в интернете ничего не нашел не могу правильно сформулировать запрос в поисковке...
Нашлось вот это Команды, специфичные для DS2413, их всего две:
0x5A — PIO Write. Управление ключами. После команды должен быть передан байт, в котором младшие два бита отвечают за состояние двух каналов. Например, 0x01 — включить первый канал, 0x02 — второй, 0x00 — все выключить. Затем нужно передать тот же байт, но в инвертированном виде (было 0x02 — стало 0xFE) для защиты от ошибок.
0xF5 — PIO Read. DS2413 может не только управлять выходными портами, но и считывать с них значения.
Вот здесь есть готовая библа для работы с DS2413. А в гугле надо было набрать "ds2413 arduino" и самая первая ссылка на этот же сайт.
И вот пример из этой библы:
Беда в том, что я сам неразберусь, но попробую.
Для меня проще было бы увидеть кусочек кода :)
Уж куда проще??? Качаете БИБЛИОТЕКУ распаковываете архив в ...\arduino\libraries, запускаете arduino.exe и выбираете пример: File/Examples/dustin-arduino-2406-227b524/Hello, все.
Все работает,
спасибо
Работает, но немогу понять, как сделать чтобы включался и выключался только 1 выход из двух в DS2406,
срабатывают оба два.
Вопрос снят, разобрался
Работает, но заметил ошибку при if (currenttemp < minimum) срабатывает тютелька в тютельку :)
при if (currenttemp > maximum) срабатывает на 1 градус выше,
можно конечно сделать так if (currenttemp > maximum- 1) , но считаю это не правильно. Подскажите где ошибка
вот код:
А привидете пример конкретных цифр когда срабатывает правильно, а когда нет. Может вы "неправильного ожидаете".
При каком currenttemp у вас срабатывает "правильно", по вашему мнению, а при каком "неправильно" (типа "я думаю при XXX должно было сработать, но не сработало").
а просто >= не подойдет вместо > ? Или я не понял вопроса?
Вообщем сейчас, судя по коду должно на 24 - выкючать светик, на 27 - включать, на 25 и 26 - ничего не делать (если горит, то будет продолжать гореть, если выключен - будет продолжать быть выключенным).
И еще, раз вы объявили переменные int-тами, то у вас округляется температура путем отбрасывания дробной части.
То есть при движениях на 0.1 градуса вниз - условие будут срабатывать, а вверх - нет. температура 24.9, обработается как 24 и выключит светик, а вот вверх - уже нет. 26.1 будет восприниматся как 26 (ничего не делать), до тех пор пока не дойдет до 27.
Дано
int minimum = 25;
int maximum = 26;
на 25 включается DS2406 PIO-A срабатывает точно. вернее выключается так как например температура 23 градуса, температура растет, доходит до 25,05 канал выключился, далее растет температура
На 26 должен включаться PIO-B , но срабатывает на 27 градусах
и так же обратно, температура падает PIO-B выключается на 26,90
температура падает до 25 срабатывает PIO-A
не могу понять почему :(
Я наверно опять чего-то не понял. У Вас
Так как оно должно сработать на 26? Вы же проверяете, что значение больше 26, а не больше или равно 26? Может все же >= оператор сравнения нужен.
>На 26 должен включаться PIO-B , но срабатывает на 27 градусах
По коду - не должне. У вас же условие БОЛЬШЕ. maximum = 26, при currenttemp=26, условие if(currenttemp>maximum) выолнится не может. 26 не больше 26, а равно ему. Так что если вы хотите сработки на 26, вам нужно больше ИЛИ РАВНО if(currenttemp>=maximum)
>на 25 включается DS2406 PIO-A срабатывает точно.
А вот это - уже чудо. как может выполнится условие 25<25 - не понятно. Скорее оно срабывается, все-таки где-то на 24.99
Zaliv спасибо проверил помогло , работает как надо :)
>= оператор сравнения нужен.
Всем спасибки
Или можно было бы пользоваться float- тоже бы работало около дела :)
AlexFisher
Если нетрудно покажите пример на моем коде.
Попробую ;)
Ничего особенного, просто
меняете на
AlexFisher
Спасибо, срабатывает как надо, даже не применяя (>= сравнения)
Что то, мне не нравиться в этом коде, хотя и работает
чувствую, что есть другое правильное решение :)
Что то, мне не нравиться в этом коде
и мне.. http://arduino.ru/forum/programmirovanie/schitat-dannye-s-ds2406#comment-638879
я конечно зануда ещё тот, но такое впечатление, что кто-то из сомнабулизма вышел )))
Так праздники отвлекают )))