Nrf24l01+

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

спасибо. когда нибудь мне эта информация обязательно пригодится

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

Личный опыт: конденсатор на 1мф впаяный между ногами питания не позволяет переключить режимы RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH - постоянно включен (а может и не включается) 0-й, то есть RF24_PA_MIN. Очень редко (читай 1 раз из 30) включается нужный. Качество связи - соответствующее. Конденсатор >= 10мф решает данную проблему.

P.S. не претендую на правоту, просто только что часа 2 промучался с данной проблемой. И кондеров перепробовал штук 5, пока не додумался побольше впаять ))))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

maksim пишет:

jeka_tm пишет:

что вы думаете по этому поводу?

То что вам для начала нужно ознакомиться с разделом Программирование

массив (array)

byte val[2];

val[0] = 254;
val[1] = 152;

radio.write(val, 2);
byte msg[2];

radio.read(msg, 2);

analogWrite(3, msg[0]);
analogWrite(5, msg[1]);

 

все заработало)))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хотел использовать джойстик от PSP2000 вроде этого

http://www.ebay.com/itm/Analog-Joystick-Control-For-Sony-PSP-2000-Slim-Replacement-Repair-Part-DR-/300913688167?pt=LH_DefaultDomain_0&var=&hash=item460fda7e67

плюсы:

-компактный

-выводы под пайку 4 шт: + - 2 выхода

минусы:

-безбожно нестабилен: средняя точка (которую сам принимает если отпустить джойстик)  измеренная через analogRead гуляет по Y от 380 до 480. зависит в какую сторону до этого отводили джойсик. если вверх то покажет потом в центре 380, если вниз то покажет 480. это ориентировочно. числа каждый раз разные. по оси Х тоже самое. не берите, замучаетесь программу писать чтобы хоть к какому то линейному виду привести. кстати  значения в центре и по краям разные для каждой оси. каждую ось нужно настраивать по отдельности. максимумы тоже гуляют. обычно по Х максимум около 880 плюс минус, но иногда значение максимума вырастает до 900 с лишним 

повторяю не берите намучаетесь. может хотя оригинальные хорошие, но дорогие

 

 

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

jeka_tm, здесь обсуждам радио модуль. Не джойстики.

pmaster
Offline
Зарегистрирован: 23.05.2011

китайское овно, оригинал работает идеально.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

toc пишет:

jeka_tm, здесь обсуждам радио модуль. Не джойстики.

сори.больше не буду. просто передавал данные с джойстика через Nrf24l01 на другую ардуину и вылезла такая бяка

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

axill пишет:
toc пишет:
axill пишет:

у вас write что возвращает?

Иногда false, чаще true.

