Беспроводная передача показаний датчиков, помощь выбора компонентов.

ardudeveloper
Offline
Зарегистрирован: 14.10.2013

Всем доброго времени суток!

Хочется реализовать один проект, в котором есть необходимость передавать показания с датчиков (dht22, ds18b20, bmp085) беспроводным способом передачи, дальность небольшая, прямая видимость. Приемник- Arduino UNO, передатчик-МК, посоветуйте пожалуйста:

1. Что использовать для беспроводной передачи, пока остановился на NRF24L01.

2. Какой МК использовать в передатчике, ATtiny85 достаточно ?

3. Какие могут быть подводные камни и как их избежать.

Всем спасибо за советы.

maksim
Offline
Зарегистрирован: 12.02.2012

1. NRF24L01 подходит.

2. Нет.

3. Разные, никак.

axill
Offline
Зарегистрирован: 05.09.2011

На tiny85 сенмор вполне можно сделать, только придется помучиться с библиотеками для nrf24, если вы уж на нем собрались делать. Прощу уж тогда с двух сторон вешать ардуино

чтобы избежать граблей изучите это пример http://arduino.ru/forum/proekty/bolshie-chasy-pogodnaya-stantsiya

ardudeveloper
Offline
Зарегистрирован: 14.10.2013

Не обязательно тайни, посоветуйте более подходящий МК, я сам не очень пока разбираюсь, а  купить слишком мощное/слабое не хочется. Ардуино использую для создания прототипа, в конечном устройстве и приемник и передатчик необходимо сделать на МК.  Ссылку сейчас изучу, спасибо.

axill
Offline
Зарегистрирован: 05.09.2011

ardudeveloper пишет:

Не обязательно тайни, посоветуйте более подходящий МК, я сам не очень пока разбираюсь, а  купить слишком мощное/слабое не хочется. Ардуино использую для создания прототипа, в конечном устройстве и приемник и передатчик необходимо сделать на МК.  Ссылку сейчас изучу, спасибо.

В готовом устройстве вы хотите в МК код заливать из среды ардуино или писать отдельно уже без применения среды ардуино? Если первое - то берите такой же МК как и в ардуино, в наиболее распространенных это atmega328p. Если делаете для себя то разница в цене с более простыми МК будет несущественна.

Сам делал такой выбор и делаю микс - что быстро собрать на ардуине, а что для удовольствия и не спеша - на МК с програмированием в Атмел студио. Тот код который у меня влезает в atmega8 при компилировании в ардуине получается 16кб - уже в мену 8 не влезет, нужна или мега168 или мега328.Плодить разных МК себе дороже. Проще купить десяток по хорошей цене (хорошая цена за десяток 328-х это 14-15 баксов с пересылкой) в китае атмега328 на все случаи жизни.

maksim
Offline
Зарегистрирован: 12.02.2012

axill пишет:

На tiny85 сенмор вполне можно сделать, только придется помучиться с библиотеками для nrf24, если вы уж на нем собрались делать.

Посчитайте количество активных ног на тини85 и количество ног, необходимое для работы с NRF24L01.

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

axill пишет:

На tiny85 сенмор вполне можно сделать, только придется помучиться с библиотеками для nrf24, если вы уж на нем собрались делать.

Посчитайте количество активных ног на тини85 и количество ног, необходимое для работы с NRF24L01.

и в чем проблема? выводов там аж 6 штук - 5 для подключения модуля и 1 для датчика

ardudeveloper
Offline
Зарегистрирован: 14.10.2013

Спасибо, понравилась идея насчет Atmega328!

maksim
Offline
Зарегистрирован: 12.02.2012

axill пишет:

maksim пишет:

axill пишет:

На tiny85 сенмор вполне можно сделать, только придется помучиться с библиотеками для nrf24, если вы уж на нем собрались делать.

Посчитайте количество активных ног на тини85 и количество ног, необходимое для работы с NRF24L01.

и в чем проблема? выводов там аж 6 штук - 5 для подключения модуля и 1 для датчика

Проблема в том что нужен параллельный программатор иначе тиня будет прошита первый и последний раз. А без такового активных ног считайте 5, а не 6.

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

Проблема в том что нужен параллельный программатор иначе тиня будет прошита первый и последний раз. А без такового активных ног считайте 5, а не 6.

мы не знаем точно задачи и не знаем какие у нее ограничения ) Для меня не проблема, кстати не совсем так - тинька не имеет параллельного интерфейса програмирования. Для снятия бита RSTDISBL нужен последовательный но высоковольный пограмматор - такой есть например на STK500 и STK600

