смена пинов

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

Добрый всем день
у меня есть модуль nrf24l01 и модуль w5100 (не шилд)
я хочу подключить их к UNO. проблема заключается в пинах для подключения
по стандартной схеме подключения они имеют общие пины. вопрос:
в каком месте мне нужно изменить настройки, чтобы я мог их в "нестандартные" пины подключить
 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ни в каком - они вполне подключатся вместе к одним и тем же пинам SPI. CS только каждому свой сделайте (там любой пин можно использовать).

А за дублирование сообщений здесь банят. Не хамите с первого дня регистрации.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

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

пошёл изучать данный вопрос, спасибо

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

я сейчас про spi почитал немного. есть вопрос. данный интерфейс работает как переключатель между необходимыми устройствами. если мне нужна постоянная работа одного устройства (w5100 используется как "сервер"), то spi всё ещё остается актуальным? либо работа данных устройств будет только тогда, когда именно к ним идёт обращение? 

sadman41
Offline
Зарегистрирован: 19.10.2016

W5100 - достаточно автономное устройство и постоянное вмешательство со стороны МК не требуется.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

можно какой-нибудь совет, как это всё подключить к uno (общие пины d10-d13)? на всех сайтах лишь теория и картинки, аля "схема как работает SPI".

не могу нигде даже примерный код и схемы подключения найти

sadman41
Offline
Зарегистрирован: 19.10.2016

CLK, MISO, MOSI модулей и Arduino - параллельно, CS каждого модуля на разные пины Arduino. При инициализации объектов библиотек для модулей - соответственно указать пины, куда присоединены CS-ы.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

у данной платы два CS-а, если я всё правильно понимаю. и у шилда один, который подключен к 10-ому пину. я могу просто сместить пин для шилда, условно на 8-ой, остальные подключить параллельно? и всё?

sadman41
Offline
Зарегистрирован: 19.10.2016

2 CS-a я не вижу, но в целом - так.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

CE, CSN и CS это вроде одно и то же. исходя из данных на этом сайте

sadman41
Offline
Зарегистрирован: 19.10.2016

CE (Chip Enable) is an active-HIGH pin. When selected the nRF24L01 will either transmit or receive, depending upon which mode it is currently in.

CSN (Chip Select Not) is an active-LOW pin and is normally kept HIGH. When this pin goes low, the nRF24L01 begins listening on its SPI port for data and processes it accordingly.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

извиняюсь за свою тупость. собрал всё на макетной плате. объединил скетчи. я просто не понимаю, как я должен обозначить SS для двух разных устройств, так, чтобы они понимали, как они должны работать, независимо друг от друга

на данный момент у меня работает сервер, но не работает передача данных на приёмник

sadman41
Offline
Зарегистрирован: 19.10.2016

А как сейчас они обозначены?

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно

Ethernet.init(8);

вот так

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

pavlikk070599 пишет:

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

Вы не не понимаете, а боитесь. Не бойтесь.

Работают устройства независимо от пина SS. Пин SS отвечает не за их работу, а за их связь с Вашим контроллером.

Вам тут уже подсказали, что пин SS - "active LOW". В переводе на русский это означает, что если Вы подали LOW на пин SS некоторого устройства, то оно слушает пины MOSI/MISO/SCK и принимает Ваши команды / отвечает на них. Если же Вы подали HIGH на пин SS этого устройства, то оно плюёт с высоты своего величия на все Ваши потуги что-то делать с пинами MOSI/MISO/SCK.

Понятно, как с ними работать?

Держите все SS в состоянии HIGH. Когда надо какому-то устройству передать данные, переводите его SS в LOW и передайте (остальные устройства Вас не слышат). Закончили передавать, пин переставляете обратно в HIGH и оно теперь тоже Вас не слышит.

sadman41
Offline
Зарегистрирован: 19.10.2016

За NRF не знаю, а Ethernet v2.0 library манипулирует своим CS как полагается - перед обменом по SPI ложит, закончив - подымает. И переконфигурирует SPI на необходимую скорость (взад не возвращает, правда). Никаких дополнительных манипуляций не требуется.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

ЕвгенийП пишет:

pavlikk070599 пишет:

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

Вы не не понимаете, а боитесь. Не бойтесь.

 

нет, я правда не понимаю. в интернете нет особо примеров работы с этим (код)

у меня к 8 пину подключен SS шилда. к 9-ому SS нрф'а. ну а к 10 CSN нрф'а. 11,12,13 общие

если я хочу передать данные с помощью нрф, то я 8 пин должен перевести в LOW и передать данные. верно?

если же я хочу передать шилду, то аналогично с 9-м пином

10,11,12,13 я не трогаю, они не в моей власти

если я всё правильно понял, то можно мне ссылку/кусок кода(если не сложно), где собственно эти осуществляется работа с этим всем (абсолютно любой. я видел много примеров, где идёт работа с SPI с одним устройством, но не с двумя. поэтому и возникли сложности, ибо не на что ориентироваться)

