Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 73
1

Как организовать передачу данных на NRF24L01+?

24.09.2018, 16:24. Просмотров 712. Ответов 8

Нигде так и не написано внятно как же организовать передачу, то есть сам процесс инициализации регистров адресов и т.п.
Например, мне нужно связать две nrf24l01, без подтверждения. Я настраиваю две передатчика на частоту 2430 ГГц, например.
В регистре EN_RXADDR активирую 1 канал передачи на другом передатчике активирую тот же канал передачи, в регистре RX_ADDR_P1 записываю тот же адрес что запишу и в другой передатчик, но уже в регистр TX_ADDR. Все правильно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2018, 16:24
Ответы с готовыми решениями:

Как организовать скрытую передачу данных?
Есть необходимость передавать данные о срабатывании оборудования без использования звука и не...

Как организовать передачу данных между JS и Studio?
JS лежит внутри asset/www/файл. Нужно чтоб ПЕРЕД загрузкой файлика в WebView в него передавались...

Как организовать бесправодную передачу данных протяжностью 400 км
Добрый день! Возможно ли организовать беспроводную передачу данных протяжностью 400 км. Допустим я...

Как организовать передачу данных между объектами разных классов?
Есть объект doc в нутрии него создается еще два объекта ui и engine, engine в свою очередь создает...

8
Модератор
Эксперт по электронике
8274 / 6133 / 822
Регистрация: 14.02.2011
Сообщений: 21,327
24.09.2018, 17:15 2
Цитата Сообщение от Vadimm1001 Посмотреть сообщение
Нигде так и не написано внятно как же организовать передачу, то есть сам процесс инициализации регистров адресов и т.п.
ой ли пол интернета этим завалено
вот например http://blog.sci-smart.ru/2013/06/nrf24l01.html
Цитата Сообщение от Vadimm1001 Посмотреть сообщение
В регистре EN_RXADDR активирую 1 канал передачи на другом передатчике активирую тот же канал передачи, в регистре RX_ADDR_P1 записываю тот же адрес что запишу и в другой передатчик, но уже в регистр TX_ADDR.
по шагам распиши начиная с инициализации
1
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 73
24.09.2018, 18:39  [ТС] 3
Цитата Сообщение от ValeryS Посмотреть сообщение
по шагам распиши начиная с инициализации
завтра по ссылке вашей попробую сделать, если не выйдет то напишу
0
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 73
25.09.2018, 18:18  [ТС] 4
Цитата Сообщение от ValeryS Посмотреть сообщение
http://blog.sci-smart.ru/2013/06/nrf24l01.html
В общем ответа я там не нашел. Мне нужно знать какие регистры нужно настроить для того чтобы один видел другого и все.
Без автоподтверждения и т.п. далее сам разберусь. Как я думаю:
Мне нужно включить канал приема от 0 до 5 в регистре 0x02 EN_RXADDR, я выбираю например 1, в 40 битном регистре адреса 0x0B RX_ADDR_P1 который предназначен для канала приема 1 вбиваю значение, и это же значение вбиваю в регистр 0x10 TX_ADDR на передатчике.
Все верно? Ну еще и частоту передачи на приемнике и передатчике одинаковую выставить, 2479 ГГц например.
0
Модератор
Эксперт по электронике
8274 / 6133 / 822
Регистрация: 14.02.2011
Сообщений: 21,327
25.09.2018, 19:27 5
Цитата Сообщение от Vadimm1001 Посмотреть сообщение
Мне нужно включить канал приема от 0 до 5 в регистре 0x02 EN_RXADDR, я выбираю например 1, в 40 битном регистре адреса 0x0B RX_ADDR_P1 который предназначен для канала приема 1 вбиваю значение, и это же значение вбиваю в регистр 0x10 TX_ADDR на передатчике.
я попросил подробно
например настраиваю регистр SETUP(0x00) так то и так то
потом автоподтверждение (0x01)так то итак то
потом каналы приемника 0x02
так же опиши когда и где выставляешь ножки CE: Chip Enable. пользуешся или нет IRQ?
вот тебе еще один сайт
http://aterlux.ru/article/nrf24l01p
с документацией на русском языке
0
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 73
26.09.2018, 08:19  [ТС] 6
Цитата Сообщение от ValeryS Посмотреть сообщение
я попросил подробно
я пока ничего не настроил, пока не могу сразу так все осмыслить поэтому и спрашиваю.
Цитата Сообщение от ValeryS Посмотреть сообщение
http://aterlux.ru/article/nrf24l01p
этот сайт я уже читал, вот перечитываю какой раз уже, все становиться более менее понятно.
Вот как я сделал:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>
#include <math.h>
#include "nrf24l01.h"
#include "lcd_func.h"
 