но без всех этих чудес, если задача ограничена только отправкой данных, то один из выводом радиомодуля можно к МК не подключать и включить чип только на передачу. Разве нет? Я так не пробовал, но в теории должно работать (я про CSN). На пине CE по идее тоже можно сэкономить - подать на него постоянный ноль, если у нас будет только одно SPI устройство (а для второго все равно пинов нет :))) и того выходит 3 ноги на радио и аж целых две ноги для датчиков. Все это при том, что с reset пином мы не связываемся

maksim
Offline
Зарегистрирован: 12.02.2012

axill пишет:

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

Нет. Вы перепутали CSN и CE, первый это SPI Chip Select, второй Chip Enable Activates RX or TX mode. CSN нельзя просто посадить на землю даже если нет других устройств, спадающий фронт CSN означает начало обмена и первым всегда идет командный байт (см. даташит). Если же CE будет постоянно активным, то это не означает что nrf24l01 сможет только передавать, это означает что он постоянно находится или в режиме передачи или в режиме приема - то есть будет постоянно кушать свои 14 мА. Линию MISO тоже нельзя отключать так нужно менять конкретные биты в регистрах, а для этого надо эти регистры читать. Так что без высоковольтного программатора нормального датчика на тини85 не сделать.

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:
Если же CE будет постоянно активным, то это не означает что nrf24l01 сможет только передавать, это означает что он постоянно находится или в режиме передачи или в режиме приема - то есть будет постоянно кушать свои 14 мА. Линию MISO тоже нельзя отключать так нужно менять конкретные биты в регистрах, а для этого надо эти регистры читать. Так что без высоковольтного программатора нормального датчика на тини85 не сделать.

про MISO я и не писал, его необходимость понятна так как обмен по радио в одну сторону не исключает обмена с чипом в обе стороны. Посмотрел код RF24 - powerdown() не снимает HIGH с CE, тогда получаетс что если после startListening() сделать powerDown() то реально чип продолжит есть 14ма?

рассуждение о tiny85 для меня чисто теоретическое - писал выше что лучше брать МК с запасом, это того стоит

axill
Offline
Зарегистрирован: 05.09.2011

лень было но залез в даташит - нет необходимости ставить LOW на CE для того, чтобы загнать чип в режимы низкого потребления. Но с CE есть другая проблема - чтобы начать передачу радио нужно на это вывод подать положительный импульс. Так что да - для работы передатчика этот вывод нужен.

а вот насчет CSN не согласен - его можно на постоянку придавить к земле. Не нужен там никакой импульс для начала передачи. К тому же такое требование отсутствует в стандарте SPI. Так что CSN можно освободить. Все тактирование в SPI идет по положительному импульсу на CLK. На то и существует трехвпроводной SPI

Еще остаются всякие 74HC595 ))) С ними хоть в две стороны можно тиньку напрячь, но эти все рассуждения только ради понимания, проще взять мк с большими возможностями

maksim
Offline
Зарегистрирован: 12.02.2012

Я вижу что не писали про MISO

Одно из двух: или уснет и не проснется или не уснет.

For nRF24L01+ to go from power down mode to TX or RX mode it must first pass through stand-by mode.
There must be a delay of Tpd2stby (see Table 16.) after the nRF24L01+ leaves power down mode before
the CE is set high.
.....
Change to active modes only happens if CE is set high and when CE
is set low, the nRF24L01 returns to standby-I mode from both the TX and RX modes.

 

maksim
Offline
Зарегистрирован: 12.02.2012

axill пишет:

а вот насчет CSN не согласен - его можно на постоянку придавить к земле. Не нужен там никакой импульс для начала передачи. К тому же такое требование отсутствует в стандарте SPI. Так что CSN можно освободить. Все тактирование в SPI идет по положительному импульсу на CLK. На то и существует трехвпроводной SPI

Ну не согласны - придавите.

Плохо смотрели:

Как видно SPI comand и STATUS register только в начале передачи, дальше только данные.

 

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

Одно из двух: или уснет и не проснется или не уснет.

ну так скажем - в задаче вообще не говорится о небоходимости засыпать)) значит и нет такой проблемы. Но я уже согласился, что CE нужен - без него передача не возможна в принципе

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

axill пишет:

а вот насчет CSN не согласен - его можно на постоянку придавить к земле. Не нужен там никакой импульс для начала передачи. К тому же такое требование отсутствует в стандарте SPI. Так что CSN можно освободить. Все тактирование в SPI идет по положительному импульсу на CLK. На то и существует трехвпроводной SPI

Ну не согласны - придавите.

Плохо смотрели:

Как видно SPI comand и STATUS register только в начале передачи, дальше только данные.

видел я эти картинки - поясните мне где здесь разница со стандартным SPI? я не вижу. весь обмен можнт происходить при постоянно зажатом CSN

сложности могут быть только в нештатных ситуациях - например перезапуск МК посередине обмена с радио чипом - будет потеряна синхронизация по первому биту первого байта. Но при штатной работе CSN не нужен

 

