nRF24L01
Модератор: immortal
-
MaksMS82
- Сообщения: 422
- Зарегистрирован: Ср сен 05, 2012 7:30 am
- Откуда: Киров
- Контактная информация:
Re: nRF24L01
Эти значения не могут прыгать и задаются фиксировано в начале скетча.. Если прыгает,то значит не верно подключено - SPI шина не правильно работает, но тогда бы и другие значения скакали.
Так-то в этой большой куче настроек nRF24L01 и nRF24LE1 все очень просто, там куча регистров,но есть хорошее описание http://nrqm.pbworks.com/w/page/4416166/nRF24L01. Я с этим вроде как давно разобрался , но вот сейчас с одним косяком воюю - на приеме приходят отправленные данные с этого же модуля.
Так-то в этой большой куче настроек nRF24L01 и nRF24LE1 все очень просто, там куча регистров,но есть хорошее описание http://nrqm.pbworks.com/w/page/4416166/nRF24L01. Я с этим вроде как давно разобрался , но вот сейчас с одним косяком воюю - на приеме приходят отправленные данные с этого же модуля.
Последний раз редактировалось MaksMS82 Пн окт 13, 2014 10:24 am, всего редактировалось 2 раза.
Re: nRF24L01
Кондер на питание стоит7
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
Re: nRF24L01
radio.openWritingPipe где то не прописан.
Нужно что бы в RX_ADDR_P0-1 в TX_ADDR в начале были одинаковые значения адреса в обоих дуинах. И при нажатии на буковку Т симметрично менялись на другой адрес. Вот это попробуй загрузить. Там еще по буковке P можно в любой момент принтдетейлс вывести и посмотреть как адреса-каналы меняются.
#include <SPI.h>
#include "RF24.h"
#include "printf.h"
RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
typedef enum { role_ping_out = 1, role_pong_back } role_e;
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
role_e role = role_pong_back;
void setup(void) { Serial.begin(57600);
printf_begin();
printf("\n\rRF24/examples/GettingStarted/\n\r");
printf("ROLE: %s\n\r",role_friendly_name[role]);
printf("*** PRESS 'T' to begin transmitting to the other node\n\r");
radio.begin();
radio.setChannel(125);
radio.setRetries(15,15);
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.startListening();
radio.printDetails(); }
void loop(void) {
if (role == role_ping_out) { radio.stopListening(); unsigned long time = millis();
printf("Now sending %lu...",time);
bool ok = radio.write( &time, sizeof(unsigned long) );
if (ok) printf("ok..."); else printf("failed.\n\r");
printf("ok=",ok);
radio.startListening(); unsigned long started_waiting_at = millis(); bool timeout = false;
while ( ! radio.available() && ! timeout )
if (millis() - started_waiting_at > 200 ) timeout = true;
if ( timeout ) { printf("Failed, response timed out.\n\r"); }
else { unsigned long got_time; radio.read( &got_time, sizeof(unsigned long) );
printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time); }
delay(1000);}
if ( role == role_pong_back ) {
if ( radio.available() ) { unsigned long got_time; bool done = false;
while (!done) { done = radio.read( &got_time, sizeof(unsigned long) );
printf("Got payload %lu...",got_time); delay(20);}
radio.stopListening(); radio.write( &got_time, sizeof(unsigned long) );
printf("Sent response.\n\r"); radio.startListening(); } }
if ( Serial.available() ) {
char c = toupper(Serial.read());
if ( c == 'P') {radio.printDetails(); }
if ( c == 'T' && role == role_pong_back )
{printf("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK\n\r");
role = role_ping_out;
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
radio.printDetails();}
else if ( c == 'R' && role == role_ping_out )
{ printf("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK\n\r");
role = role_pong_back;
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.printDetails(); } }
}
Нужно что бы в RX_ADDR_P0-1 в TX_ADDR в начале были одинаковые значения адреса в обоих дуинах. И при нажатии на буковку Т симметрично менялись на другой адрес. Вот это попробуй загрузить. Там еще по буковке P можно в любой момент принтдетейлс вывести и посмотреть как адреса-каналы меняются.
#include <SPI.h>
#include "RF24.h"
#include "printf.h"
RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
typedef enum { role_ping_out = 1, role_pong_back } role_e;
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
role_e role = role_pong_back;
void setup(void) { Serial.begin(57600);
printf_begin();
printf("\n\rRF24/examples/GettingStarted/\n\r");
printf("ROLE: %s\n\r",role_friendly_name[role]);
printf("*** PRESS 'T' to begin transmitting to the other node\n\r");
radio.begin();
radio.setChannel(125);
radio.setRetries(15,15);
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.startListening();
radio.printDetails(); }
void loop(void) {
if (role == role_ping_out) { radio.stopListening(); unsigned long time = millis();
printf("Now sending %lu...",time);
bool ok = radio.write( &time, sizeof(unsigned long) );
if (ok) printf("ok..."); else printf("failed.\n\r");
printf("ok=",ok);
radio.startListening(); unsigned long started_waiting_at = millis(); bool timeout = false;
while ( ! radio.available() && ! timeout )
if (millis() - started_waiting_at > 200 ) timeout = true;
if ( timeout ) { printf("Failed, response timed out.\n\r"); }
else { unsigned long got_time; radio.read( &got_time, sizeof(unsigned long) );
printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time); }
delay(1000);}
if ( role == role_pong_back ) {
if ( radio.available() ) { unsigned long got_time; bool done = false;
while (!done) { done = radio.read( &got_time, sizeof(unsigned long) );
printf("Got payload %lu...",got_time); delay(20);}
radio.stopListening(); radio.write( &got_time, sizeof(unsigned long) );
printf("Sent response.\n\r"); radio.startListening(); } }
if ( Serial.available() ) {
char c = toupper(Serial.read());
if ( c == 'P') {radio.printDetails(); }
if ( c == 'T' && role == role_pong_back )
{printf("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK\n\r");
role = role_ping_out;
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
radio.printDetails();}
else if ( c == 'R' && role == role_ping_out )
{ printf("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK\n\r");
role = role_pong_back;
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.printDetails(); } }
}
Re: nRF24L01
PAV! и еще RX_PW_P0-6 разные. Точно не помню и сейчас не могу проверить, но по моему это с каналом связано - тогда надо принудительно прописать radio.setChannel
-
MaksMS82
- Сообщения: 422
- Зарегистрирован: Ср сен 05, 2012 7:30 am
- Откуда: Киров
- Контактная информация:
Re: nRF24L01
radio.setChannel - это канал , на котором работают модули номер канала+2400=частота реальная в мгц.azh122 писал(а):PAV! и еще RX_PW_P0-6 разные. Точно не помню и сейчас не могу проверить, но по моему это с каналом связано - тогда надо принудительно прописать radio.setChannel
Тут я вижу в проблеме неустановки настроек openReadingPipe и openWritingPipe..
RX_PW_P0-6 - это как раз openReadingPipe и прописывает
Re: nRF24L01
тогда странно - RX адреса правильно прописан и там и там.MaksMS82 писал(а): RX_PW_P0-6 - это как раз openReadingPipe и прописывает
да глянул в библиотеку - запись в RX_PW_P0 вроде фигурирует в void RF24::openWritingPipe
В любом случае сначала нужно добиваться что бы в монитор обе дуины вначале плевали одно и то же. (править скетч, питание)
Re: nRF24L01
Да, честно говоря в голову не пришло, что скетч примера может быть неправильным.
Кондер стоит.
Попробую покрутить так сяк вечерком.
Я же могу обе дуинке к одному компу подрубить? Одна просто питается, на второй порт смотрю.
Народ еще пишет, что в инете гуляют несколько РАЗНЫХ вариантов подключения NRF к дуинке, у кого точно работает, мое подключение правильное? - http://smartliving.ru/forum/viewtopic.p ... 796#p14031
На будущее, а если третью трубу подключать, какой адрес добавлять надо? { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL ............};
Кондер стоит.
Попробую покрутить так сяк вечерком.
Я же могу обе дуинке к одному компу подрубить? Одна просто питается, на второй порт смотрю.
Народ еще пишет, что в инете гуляют несколько РАЗНЫХ вариантов подключения NRF к дуинке, у кого точно работает, мое подключение правильное? - http://smartliving.ru/forum/viewtopic.p ... 796#p14031
На будущее, а если третью трубу подключать, какой адрес добавлять надо? { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL ............};
-
MaksMS82
- Сообщения: 422
- Зарегистрирован: Ср сен 05, 2012 7:30 am
- Откуда: Киров
- Контактная информация:
Re: nRF24L01
Любой, из 0xF0F0F0F0ХХLL , но пока бы с двумя разобраться бы ,чтобы запустить 2 модуля между собой))
Re: nRF24L01
PAV! у тебя остальные регистры абсолютно правильно прописаны. Т.е копать на тему что не правильно подключил - не нужно.
Мой вердикт остается прежнем (ранее писал где ошибки). Не хочешь заморачиватся - загрузи скетч который я давал (на заработает - часика через три буду дома - проверю и выдам ну уж точно работающий).
Если хочешь заморочится, но с помощью товарищей - выкладывай скетч который заливаешь. Блин, ну в правду, тяжело править когда гряит мол подлючил как гугля велел, мол в скетче думаю что ошибок нет, че выдает в монитор - типа разумное (для обезьяны ? ))) ).... Но вот выложил же пины - никто не покритиковал аргуметированно - значит все ок. А скетчики спрятал. Ну стопудово и как минимум у тебя там в сетапе нет записи в регистр.
Мой вердикт остается прежнем (ранее писал где ошибки). Не хочешь заморачиватся - загрузи скетч который я давал (на заработает - часика через три буду дома - проверю и выдам ну уж точно работающий).
Если хочешь заморочится, но с помощью товарищей - выкладывай скетч который заливаешь. Блин, ну в правду, тяжело править когда гряит мол подлючил как гугля велел, мол в скетче думаю что ошибок нет, че выдает в монитор - типа разумное (для обезьяны ? ))) ).... Но вот выложил же пины - никто не покритиковал аргуметированно - значит все ок. А скетчики спрятал. Ну стопудово и как минимум у тебя там в сетапе нет записи в регистр.
Re: nRF24L01
мониторов мало - скачай putty. запусти. Выбираешь Connection Type. Далее порт и скорость для одной дуины. Сохраняешь. Потом все также для другой. Потом запускаешь по одному порту и по другому. Все работает - смотри и управляй то одной то дргугой. И реконект не нужен. Если конечно ты не хочешь перед этим порт осводобидть что бы скажем новый скетч залить...