void ptx(void) // Вот функция ножкодрыга для отправки пакета.
{
    ClearBit(SPI_PORT,CE);
    reg_write(CONFIG,(1<<PWR_UP)|(1<<EN_CRC)|(0<<PRIM_RX));
    SetBit(SPI_PORT,CE);
    _delay_us(15);
    ClearBit(SPI_PORT,CE);
    _delay_us(135);
}
 
void send_byte(unsigned char a)//отправка байта.
{
    reg_write(W_TX_PAYLOAD,a);//запись байта в буфер TX для отправки
    ptx();//передача байта
    _delay_ms(500); // Это просто задержка чтобы не мудить там с ножкой IRQ и тп.
    unsigned char b=reg_read(STATUS);
    lcd_integer(b); //Здесь я читаю регистр статус выводит 30, то есть превышено число попыток передачи бит выставляеться.
    
    reg_write(STATUS, b);
    
    b=reg_read(STATUS);
    
    lcd_integer(b); //Это чтобы убедиться что сброс регистра работает, он работает.
    
}
 
int main(void)
{
_delay_ms(500);
 
lcd_init();
spi_init();
 
reg_write(0x11,1); //Это настройка размера канала передачи RX_PW_P0, то есть по одному байту передаю.
 
send_byte(0x15); // Вот она собственно передача
 
 
 
 
while(1);
}
Кстати как я понял все это передается по каналу передачи 0. адрес которого по умолчанию 0xE7E7E7E7E7.
И в регистре адреса передатчика, который содержит адрес приемника по умолчанию тоже 0xE7E7E7E7E7.
то есть стоит мне активировать канал передачи 0, настроить частоту передачи на обоих nrf, настроить буфер передачи и все можно передавать?
0
Модератор
Эксперт по электронике
8274 / 6133 / 822
Регистрация: 14.02.2011
Сообщений: 21,327
26.09.2018, 08:33 7
Цитата Сообщение от Vadimm1001 Посмотреть сообщение
настроить частоту передачи на обоих nrf, настроить буфер передачи и все можно передавать?
можно, но по уставу не положено доверять, что что-то настроено по умолчанию я бы не стал
могу вечерком скинуть свою настройку приемника, но я писал для STM, и передатчик у меня был "фирменный" , т. е я его не делал
1
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 73
27.09.2018, 17:18  [ТС] 8
ValeryS, все понял, пакет передал. Не могли бы вы помощь с расширителем PCF8574 тот что для lcd lm1602 и тп.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main(void)
{
    TWBR=2;
_delay_ms(500);
lcd_init();
 
 
 
 
TWCR|=(1<<TWSTA)|(1<<TWEN)|(1<<TWINT);
 
while(BitIsClear(TWCR, TWINT));
 
TWDR=0x40;// Это адрес микросхемы, которая на плате, 
 
TWCR=(1<<TWEN)|(1<<TWINT);
 
while(BitIsClear(TWCR, TWINT));
 
lcd_integer(TWSR); // Выводит 0x20, то есть ведомый не ответил.
 
 
while(1);
}
0
1799 / 1129 / 109
Регистрация: 04.01.2010
Сообщений: 3,983
02.10.2018, 12:38 9
Цитата Сообщение от Vadimm1001 Посмотреть сообщение
расширителем PCF8574
звучит "бодряще". Посмотрев идею - я конечно понимаю, что на сегодня многие пользуются подобной лабудой, но просто имея в руках чуть более быстрый SPI, можно использовать вместо нее логику типа 595й. Эти шифтеры просто созданы для таких задач, и работают наверное, в сотню раз быстрее, из-за разницы скоростей SPI и I2C. Что правда, по схеме они "стоят" на одну ножку дороже.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2018, 12:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как правильно организовать передачу данных между компонентами для формы
Приветствую, у меня вопрос скорее к подходу. Дано компонент с формой, где много различных полей....

Организовать передачу данных на основе WM_COPYDATA
Две программы, client и transfer. С сервера передается сообщение на клиент. Как модернизировать,...

Посредством чего организовать передачу данных из одного приложения в другое
С другом придумали что-то вроде игры: один пишет программу которая запрашивает пароль(замок),...

Как организовать передачу пакетов
Здравствуйте. Есть такой вопрос. По каким критериям вы посылаете пакеты с командами и ведете их...

Как организовать передачу на вал 6000 об/мин?
Добрый день! Собственно вопрос: имеется коллекторник 24 В, к нему присоединен (соосно) вал, который...

Как организовать передачу файлов в клиент-сервере
Как организовать передачу файлов(как тестовых так и нет) в клиент-сервере(TCP)? Сам клиент-сервер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.