sadman41
Offline
Зарегистрирован: 19.10.2016

Если с одним и тем же макетом работают по отдельности экзамплы из Ethernet и NRF, то в итоговом скетче нужно сделать так же - исключить по-очереди работу с тем и другим чипом. Коли раздельно все ОК, разбираться с совместимостью библиотек.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, понимаете, такой пример только специально писать. В реальной жизни это всё в разных файлах.

Ну, Вы с одним устройством умеете работать? Если нет, забудьте про несколько и научитесь с одним.

А если умеете, то остальное я Вам всё расписал ведь. Ну, куда ещё подробнее-то? Ну, чего там:

// Собираемся работать с устройством First
digitalWrite(pinSSFirst, LOW);
// ...
// работаем с устройством First
// ...
// закончили
digitalWrite(pinSSFirst, HIGH);
//...
// Теперь собираемся работать с устройством Second
digitalWrite(pinSSSecond, LOW);
// ...
// работаем с устройством Second
// ...
// закончили
digitalWrite(pinSSSecond, HIGH);

Попробуйте - не бойтесь.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

спасибо!

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

извиняюсь за некачественный код, чисто для пробы писал

при получении с сервера "1" должна происходить отправка напечатанной мной в порт цифры, но этого не происходит. не могу понять почему. приёмная часть работает исправно, каналы отправки без шумов и совпадают. 

где стрелочка - в тот момент напечатал число 55. в default он зашёл, но не передал. в чём может быть проблема? в том, как порты обозначил?

 if(newInfo == 1){                              //если есть новая информация
          Serial.println(c);
          if(c == '1'){                              //и "с" содержит 1
          Serial.println("ON");

if (Serial.available() > 0){
          
          digitalWrite(8, HIGH);
           digitalWrite(9, LOW);
  
          tra = Serial.parseInt();




  switch(tra){
  
  case 0: Serial.print(tra);   Serial.print("hiiiiiiiiii");        radio.write(&tra, sizeof(tra));  break;
  default: Serial.print(tra);    Serial.print("default");      radio.write(&tra, sizeof(tra));  break;
  //delay(100);
  }
}
          }
digitalWrite(9, HIGH); 

 

pavlikk070599
Offline
Зарегистрирован: 01.05.2020
// Pins for Eth + Nrf21
const int SS_nrf21 = 14;
const int SS_eth = 1;

 

// Pins for radio

const int rf_ce = 8;
const int rf_csn = 7;

 RF24 radio(rf_ce,rf_csn);
RF24Network network(radio);

// ...


void loop(void)
{
  digitalWrite(SS_eth, HIGH);
  digitalWrite(SS_nrf21, LOW);
  NRF21();
   
  digitalWrite(SS_eth, LOW);
  digitalWrite(SS_nrf21, HIGH);
  Eth();
}

перерыв весь интернет наткнулся на такой кусок кода. парень говорит, что у него всё работает. но я не могу понять его схему подключения. разве CE и SS у модуля NRF это не одно и то же?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

pavlikk070599 пишет:
разве CE и SS у модуля NRF это не одно и то же?
Ответ на этот вопрос был в посте #10. И не только на этот, а заодно и подробно расписано, что это за пины.

Т.е. люди пытаются Вам помочь, тратят своё время. а Вы даже не читаете, что они Вам пишут? Зачем читать, кода можно ещё 100500 раз спросить - ответят - куда нахрен денутся? Так?

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

нет, я читаю, в том то и дело. я понял про пины CE и CSN, но я до сих пор не могу понять где находится SS

или CE + CSN дают в сумме SS?

sadman41
Offline
Зарегистрирован: 19.10.2016

Что вы поняли про пины CE и CSN - перескажите своими словами.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

ce меняет режим прием-передача

csn - необходим для сеанса обмена по SPI, как я понял.

sadman41
Offline
Зарегистрирован: 19.10.2016

pavlikk070599 пишет:

csn - необходим для сеанса обмена по SPI, как я понял.


А CS (Chip Select) , он же SS (Slave Select) не для того же нужен?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

троллинг детектед !!!

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

#include <SPI.h>          // библиотека для работы с шиной SPI
#include "nRF24L01.h"     // библиотека радиомодуля
#include "RF24.h"         // ещё библиотека радиомодуля

RF24 radio(7,8); // "создать" модуль на пинах 9 и 10 Для Уно
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
byte counter;

void setup() {
  Serial.begin(9600); //открываем порт для связи с ПК

  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

  radio.openWritingPipe(address[0]);   //мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!

  radio.powerUp(); //начать работу
  radio.stopListening();  //не слушаем радиоэфир, мы передатчик


   digitalWrite(10,HIGH);
}

void loop() {
 
  if (Serial.available() > 0)
{
 
 counter = Serial.parseInt();
  switch(counter){
  case 0: Serial.print(counter, sizeof(counter)); radio.write(&counter, sizeof(counter));  break;
  default: Serial.print(counter, sizeof(counter));  radio.write(&counter, sizeof(counter));  break;
  }
}
}

убрал всю серверную часть. у нрф и 5100 общие пины 11,12,13

10 - ss шилда

7 - ce, 8 - csn нрф'a.

при выключенном шилде устройство передаёт данные на приёмник. при подаче питания на шилд перестает

что с этим можно сделать? спасибо

sadman41
Offline
Зарегистрирован: 19.10.2016

Как выглядит шилд?

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

уу меня вот такой модуль и такая схема подключения 

sadman41
Offline
Зарегистрирован: 19.10.2016

Нет, c W5100 Mini Red  проблем не было. Работает у меня в паре с MCP2515 по SPI.

Неисправные приходили с Али, но в этом случае вообще не работали, в принципе.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

ТС, послушай лекцию.
Когда поймёшь, как работает SPI , вопросы отпадут

https://youtu.be/85Lhi_824ks

inspiritus
Offline
Зарегистрирован: 17.12.2012

Там у W5100 где то была анонсирована проблема неотпускания miso 

по крайней мере на меге такой модуль и sd с буфером работают нормально, на дуе не хотят одновременно взлетать.

так пока не победил эту бяку.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

в целом w5100 работает 

1) тест работы nrf: 
а) если подключены и w5100 и nrf, то в порт отравляется ТОЛЬКО 1 команда, но не передаётся. далее, что бы я ни вводил, нигде не отображается
б) если подключен только nrf, то всё работает стабильно
в) если подключен nrf, команды отправляются. при подаче питания на w5100 отправляется ещё 1, но так же не передаётся команда и всё

