Arduino OneWire slave device emulator

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Arduino OneWire slave device emulator

Сообщение Ivan » Чт фев 13, 2014 9:07 am

В наше время 1-Wire сети сбавляют свою популярность и уступают рынок другим стандартам. Также есть тенденция использовать программируемые контролеры, что уменьшает привлекательность 1-Wire как конструктор с готовыми решениями. Из за этого Maxim перестает выпускать некоторые приборы.

Разбираться с предлагаемыми чипами не хочется, посему делаю попытку использовать Arduina для эмуляции 1-Wire устройств. В интернете есть куча примеров, но они в основном работы как мастер 1-Wire. Есть примеры и с эмуляцией слейвов. Но в исходниках представлена эмуляция только 1 устройства. Но использовать Ардуину для эмуляции 1 устройства слишком расточительно.

Вот и пришла мне такая идея. Т.к. в Ардуине реально много каналов, то почему бы ей не эмалировать несколько устройств

Когда я решил попробовать реализовать это я понял с чем столкнулись люди пытающиеся сделать подобное
1. Частота дискретизации. На сколько я понял копаясь в документации и делая следования. Ардуина еле справляется с частотой работы шины 1-Wire и на некоторых участках кода она просто не успевает.
2. Очень критичная по времени команда поиска устройств 0xF0 - Делать анализ и расчёты масок между отсылки битов практически нельзя

По этому и не было реализовано такой возможности. Скорей всего если написать программу на чистом СИ и было бы решением этой проблемы. Но тогда чем отличается взять предлагаемый контролер Maxim с портом 1-Wire и написать под конкретную задачу.

Поразмыслив немного я решил обойти узкие части алгоритма простым конвейером. То есть разложить нужные данные в массив и делать простые переходы по нему. К сожалению такой подход жрёт много памяти но зато не тратит драгоценные такты в узких местах.

После того как я смог реализовать алгоритм развёртки поиска в массив. Всё задышало. После чего я сделал некую структуру библиотеки где можно реализовать до 8 эмулируемых устройств одновременно.

https://github.com/Shagrat2/OneWireHub

Перечень реализованных устройств:
Закончен - DS18B20 - Digital Thermometer
Закончен - DS2401 - Serial Number
В разработке - DS2405 - Single adress switch - Не реализован поиск активных
В разработке - DS2408 - 8-Channel Addressable Switch
Закончен - DS2413 - Dual channel addressable switch
В разработке - DS2423 - 4kb 1-Wire RAM with Counter
В разработке - DS2433 - 4kb 1-Wire RAM with Counter
В разработке - DS2438 - Smart Battery Monitor
В разработке - DS2450 - 4 channel A/D
Закончен - DS2890 - Single channel digital panemtiometer

Многие устройства не реализованы из за того что не могу разобраться в алгоритме работы. Поэтому кому интересен этот проект и есть возможность разобраться. С удовольствием включу в библиотеку

Пример работы можно посмотреть в файле test.ino

Как запустить:
1. Создать эмулируемые объекты и привязать их в массив
2. Запустить расчёт конвейера hub->calck_mask();
3. В цикле запускать чтение шины hub->waitForRequest(false)
4. В прерываниях или по таймеру. Менять значения памяти устройств (Которые потом будет читать мастер)

Библиотека ещё не закончена и в ней есть ещё ошибки. Выложил по просьбе интересующихся
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Arduino OneWire slave device emulator

Сообщение Ivan » Сб май 03, 2014 9:57 pm

Испытал датчик движения с эмулятором ключа onewire. Работает. Но впячатления не очень. Наверно буду думать о датчиках по рабио через китайский контролер сигнализации
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
shemnik69
Сообщения: 590
Зарегистрирован: Пн дек 24, 2012 3:01 pm
Откуда: Саратов Saratov
Благодарил (а): 67 раз
Поблагодарили: 63 раза

Re: Arduino OneWire slave device emulator

Сообщение shemnik69 » Сб май 03, 2014 10:26 pm

