Страница 1 из 3

Arduino OneWire slave device emulator

Добавлено: Чт фев 13, 2014 9:07 am
Ivan
В наше время 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. В прерываниях или по таймеру. Менять значения памяти устройств (Которые потом будет читать мастер)

Библиотека ещё не закончена и в ней есть ещё ошибки. Выложил по просьбе интересующихся

Re: Arduino OneWire slave device emulator

Добавлено: Сб май 03, 2014 9:57 pm
Ivan
Испытал датчик движения с эмулятором ключа onewire. Работает. Но впячатления не очень. Наверно буду думать о датчиках по рабио через китайский контролер сигнализации

Re: Arduino OneWire slave device emulator

Добавлено: Сб май 03, 2014 10:26 pm
shemnik69
За данный "девайс" Вам респект и уважение.
Один момент. Сама по себе Ардуино, это прежде всего МК, и несколько деталей.
Отдельно если приобретать данный комплект, примерно в 3 раза (по ценам приобретения) дешевле пром платы.
поэтому Вашу идею, в части именно кода можно развить до идеала, поскольку например даже Тинни на 20 Мгц может тянуть примерно 2-3 датчика. Я такую идею видел на сайте, ребята моделировали счетчик для учета воды, но как мне кажется если такой счетчик сделать, на мК сам по себе то он гораздо лучше будет.
Хотя для меня 1-ware, это прежде всего DS18b20, (идеал)... все остальное на МК работает лучше. Даже самое простое, контакт, можно наделить хоть простым но разумом.

Re: Arduino OneWire slave device emulator

Добавлено: Вс май 04, 2014 10:02 am
Ivan
Проблема использования 1-Wire была в том что я в доме заложил лишь её на 4 проводах. Теперь поимаю что лучше бы я кинул сетевой кабель везде. Да и 1-Wire уже почти иссяк. Теперь альтернативы 2. Либо радио канал, либо переходить на CAN шину (4 проводов хватит)

Re: Arduino OneWire slave device emulator

Добавлено: Пн май 05, 2014 10:55 am
shemnik69
Согласен. CAN он же RS485 по факту даже лучше. Витая пара и все алгоритм обмена правда сложнее но уже все придумано.

Re: Arduino OneWire slave device emulator

Добавлено: Пн май 05, 2014 1:17 pm
Ivan
CAN и RS485 разные протоколы и уровни - не путать
Если вы видели описание что они взаимо заменяемые - это не так.
Обычно разработчики железа пытаются читать на низком уровне. Тоже самое что Ардуиновым комом читать уровни (для ускорения обработки) - возможно но не есть правильно

Re: Arduino OneWire slave device emulator

Добавлено: Пн май 05, 2014 7:28 pm
shemnik69
Да я признаюсь. Rs485 это по сути железная часть т.е микросхемы адаптеры (MAX485/487) САN это протокол обмена на уровне информации канал передачи отдельно. Но все таки согласитесь, что предавать например информацию пользуясь RS485 просто. Но на уровне МК-МК где объемы это единицы байт..

Re: Arduino OneWire slave device emulator

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

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

Да и к тому же КАН не дешовый

Re: Arduino OneWire slave device emulator

Добавлено: Пн май 12, 2014 10:36 am
Ivan
Обновил библиотеку https://github.com/Shagrat2/OneWireHub

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

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

Добавлен пример датчика движения на основе DS2413
DSCN9674.JPG
DSCN9674.JPG (117.09 КБ) 16174 просмотра
Компоненты
Arduino Pro mini 5v
Датчик движения Пирон-4
Резистор 4.7K - для подтяжки сигнала 1-Wire
Стабилитрон КС156 - для защиты от замыкания на линию данных

Re: Arduino OneWire slave device emulator

Добавлено: Пн май 12, 2014 10:43 am
Ivan
Сейчас тружусь над датчиком влажности на основе DHT22 и Arduino Pro Mini
Температуру уже нормально вижу. А вот с влажностью пока изучаю формулу для преобразования