Arduino OneWire slave device emulator
Модератор: immortal
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Arduino OneWire slave device emulator
В наше время 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. В прерываниях или по таймеру. Менять значения памяти устройств (Которые потом будет читать мастер)
Библиотека ещё не закончена и в ней есть ещё ошибки. Выложил по просьбе интересующихся
Разбираться с предлагаемыми чипами не хочется, посему делаю попытку использовать 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
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Arduino OneWire slave device emulator
Испытал датчик движения с эмулятором ключа onewire. Работает. Но впячатления не очень. Наверно буду думать о датчиках по рабио через китайский контролер сигнализации
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
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
За данный "девайс" Вам респект и уважение.
Один момент. Сама по себе Ардуино, это прежде всего МК, и несколько деталей.
Отдельно если приобретать данный комплект, примерно в 3 раза (по ценам приобретения) дешевле пром платы.
поэтому Вашу идею, в части именно кода можно развить до идеала, поскольку например даже Тинни на 20 Мгц может тянуть примерно 2-3 датчика. Я такую идею видел на сайте, ребята моделировали счетчик для учета воды, но как мне кажется если такой счетчик сделать, на мК сам по себе то он гораздо лучше будет.
Хотя для меня 1-ware, это прежде всего DS18b20, (идеал)... все остальное на МК работает лучше. Даже самое простое, контакт, можно наделить хоть простым но разумом.
Один момент. Сама по себе Ардуино, это прежде всего МК, и несколько деталей.
Отдельно если приобретать данный комплект, примерно в 3 раза (по ценам приобретения) дешевле пром платы.
поэтому Вашу идею, в части именно кода можно развить до идеала, поскольку например даже Тинни на 20 Мгц может тянуть примерно 2-3 датчика. Я такую идею видел на сайте, ребята моделировали счетчик для учета воды, но как мне кажется если такой счетчик сделать, на мК сам по себе то он гораздо лучше будет.
Хотя для меня 1-ware, это прежде всего DS18b20, (идеал)... все остальное на МК работает лучше. Даже самое простое, контакт, можно наделить хоть простым но разумом.
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Arduino OneWire slave device emulator
Проблема использования 1-Wire была в том что я в доме заложил лишь её на 4 проводах. Теперь поимаю что лучше бы я кинул сетевой кабель везде. Да и 1-Wire уже почти иссяк. Теперь альтернативы 2. Либо радио канал, либо переходить на CAN шину (4 проводов хватит)
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
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
Согласен. CAN он же RS485 по факту даже лучше. Витая пара и все алгоритм обмена правда сложнее но уже все придумано.
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Arduino OneWire slave device emulator
CAN и RS485 разные протоколы и уровни - не путать
Если вы видели описание что они взаимо заменяемые - это не так.
Обычно разработчики железа пытаются читать на низком уровне. Тоже самое что Ардуиновым комом читать уровни (для ускорения обработки) - возможно но не есть правильно
Если вы видели описание что они взаимо заменяемые - это не так.
Обычно разработчики железа пытаются читать на низком уровне. Тоже самое что Ардуиновым комом читать уровни (для ускорения обработки) - возможно но не есть правильно
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
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
Да я признаюсь. Rs485 это по сути железная часть т.е микросхемы адаптеры (MAX485/487) САN это протокол обмена на уровне информации канал передачи отдельно. Но все таки согласитесь, что предавать например информацию пользуясь RS485 просто. Но на уровне МК-МК где объемы это единицы байт..
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Arduino OneWire slave device emulator
А вот теперь вопрос. Как проще для ардуины организовать сеть по проводам. С минимум обвязки. По 2 проводам, ещё 2 провода: земля и питание
RS232 дальность не позволит
Другие шины - дальность ещё короче
Ещё желательно чтобы не было мастера и задающего. Также чтобы сеть звездой поддерживала.
В идеале однопроводный CAN - но там придётся кан драйвер ставить, ещё хабы (GateWay) деллать - т.к. он не поддерживает звезду.
Да и к тому же КАН не дешовый
RS232 дальность не позволит
Другие шины - дальность ещё короче
Ещё желательно чтобы не было мастера и задающего. Также чтобы сеть звездой поддерживала.
В идеале однопроводный CAN - но там придётся кан драйвер ставить, ещё хабы (GateWay) деллать - т.к. он не поддерживает звезду.
Да и к тому же КАН не дешовый
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Arduino OneWire slave device emulator
Обновил библиотеку https://github.com/Shagrat2/OneWireHub
Добавлено:
Установка температуры для DS18B20, DS2438
Обработчик эвентев установки ножки
Исправлено:
Почти нечего, убрал только компиляцию отладочных сообщений
Добавлен пример датчика движения на основе DS2413 Компоненты
Arduino Pro mini 5v
Датчик движения Пирон-4
Резистор 4.7K - для подтяжки сигнала 1-Wire
Стабилитрон КС156 - для защиты от замыкания на линию данных
Добавлено:
Установка температуры для DS18B20, DS2438
Обработчик эвентев установки ножки
Исправлено:
Почти нечего, убрал только компиляцию отладочных сообщений
Добавлен пример датчика движения на основе DS2413 Компоненты
Arduino Pro mini 5v
Датчик движения Пирон-4
Резистор 4.7K - для подтяжки сигнала 1-Wire
Стабилитрон КС156 - для защиты от замыкания на линию данных
- Вложения
-
- MovmentSensor.zip
- Скетч
- (5.4 КБ) 308 скачиваний
-
- DSCN9661.JPG (121.26 КБ) 15282 просмотра
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Arduino OneWire slave device emulator
Сейчас тружусь над датчиком влажности на основе DHT22 и Arduino Pro Mini
Температуру уже нормально вижу. А вот с влажностью пока изучаю формулу для преобразования
Температуру уже нормально вижу. А вот с влажностью пока изучаю формулу для преобразования
- Вложения
-
- Примерно будет выглядеть как 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
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4