За данный "девайс" Вам респект и уважение.
Один момент. Сама по себе Ардуино, это прежде всего МК, и несколько деталей.
Отдельно если приобретать данный комплект, примерно в 3 раза (по ценам приобретения) дешевле пром платы.
поэтому Вашу идею, в части именно кода можно развить до идеала, поскольку например даже Тинни на 20 Мгц может тянуть примерно 2-3 датчика. Я такую идею видел на сайте, ребята моделировали счетчик для учета воды, но как мне кажется если такой счетчик сделать, на мК сам по себе то он гораздо лучше будет.
Хотя для меня 1-ware, это прежде всего DS18b20, (идеал)... все остальное на МК работает лучше. Даже самое простое, контакт, можно наделить хоть простым но разумом.
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Arduino OneWire slave device emulator

Сообщение Ivan » Вс май 04, 2014 10:02 am

Проблема использования 1-Wire была в том что я в доме заложил лишь её на 4 проводах. Теперь поимаю что лучше бы я кинул сетевой кабель везде. Да и 1-Wire уже почти иссяк. Теперь альтернативы 2. Либо радио канал, либо переходить на CAN шину (4 проводов хватит)
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
shemnik69
Сообщения: 590
Зарегистрирован: Пн дек 24, 2012 3:01 pm
Откуда: Саратов Saratov
Благодарил (а): 67 раз
Поблагодарили: 63 раза

Re: Arduino OneWire slave device emulator

Сообщение shemnik69 » Пн май 05, 2014 10:55 am

Согласен. CAN он же RS485 по факту даже лучше. Витая пара и все алгоритм обмена правда сложнее но уже все придумано.
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Arduino OneWire slave device emulator

Сообщение Ivan » Пн май 05, 2014 1:17 pm

CAN и RS485 разные протоколы и уровни - не путать
Если вы видели описание что они взаимо заменяемые - это не так.
Обычно разработчики железа пытаются читать на низком уровне. Тоже самое что Ардуиновым комом читать уровни (для ускорения обработки) - возможно но не есть правильно
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
shemnik69
Сообщения: 590
Зарегистрирован: Пн дек 24, 2012 3:01 pm
Откуда: Саратов Saratov
Благодарил (а): 67 раз
Поблагодарили: 63 раза

Re: Arduino OneWire slave device emulator

Сообщение shemnik69 » Пн май 05, 2014 7:28 pm

Да я признаюсь. Rs485 это по сути железная часть т.е микросхемы адаптеры (MAX485/487) САN это протокол обмена на уровне информации канал передачи отдельно. Но все таки согласитесь, что предавать например информацию пользуясь RS485 просто. Но на уровне МК-МК где объемы это единицы байт..
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Arduino OneWire slave device emulator

Сообщение Ivan » Пн май 05, 2014 8:25 pm

А вот теперь вопрос. Как проще для ардуины организовать сеть по проводам. С минимум обвязки. По 2 проводам, ещё 2 провода: земля и питание
RS232 дальность не позволит
Другие шины - дальность ещё короче
Ещё желательно чтобы не было мастера и задающего. Также чтобы сеть звездой поддерживала.

В идеале однопроводный CAN - но там придётся кан драйвер ставить, ещё хабы (GateWay) деллать - т.к. он не поддерживает звезду.

Да и к тому же КАН не дешовый
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Arduino OneWire slave device emulator

Сообщение Ivan » Пн май 12, 2014 10:36 am

Обновил библиотеку https://github.com/Shagrat2/OneWireHub

Добавлено:
Установка температуры для DS18B20, DS2438
Обработчик эвентев установки ножки

Исправлено:
Почти нечего, убрал только компиляцию отладочных сообщений

Добавлен пример датчика движения на основе DS2413
DSCN9674.JPG
DSCN9674.JPG (117.09 КБ) 15282 просмотра
Компоненты
Arduino Pro mini 5v
Датчик движения Пирон-4
Резистор 4.7K - для подтяжки сигнала 1-Wire
Стабилитрон КС156 - для защиты от замыкания на линию данных
Вложения
MovmentSensor.zip
Скетч
(5.4 КБ) 308 скачиваний
DSCN9661.JPG
DSCN9661.JPG (121.26 КБ) 15282 просмотра
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Arduino OneWire slave device emulator

Сообщение Ivan » Пн май 12, 2014 10:43 am

Сейчас тружусь над датчиком влажности на основе DHT22 и Arduino Pro Mini
Температуру уже нормально вижу. А вот с влажностью пока изучаю формулу для преобразования
Вложения
DSCN9668.JPG
Примерно будет выглядеть как http://www.benuks.ru/oborud.html#3
DSCN9668.JPG (136.48 КБ) 15281 просмотр
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Ответить