2) тест работы w5100
а) если подключен только w5100, всё работает стабильно
б) если и w5100 и nrf, то тоже стабильно

прочитал про то, что на w5100 впаян резистор на 510 ом. у меня на 501, но особо разницы нет. нужно +- на 50 ом. я этот резистор не смогу перепаять) потому следует вопрос. лучше съездить купить что-нибудь аналогичное w5100? если да, то что именно? есть советы?

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

какой контроллер лучше поставить вместо W5100 Mini Red? и может ли быть именно в нём проблема? многие пишут про неотпускание miso. может ли w5100 съедать весь сигнал который я передаю каким-то образом?

sadman41
Offline
Зарегистрирован: 19.10.2016

pavlikk070599 пишет:

прочитал про то, что на w5100 впаян резистор на 510 ом. у меня на 501, но особо разницы нет. нужно +- на 50 ом. я этот резистор не смогу перепаять) потому следует вопрос. лучше съездить купить что-нибудь аналогичное w5100? если да, то что именно? есть советы?

Mini Red, похоже, де-факто не имеет проблем с резисторной сборкой (ни разу не читал об этом) - если так, то будете первым. А если бы и были, то проявляться должно было бы иначе.

Вобщем, тут макет надо собирать. Вождение вилами по воде не помогает. 

В качестве ещё одного теста я бы CS МиниРеда наглухо посадил на +5V и глянул - будет он NRF мешать или нет.

Ну и, финально, - а нет ли проблем по питанию? Всё же NRF жручая, W5100 тоже не миллиамперы потребляет...

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

sadman41 пишет:

pavlikk070599 пишет:

прочитал про то, что на w5100 впаян резистор на 510 ом. у меня на 501, но особо разницы нет. нужно +- на 50 ом. я этот резистор не смогу перепаять) потому следует вопрос. лучше съездить купить что-нибудь аналогичное w5100? если да, то что именно? есть советы?

В качестве ещё одного теста я бы CS МиниРеда наглухо посадил на +5V и глянул - будет он NRF мешать или нет.

Ну и, финально, - а нет ли проблем по питанию? Всё же NRF жручая, W5100 тоже не миллиамперы потребляет...

 

я собираю всё на макетной плате, не знаю, есть ли разница какая. если я всё правильно понял, то CS МиниРеда я посадил на 5V с выключенным w5100 всё работало нормально. при подаче питания проблема та же. в порт кроме одной команды ничего не отправляется (по крайней мере не выводится, как должно)

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, какие проблемы могут быть... Не хватает, просаживается, NRF24 ребутится и сбрасывает конфиг. После этого работать не будет. Там надо конденсаторы ёмкие около NRF ставить что ли... У меня на шилде уже специально под NRF и свой стаб и кондёр, поэтому особых проблем не испытываю:

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

у меня такой адаптер стоит к нрф прикреплен, если Вы про это

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, вобщем, у меня только один совет остался - проверить по питанию. БП помощнее подключить или конденсатор добавить NRF-ке.

Остальное без физического макета не проверить.

pavlikk070599
Offline
Зарегистрирован: 01.05.2020

проблема всё же была в скетче. точней в библиотеке. точней в чём-то непонятном для меня. перешёл плавно на мирф. пытаюсь разобраться