загадка ( мне не удалось ни разу увидеть true. буду копать

axill, удалось разобраться?

У меня похожая проблема с testRPD(). Вы его используете? Какое значение он чаще возвращает?
Я понимаю, что должно быть так:
1. Мощность принятого сигнала относительно хорошая- testRPD возвращает true
2. Мощность принятого сигнала относительно слабая- testRPD возвращает false
3. в ардуино true равно 1, а false равно 0. *
я правильно понимаю?

*-суммирую значения. Как-то так
{
 long totalRPD=0;
 ...
 {
  bool lastRPD=testRPD();
  totalRPD+=lastRPD;
  ..
 }
 ..
}

Независимо от мощности передатчика (setPAlevel) и расстояния до приёмника получаю false. Носил по всей квартире, накрывал кастрюлькой, добивался потери связи, всегда false. Целый день модули лежали рядом, пинговались, больше 300 тыс. раундтрипов и, однако, 6 штук true.

Помещал testRDP в разные места скетча
- после if(radio.available())
- после radio.read()
- после обработки принятого пакета (~8 мс)
- после stopListening
не помогает.

nordic пишет:

...
6.1.4 RX mode
...
In RX mode a Received Power Detector (RPD) signal is available. The RPD is a signal that is set high
when a RF signal higher than -64 dBm is detected inside the receiving frequency channel. The internal
RPD signal is filtered before presented to the RPD register. The RF signal must be present for at least 40us
before the RPD is set high. How to use the RPD is described in Section 6.4 on page 25.
...
...
6.4 Received Power Detector measurements
Received Power Detector (RPD), located in register 09, bit 0, triggers at received power levels above -64
dBm that are present in the RF channel you receive on. If the received power is less than -64 dBm,
RDP = 0.
The RPD can be read out at any time while nRF24L01+ is in receive mode. This offers a snapshot of the
current received power level in the channel. The RPD status is latched when a valid packet is received
which then indicates signal strength from your own transmitter. If no packets are received the RPD is
latched at the end of a receive period as a result of host MCU setting CE low or RX time out controlled by
Enhanced ShockBurst™.
The status of RPD is correct when RX mode is enabled and after a wait time of Tstby2a +Tdelay_AGC=
130us + 40us. The RX gain varies over temperature which means that the RPD threshold also varies over
temperature. The RPD threshold value is reduced by - 5dB at T = -40°C and increased by + 5dB at 85°C.
...

Мои пакеты имеют длину 16 байт (payload). Сколько времени передаётся такой пакет(250KBPS)?

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

true из функции write мне удалось получить, но только при тестировании двух устройств "на столе"

в реальных условиях сообщение доходит, но write возвращает false

RPD не тестировал, исходя из описания имеет смысл тестировать RPD на разных каналах, оно должно харрактеризовать наличие помех

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

axill, лично у меня с network.write (речь о библиотеке RF24Network) (да и в RF24 тоже точно все будет ок - из нее ж этот bool и приходит) все в порядке. Когда доходит - приходит true. Хотя, честно говоря, я так до конца и не понял radio.write( frame_buffer, frame_size ) возвращает true когда frame_buffer отправлен, или когда приходит ответ об успешном получении пакета на стороне приемника? Поясните, пожлуйста, непонятливому )))

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

radio.write в библиотеке RF24 возвращает true тогда когда получатель получил сообщение, отчитался об этом обратной посылкой и эта посывлка дошла до отправителя. В моем случае при реальной установке устроуств часто бывает, что сообщение дошло до адресата, но "отчет" обратно не дошел и возвращается false не смотря на то, что сообщение все-таки дошло

mitekg
Offline
Зарегистрирован: 14.05.2013

CityCat пишет:

Личный опыт: конденсатор на 1мф впаяный между ногами питания не позволяет переключить режимы RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH - постоянно включен (а может и не включается) 0-й, то есть RF24_PA_MIN. Очень редко (читай 1 раз из 30) включается нужный. Качество связи - соответствующее. Конденсатор >= 10мф решает данную проблему.

P.S. не претендую на правоту, просто только что часа 2 промучался с данной проблемой. И кондеров перепробовал штук 5, пока не додумался побольше впаять ))))

Интересно. "мф" это микро?

впаивали между ног nrf или дуины?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

mitekg пишет:

CityCat пишет:

Личный опыт: конденсатор на 1мф впаяный между ногами питания не позволяет переключить режимы RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH - постоянно включен (а может и не включается) 0-й, то есть RF24_PA_MIN. Очень редко (читай 1 раз из 30) включается нужный. Качество связи - соответствующее. Конденсатор >= 10мф решает данную проблему.

P.S. не претендую на правоту, просто только что часа 2 промучался с данной проблемой. И кондеров перепробовал штук 5, пока не додумался побольше впаять ))))

Интересно. "мф" это микро?

впаивали между ног nrf или дуины?

 в данной ветке этот вопрос уже 3 раз обсуждается.. там даже фото где то было... но это я так понимаю не предел... :)

mitekg
Offline
Зарегистрирован: 14.05.2013

ага, тут куча убогих)

и всеж можно ответы на вопросы. Пожалуйста

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

mitekg, мф - это микрофарады. Впаивал, конечно же между ног nrf. 3,3 беру не от дуины, а от AMS1117 - у нее по выходам тоже (на всякий случай) стоит танталовый на 0,1 mF и электролит на 10 mF.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

mitekg пишет:

ага, тут куча убогих)

и всеж можно ответы на вопросы. Пожалуйста

специально по просьба наших особо убогих читателей. повторим нашу програму полугодовой давности...

Casper17
Offline
Зарегистрирован: 21.06.2013

Подскажите пожалуйста, как в библиотеки  RF24Network настроить скорость передачи и мощность если это возможно...

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

Точно так же как и без нее.

radio.setDataRate(RF24_1MBPS);
radio.setPALevel(RF24_PA_MAX);

 

Casper17
Offline
Зарегистрирован: 21.06.2013

Спасибо, а для стабильности будет лучше поставит скорость radio.setDataRate(RF24_250KBPS); Так правильно или нет?

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

axill пишет:

true из функции write мне удалось получить, но только при тестировании двух устройств "на столе"

в реальных условиях сообщение доходит, но write возвращает false

Я заметил, что если нужно отправить с одного модуля более одного сообщения и желательно получить от write "истину", то надо сделать startListening и stopListening.

 

axill пишет:
RPD не тестировал, исходя из описания имеет смысл тестировать RPD на разных каналах, оно должно харрактеризовать наличие помех

Hаличие помех от соседей нужно тестировать методом testCarier - это проверка наличия несущей частоты в эфире.

A testRPD как раз для проверки своего канала, ибо

nordic пишет:

6.4 Received Power Detector measurements
...
The RPD status is latched when a valid packet is received which then indicates signal strength from your own transmitter. 

 
Вопрос ко всем: есть модули с отдельным чипом-усилителем, sma антенной и декларируемой дальностью 1000 метров. Метод setPaLevel для них применять бесполезно? Где-то в даташите читал, что в таких модулях сигнал на усилитель подаётся с другой ножки чипа, до встроенного в nrf24l01+ усилителя, вроде.
 
toc
Offline
Зарегистрирован: 09.02.2013

Casper17 пишет:

Спасибо, а для стабильности будет лучше поставит скорость radio.setDataRate(RF24_250KBPS); Так правильно или нет?

 

nordic пишет:
6.2 Air data rate

The air data rate is the modulated signaling rate the nRF24L01+ uses when transmitting and receiving data. It can be 250kbps, 1Mbps or 2Mbps. Using lower air data rate gives better receiver sensitivity than higher air data rate. But, high air data rate gives lower average current consumption and reduced probabil- ity of on-air collisions.
6.2 Скорость радиообмена
Скорость радиообмена, это скорость сигнала модулированного несущей частотой, используемая чипом NRF24L01+ при передачи и при получении данных. Она может быть 250 килобит в секунду, 1 мегабит в секунду или 2 мегабита в секунду. Использование низкой скорости радиообмена даёт лучшую чувствительность приёмника, чем при высокой скорости. Однако, при высокой скорости радиообмена, уменьшается среднее энергопотребление, а также уменьшается вероятность возникновения коллизий в радиоэфире.
 
уфф.
 
Casper17
Offline
Зарегистрирован: 21.06.2013

Пожскажите как правидьно пользоваться scanner из библиотеки RF24. 

Я так понимаю что в длину это 128 каналов, где нули там нет помех и эти каналы можно использовать, да?

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

Casper17, всё правильно.
Можно использовать и те каналы, где есть помехи. Просто на таких каналах вероятность того, что помехи могут вам помешать чуть выше, чем на других каналах.

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

у меня по другому выглядит результат сканера, почитал скетч так и не понял - много звездочек это хорошо или плохо?

и что странно в результате есть не все каналы хотя в скетче явно идет цикл от 0 до 127

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

с пропусками разобрался - там выше есть переменная activeOnly. Если ей присвоить false то будет показывать все 128 каналов.

Но все-таки звездочки показывают засореннось канала или наоборот? лучше выбирать канал с нулем или со звездочками?

Looka
Offline
Зарегистрирован: 24.04.2012

axill пишет:

у меня по другому выглядит результат сканера, почитал скетч так и не понял - много звездочек это хорошо или плохо?

 

А это у Вас из какой библиотеки сканер?

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

Это из RF24, видимо разные версии

Looka
Offline
Зарегистрирован: 24.04.2012

axill пишет:

Это из RF24, видимо разные версии

 

А дайте ссылку пожалуйста, или текст скетча.  Интересно у себя этот сканер посмотреть

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

axill, родной сканер, в отличие от вашего, использует метод testCarrier. Вот https://github.com/maniacbug/RF24/blob/master/examples/scanner/scanner.pde

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

Toc знаю, смотрел. Hek где то надыбал эту версию)

