roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 04:05

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Сеть на модулях NRF24L01
СообщениеДобавлено: 02 окт 2019, 14:39 
Не в сети
Аватара пользователя

Зарегистрирован: 22 июл 2006, 18:57
Сообщения: 206
Откуда: Москва
прог. языки: Delphi, С/С++, Python
ФИО: Илья Андреевич
Всем привет! Есть у меня некоторое количество устройств на базе Arduino Nano с радиомодулями NRF24L01, все модули одинаковые, но у одного из них есть карта памяти (соответственно переключателем его назначаю функцию Master. Количество модулей может меняться, поэтому так же переключателями назначаю им канал. Все модули оснащены 3 типами датчиков и собирают информацию в собственную память, через заданные промежутки времени Master опрашивает все модули по очереди и они отправляют ему собранные показатели с датчиков и Master записывает их на карту памяти в соответствующий текстовый файл. Прошивку пишу универсальную для всех модулей, т.к. отличие между Master и Slave всего в паре функций, ну и потому что количество модулей может быть большим (проект не мой, я там делаю только железо, так что возможно количество модулей может разростись вплоть до 125 как по даташиту, кто ж знает заранее...).

Собственно вопрос: есть ли у радиомодулей NRF или Arduino Nano (хотя про ардуину сильно сомневаюсь) какой-либо идентификатор, жетско зашитый в чип (что-то вроде MAC-адреса), что бы не задавать всем модулям ID вручную, а использовать собственный жесткий идентификатор. В даташите встречал параметр self.addr но видел так же что он может задаваться вручную... Буду рад любым пинкам в нужную сторону. Спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сеть на модулях NRF24L01
СообщениеДобавлено: 08 окт 2019, 13:23 
Не в сети
Аватара пользователя

Зарегистрирован: 22 июл 2006, 18:57
Сообщения: 206
Откуда: Москва
прог. языки: Delphi, С/С++, Python
ФИО: Илья Андреевич
Понятно, пожалуй лучшим вариантом будет при первом запуске программы генерировать некий ID и записывать его в EEPROM, а потом просто считывать. Тогда задам следующий вопрос.
Есть 6 переключателей которые естественно через подтягивающие резисторы подключены к аналоговым и цифровым портам. Положение выключатей соответствует "1" или "0". Как мне собрать эти переменные типа int в одно двоичное число вида примерно "100101", что бы потом преобразовать его в десятичное (типа int)? Это нужно для определения канала связи, по которому модули будут общаться друг с другом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сеть на модулях NRF24L01
СообщениеДобавлено: 08 окт 2019, 15:26 
Не в сети

Зарегистрирован: 06 сен 2019, 12:00
Сообщения: 56
total = digitalRead(CHSW1) + digitalRead(CHSW2) * 2 + digitalRead(CHSW3) * 4 + ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сеть на модулях NRF24L01
СообщениеДобавлено: 08 окт 2019, 17:16 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
https://catonmat.net/low-level-bit-hacks, https://www.embeddedrelated.com/showcode/315.php
можно в класс обвернуть. ещё есть битовые поля и объединения, доустим так:
Код:

void setup()
{
  Serial.begin(115200);
}

typedef struct
{
  uint8_t b1 : 1;
  uint8_t b2 : 1;
  uint8_t b3 : 1;
  uint8_t b4 : 1;
  uint8_t b58 : 4;
} AdressBitStruct;

union AdressType
{
  uint8_t asByte;
  AdressBitStruct asBitField;
};

AdressType adress;

void loop()
{
  adress.asByte = 0;
  Serial.println(adress.asByte);
 
  adress.asBitField.b1 = 1;
  Serial.println(adress.asByte);
 
  adress.asBitField.b1 = 0;
  adress.asBitField.b2 = 1;
  Serial.println(adress.asByte);
 
  adress.asBitField.b1 = 1;
  Serial.println(adress.asByte);

  adress.asBitField.b3 = 1;
  Serial.println(adress.asByte);
 
  adress.asBitField.b4 = 1;
  Serial.println(adress.asByte);

  Serial.println("");
  Serial.println("");
  Serial.println("");

  adress.asBitField.b58 = 1;
  Serial.println(adress.asBitField.b58);
  Serial.println(adress.asByte);
  Serial.println("");

  adress.asBitField.b58++;
  Serial.println(adress.asBitField.b58);
  Serial.println(adress.asByte);
  Serial.println("");

  adress.asBitField.b58 = 0xf;
  Serial.println(adress.asBitField.b58);
  Serial.println(adress.asByte);

  while(true);
}

вывод:
Цитата:
0
1
2
3
7
15



1
31

2
47

15
255

структуру можно внутри объединения сделать. или вместо юниона сделать через указатель.



Цитата:
количество модулей может разростись вплоть до 125 как по даташиту

такого в даташите нет даже близко. не до 125, а до 126 ("задача про фонарные столбы"). и не модулей, а частотных каналов. количество каналов с количеством модулей никак не связано, от слова совсем. использование нескольких частотных каналов иногда полезно, но в данном случае без дополнительного обоснования эта затея выглядит крайне сомнительной.
при передаче в пакета есть поле адреса, это поле может быть от трёх до пяти байт. 5 байт это мягко говоря громадное количество адресов, в данном случае с ушами даже трёх байт хватит. даже если бы было сильно меньше, это не означает, что нельзя адресовать больше модулей. можно, вариантов много. допустим используя адрес не как адрес модуля, а как адрес сети и дополнительно передавать адрес устройства.
на один модуль можно и более одного адреса выделять. допустим, что бы выделить несколько бит или байт на указание сервиса, функции,...
создавать свой велосипед, когда полно готовых проектов/библиотек/..., затея сомнительная. это если попутно не ставится цель "прокачать навыки" или что-то глубже изучить.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO