Беспроводная передача показаний датчиков, помощь выбора компонентов.
- Войдите на сайт для отправки комментариев
Пнд, 14/10/2013 - 11:02
Всем доброго времени суток!
Хочется реализовать один проект, в котором есть необходимость передавать показания с датчиков (dht22, ds18b20, bmp085) беспроводным способом передачи, дальность небольшая, прямая видимость. Приемник- Arduino UNO, передатчик-МК, посоветуйте пожалуйста:
1. Что использовать для беспроводной передачи, пока остановился на NRF24L01.
2. Какой МК использовать в передатчике, ATtiny85 достаточно ?
3. Какие могут быть подводные камни и как их избежать.
Всем спасибо за советы.
1. NRF24L01 подходит.
2. Нет.
3. Разные, никак.
На tiny85 сенмор вполне можно сделать, только придется помучиться с библиотеками для nrf24, если вы уж на нем собрались делать. Прощу уж тогда с двух сторон вешать ардуино
чтобы избежать граблей изучите это пример http://arduino.ru/forum/proekty/bolshie-chasy-pogodnaya-stantsiya
Не обязательно тайни, посоветуйте более подходящий МК, я сам не очень пока разбираюсь, а купить слишком мощное/слабое не хочется. Ардуино использую для создания прототипа, в конечном устройстве и приемник и передатчик необходимо сделать на МК. Ссылку сейчас изучу, спасибо.
Не обязательно тайни, посоветуйте более подходящий МК, я сам не очень пока разбираюсь, а купить слишком мощное/слабое не хочется. Ардуино использую для создания прототипа, в конечном устройстве и приемник и передатчик необходимо сделать на МК. Ссылку сейчас изучу, спасибо.
В готовом устройстве вы хотите в МК код заливать из среды ардуино или писать отдельно уже без применения среды ардуино? Если первое - то берите такой же МК как и в ардуино, в наиболее распространенных это atmega328p. Если делаете для себя то разница в цене с более простыми МК будет несущественна.
Сам делал такой выбор и делаю микс - что быстро собрать на ардуине, а что для удовольствия и не спеша - на МК с програмированием в Атмел студио. Тот код который у меня влезает в atmega8 при компилировании в ардуине получается 16кб - уже в мену 8 не влезет, нужна или мега168 или мега328.Плодить разных МК себе дороже. Проще купить десяток по хорошей цене (хорошая цена за десяток 328-х это 14-15 баксов с пересылкой) в китае атмега328 на все случаи жизни.
На tiny85 сенмор вполне можно сделать, только придется помучиться с библиотеками для nrf24, если вы уж на нем собрались делать.
На tiny85 сенмор вполне можно сделать, только придется помучиться с библиотеками для nrf24, если вы уж на нем собрались делать.
и в чем проблема? выводов там аж 6 штук - 5 для подключения модуля и 1 для датчика
Спасибо, понравилась идея насчет Atmega328!
На tiny85 сенмор вполне можно сделать, только придется помучиться с библиотеками для nrf24, если вы уж на нем собрались делать.
и в чем проблема? выводов там аж 6 штук - 5 для подключения модуля и 1 для датчика
Проблема в том что нужен параллельный программатор иначе тиня будет прошита первый и последний раз. А без такового активных ног считайте 5, а не 6.
мы не знаем точно задачи и не знаем какие у нее ограничения ) Для меня не проблема, кстати не совсем так - тинька не имеет параллельного интерфейса програмирования. Для снятия бита RSTDISBL нужен последовательный но высоковольный пограмматор - такой есть например на STK500 и STK600
но без всех этих чудес, если задача ограничена только отправкой данных, то один из выводом радиомодуля можно к МК не подключать и включить чип только на передачу. Разве нет? Я так не пробовал, но в теории должно работать (я про CSN). На пине CE по идее тоже можно сэкономить - подать на него постоянный ноль, если у нас будет только одно SPI устройство (а для второго все равно пинов нет :))) и того выходит 3 ноги на радио и аж целых две ноги для датчиков. Все это при том, что с reset пином мы не связываемся
но без всех этих чудес, если задача ограничена только отправкой данных, то один из выводом радиомодуля можно к МК не подключать и включить чип только на передачу. Разве нет?
про MISO я и не писал, его необходимость понятна так как обмен по радио в одну сторону не исключает обмена с чипом в обе стороны. Посмотрел код RF24 - powerdown() не снимает HIGH с CE, тогда получаетс что если после startListening() сделать powerDown() то реально чип продолжит есть 14ма?
рассуждение о tiny85 для меня чисто теоретическое - писал выше что лучше брать МК с запасом, это того стоит
лень было но залез в даташит - нет необходимости ставить LOW на CE для того, чтобы загнать чип в режимы низкого потребления. Но с CE есть другая проблема - чтобы начать передачу радио нужно на это вывод подать положительный импульс. Так что да - для работы передатчика этот вывод нужен.
а вот насчет CSN не согласен - его можно на постоянку придавить к земле. Не нужен там никакой импульс для начала передачи. К тому же такое требование отсутствует в стандарте SPI. Так что CSN можно освободить. Все тактирование в SPI идет по положительному импульсу на CLK. На то и существует трехвпроводной SPI
Еще остаются всякие 74HC595 ))) С ними хоть в две стороны можно тиньку напрячь, но эти все рассуждения только ради понимания, проще взять мк с большими возможностями
Я вижу что не писали про MISO.
Одно из двух: или уснет и не проснется или не уснет.
а вот насчет CSN не согласен - его можно на постоянку придавить к земле. Не нужен там никакой импульс для начала передачи. К тому же такое требование отсутствует в стандарте SPI. Так что CSN можно освободить. Все тактирование в SPI идет по положительному импульсу на CLK. На то и существует трехвпроводной SPI
Плохо смотрели:
Как видно SPI comand и STATUS register только в начале передачи, дальше только данные.
Одно из двух: или уснет и не проснется или не уснет.
ну так скажем - в задаче вообще не говорится о небоходимости засыпать)) значит и нет такой проблемы. Но я уже согласился, что CE нужен - без него передача не возможна в принципе
а вот насчет CSN не согласен - его можно на постоянку придавить к земле. Не нужен там никакой импульс для начала передачи. К тому же такое требование отсутствует в стандарте SPI. Так что CSN можно освободить. Все тактирование в SPI идет по положительному импульсу на CLK. На то и существует трехвпроводной SPI
Плохо смотрели:
Как видно SPI comand и STATUS register только в начале передачи, дальше только данные.
видел я эти картинки - поясните мне где здесь разница со стандартным SPI? я не вижу. весь обмен можнт происходить при постоянно зажатом CSN
сложности могут быть только в нештатных ситуациях - например перезапуск МК посередине обмена с радио чипом - будет потеряна синхронизация по первому биту первого байта. Но при штатной работе CSN не нужен
Ну не верите даташиту попробуйте и убедитесь.
А про "стандартный" SPI тут почитайте.
Ну не верите даташиту попробуйте и убедитесь.
А про "стандартный" SPI тут почитайте.
читал уже хоть и другие статьи. Поясните, что на диаграмме требует управление CSN? я вижу передача начинается по положительному фронту на SCK
SPI comand и STATUS register.
SPI comand и STATUS register.
и какие с ними проблемы? если разбираетесь, то идите до конца - объсните. Нет так нет. Когда спецы начинают говорить загадками то это повод принять их "за спецов".
По моему проблема может быть совсем не с битами SPI command - эти биты на MOSI выставляет МК и он вне зависимоти от состояния CSN знает когда их надо на шину выставить. А вот с битом S7 может быть проблема - на момент положительного фронта на CLK бит S7 уже должен быть выставлен и если nrf24 делает это после опускания CSN - то я соглашусь с тем, что на CSN cэкономить не получится
Всем доброго времени суток!
Хочется реализовать один проект, в котором есть необходимость передавать показания с датчиков (dht22, ds18b20, bmp085) беспроводным способом передачи, дальность небольшая, прямая видимость. Приемник- Arduino UNO, передатчик-МК, посоветуйте пожалуйста:
1. Что использовать для беспроводной передачи, пока остановился на NRF24L01.
Подумайте об ИК-светодиоде:) Уж если делать что-то то только по хардкору. Для вашей задачи в самый раз:)
Остановился на AtMega328 и NRF24L01.
Остановился на AtMega328 и NRF24L01.
берите с буквой P (atmega328p) - это усовершенствованная версия с ментьшим энергопотреблением
и какие с ними проблемы? если разбираетесь, то идите до конца - объсните. Нет так нет. Когда спецы начинают говорить загадками то это повод принять их "за спецов".
По моему проблема может быть совсем не с битами SPI command - эти биты на MOSI выставляет МК и он вне зависимоти от состояния CSN знает когда их надо на шину выставить. А вот с битом S7 может быть проблема - на момент положительного фронта на CLK бит S7 уже должен быть выставлен и если nrf24 делает это после опускания CSN - то я соглашусь с тем, что на CSN cэкономить не получится
После того как CSN опустили в ноль, первым байтом отправляется SPI command, а принимается STATUS register. Все. И никак по другому. Если вы не поднимите CSN обратно и не опустите снова, то дальнейшие данные будут просто игнорироваться. А еще вполне возможно что поднятие CSN является признаком окончания обмена и пока вы его не поднимите переданные данные будут тоже проигнорированы.
Если бы можно было дальше слать команду за командой не поднимая CSN, то диаграмма выглядела бы примерно так:
Она так выглядит? Нет. Так ясно?
При этом такое возможно (предача без CSN) если данные фиксированной или заранее известной длины или вторым байтом передается длина данных. Так как иначе нельзя будет определить где данные, а где команда или статус. А у NRF24L01 как вам известно и регистры разной длины бывают и данные. Так что без CSN никак.
Остановился на AtMega328 и NRF24L01.
берите с плюсом (nRF24L01+) - это усовершенствованная версия.
берите с плюсом (nRF24L01+) - это усовершенствованная версия.
вариант без плюса по моему при всем желании сейчас не сыскать) но замечание верное
Ещё есть другой вариант передачи беспроводных данных:
1.радиомодули 433 или 315 мгц
2. приемник -сервер на основе ардуино
3.передатчики с dht 11/22 или ds18b20 на м/к tiny13 (у которых цена 50 центов !!!)
Вариант рабочий ,но пока протестирован только на tiny85..
На tiny13 должно тоже работать - код написан на Си и занимает около 1 кб.Жду прихода tiny13 чтобы протестировать.
Еще раз спасибо за уточнения, вариант окончательный.