но кстати даже в оригинале библиотеки по вашей ссылке сказано, что для чипа с плюсом (nrf24l01+ - а сейчас все такие) лучше использовать rdp

Looka
Offline
Зарегистрирован: 24.04.2012
Looka
Offline
Зарегистрирован: 24.04.2012

axill пишет:

с пропусками разобрался - там выше есть переменная activeOnly. Если ей присвоить false то будет показывать все 128 каналов.

Но все-таки звездочки показывают засореннось канала или наоборот? лучше выбирать канал с нулем или со звездочками?

 

Чем меньше звездочек - чище канал

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

отлично! у меня первые 50 каналов получается забиты до отказа, а дальше тишь да благодать ))

видимо wifi вест в первой полусотне

vvadim
Offline
Зарегистрирован: 23.05.2012

maksim пишет:

jeka_tm пишет:

что вы думаете по этому поводу?

То что вам для начала нужно ознакомиться с разделом Программирование

массив (array)

byte val[2];

val[0] = 254;
val[1] = 152;

radio.write(val, 2);
byte msg[2];

radio.read(msg, 2);

analogWrite(3, msg[0]);
analogWrite(5, msg[1]);

 

Передаю данные с трёх потенциометров

byte val[3];
val[0] = analogRead(potpin);
val[1] = analogRead(potpin1);
val[2] = analogRead(potpin2);

radio.write(val, 6);

Как теперь правильно прочитать массив

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

А почему у вас массив размером 3 элемента, а при передаче длинну вы указали 6 ?

maksim
Offline
Зарегистрирован: 12.02.2012
// передача
int val[3];
val[0] = analogRead(potpin);
val[1] = analogRead(potpin1);
val[2] = analogRead(potpin2);
radio.write(&val, 6);

// прием
int val[3];
radio.read(&val, 6);
int analog1 = val[0];
int analog2 = val[1];
int analog3 = val[2];

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Планирую ещё три переменных отправлять.


byte val[3];
val[0] = analogRead(potpin);
val[1] = analogRead(potpin1);
val[2] = analogRead(potpin2);

radio.write(val, 3);
vvadim
Offline
Зарегистрирован: 23.05.2012

maksim, не могли бы вы объяснить запись int analog1 val[0];

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

Знак равно пропушен.

vvadim
Offline
Зарегистрирован: 23.05.2012

А почему int analog1 а не допустим int x.

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

Это имя переменной,может быть любым не занятым и не зарезервированным

spa-sam
Offline
Зарегистрирован: 14.12.2012
 

По поводу сканера, тот что со звездочками...это из модифицированной библиотеки maniacbug. Сделал её товарищ Greg Copeland и скачать её можно вот тут https://github.com/gcopeland/RF24

Casper17
Offline
Зарегистрирован: 21.06.2013

А какое количество устройст(nrf24lo1+) можно использовать в библиотеке nrf24network?

dmw
Offline
Зарегистрирован: 24.03.2013

Casper17 пишет:
А какое количество устройст(nrf24lo1+) можно использовать в библиотеке nrf24network

Если строить сеть "звездой", то до 6 узлов на одном канале. Если как в примере meshping.pde, по древовидной структуре с адресацией 00-01-011-0111 и т.п., то до 781 узла на одном канале.

PowerTech
Offline
Зарегистрирован: 22.12.2013

Здравствуйте, возможно ли получить данные уровня сигнала(численное) со стороны приемника ? Если да то как ?

Идея в том, что ведомое устройство передаёт уровень сигнала на передатчик.

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

Возможно, если только сами организуете. NRF24L01+ позволяет передавать на 4 уровнях мощности. То есть на приемнике можете сделать 4 "палки" уровня сигнала, переодически отправляя с передатчика пакеты, в которых информация с какой мощностью был отправлен каждый из пакетов.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

подскажите можно как нибудь снять инфу с модуля что два модуля соединились и инфа будет передаваться?

гугление успеха не принесло

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

Ну отправьте что нибудь, если пакет дошел значит "соединились".

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

Если setAck(true) то write возвращает статус доставки

это встроеный в чип механизм подтверждения доставки, если пришла true то сообщение точно доставлено.

на практике правда false не всегда означает, что сообщение не было доставлено