maksim
Offline
Зарегистрирован: 12.02.2012

Ну не верите даташиту попробуйте и убедитесь.

А про "стандартный" SPI тут почитайте.

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

Ну не верите даташиту попробуйте и убедитесь.

А про "стандартный" SPI тут почитайте.

читал уже хоть и другие статьи. Поясните, что на диаграмме требует управление CSN? я вижу передача начинается по положительному фронту на SCK

maksim
Offline
Зарегистрирован: 12.02.2012

SPI comand и STATUS register.

axill
Offline
Зарегистрирован: 05.09.2011

maksim пишет:

SPI comand и STATUS register.

и какие с ними проблемы? если разбираетесь, то идите до конца - объсните. Нет так нет. Когда спецы начинают говорить загадками то это повод принять их "за спецов".

По моему проблема может быть совсем не с битами SPI command - эти биты на MOSI выставляет МК и он вне зависимоти от состояния CSN знает когда их надо на шину выставить. А вот с битом S7 может быть проблема - на момент положительного фронта на CLK бит S7 уже должен быть выставлен и если nrf24 делает это после опускания CSN - то я соглашусь с тем, что на CSN cэкономить не получится

tpg_k156
Offline
Зарегистрирован: 03.10.2012

ardudeveloper пишет:

Всем доброго времени суток!

Хочется реализовать один проект, в котором есть необходимость передавать показания с датчиков (dht22, ds18b20, bmp085) беспроводным способом передачи, дальность небольшая, прямая видимость. Приемник- Arduino UNO, передатчик-МК, посоветуйте пожалуйста:

1. Что использовать для беспроводной передачи, пока остановился на NRF24L01.

Подумайте об ИК-светодиоде:) Уж если делать что-то то только по хардкору. Для вашей задачи в самый раз:)

ardudeveloper
Offline
Зарегистрирован: 14.10.2013

Остановился на AtMega328 и NRF24L01.

axill
Offline
Зарегистрирован: 05.09.2011

ardudeveloper пишет:

Остановился на AtMega328 и NRF24L01.

берите с буквой P (atmega328p) - это усовершенствованная версия с ментьшим энергопотреблением

maksim
Offline
Зарегистрирован: 12.02.2012

axill пишет:

и какие с ними проблемы? если разбираетесь, то идите до конца - объсните. Нет так нет. Когда спецы начинают говорить загадками то это повод принять их "за спецов".

По моему проблема может быть совсем не с битами SPI command - эти биты на MOSI выставляет МК и он вне зависимоти от состояния CSN знает когда их надо на шину выставить. А вот с битом S7 может быть проблема - на момент положительного фронта на CLK бит S7 уже должен быть выставлен и если nrf24 делает это после опускания CSN - то я соглашусь с тем, что на CSN cэкономить не получится

Я не знаю какие у вас с ними проблемы. Что вам не ясно из диаграммы? Что вы там не видите?

После того как CSN опустили в ноль, первым байтом отправляется SPI command, а принимается STATUS register. Все. И никак по другому. Если вы не поднимите CSN обратно и не опустите снова, то дальнейшие данные будут просто игнорироваться. А еще вполне возможно что поднятие CSN является признаком окончания обмена и пока вы его не поднимите переданные данные будут тоже проигнорированы.

Если бы можно было дальше слать команду за командой не поднимая CSN, то диаграмма выглядела бы примерно так:

Она так выглядит? Нет. Так ясно?

При этом такое возможно (предача без CSN) если данные фиксированной или заранее известной длины или вторым байтом передается длина данных. Так как иначе нельзя будет определить где данные, а где команда или статус. А у NRF24L01 как вам известно и регистры разной длины бывают и данные. Так что без CSN никак.

toc
Offline
Зарегистрирован: 09.02.2013

ardudeveloper пишет:

Остановился на AtMega328 и NRF24L01.

берите с плюсом (nRF24L01+) - это усовершенствованная версия.

axill
Offline
Зарегистрирован: 05.09.2011

toc пишет:

берите с плюсом (nRF24L01+) - это усовершенствованная версия.

вариант без плюса по моему при всем желании сейчас не сыскать) но замечание верное

MaksMS
Offline
Зарегистрирован: 11.03.2013

Ещё есть другой вариант передачи беспроводных данных:

1.радиомодули 433 или 315 мгц

2. приемник -сервер на основе ардуино

3.передатчики с dht 11/22 или ds18b20 на м/к  tiny13 (у которых цена 50 центов !!!)

Вариант рабочий ,но пока протестирован только на  tiny85..

На tiny13 должно тоже работать - код написан на  Си и занимает около 1 кб.Жду прихода tiny13 чтобы протестировать.

ardudeveloper
Offline
Зарегистрирован: 14.10.2013

Еще раз спасибо за уточнения, вариант окончательный.