ЭЛЕКТРОНИКА Не получается подключить Arduino Pro micro к NRF24l01

Pavel-programmer

✩✩✩✩✩✩✩
8 Янв 2024
3
0
Доброго времени суток! Я столкнулся с проблемой, над которой бьюсь все новогодние праздники, но так и не смог ее решить(. Имеется Arduino Pro micro(5V), к ней подключаю стабилизатор напряжения и сам модуль NRF24l01. Сразу скажу что модули отлично работают на ардуино UNO, но при подключении к микро не определяются вовсе, в мониторе вижу либо одни нули, либо 4444 либо рандомные буквы и цифры наперебой(. перепаял питание и теперь питаю NRF24l01 от лабораторного блока питания 5В(питаю именно стабилизатор). пробовал также припаивать конденсаторы(керамический и электролитический) бестолку, пробовал менять питание от UNO, но это тоже не помогло. схема подключения у меня вот такая(только контакт IRO не подключён). есть подозрения в том, что работает некорректно из за отображения в IDE как леонардо, кто ни будь сталкивался с этим, как влияет ли это на работу? Так же не раз проверял контакты, всё припаяно правильно(прозванивал мультиметром соединения модуля и платы питания, а также ардуины и платы питания(кстати ее менял на заведомо рабочую)), менял пины в прошивке RF24 radio(9, 10) либо RF24 radio(10, 9) всё равно бесполезно. Использую палату Arduino Pro micro только потому, как она определяется пк как джойстик и можно тренироваться управлением квадрокоптером либо самолётом(кстати с этим плата отлично справляется). Жду вашей помощи, если уж я и вправду всё перепробовал и других вариантов нет, придётся всё перепаивать и собирать RC пульт на Arduino nano. но это микроконтроллер не влезает в корпус, поэтому придётся создавать новый пульт... короче мне гораздо проще разобраться что не так с pro micro чем заново заниматься посторйкой пульта. Ниже прикреплён скетч и фото как это выглядит3.jpg2.jpgth.jpg
C++:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
RF24 radio(10, 9); //Arduino UNO
const uint8_t num_channels = 128;
uint8_t values[num_channels];
void setup(void)
{
  Serial.begin(9600);
  Serial.println("Scanner Air On");
  printf_begin();
  radio.begin();
  radio.setAutoAck(false);
  radio.startListening();
  delay(5000);             
  radio.printDetails(); 
  int i = 0;
  while ( i < num_channels )
  {
    printf("%x", i >> 4);
    ++i;
  }
  printf("\n\r");
  i = 0;
  while ( i < num_channels )
  {
    printf("%x", i & 0xf);
    ++i;
  }
  printf("\n\r");
}
const int num_reps = 100;

void loop(void)
{
  memset(values, 0, sizeof(values));
  int rep_counter = num_reps;
  while (rep_counter--)
  {
    int i = num_channels;
    while (i--)
    {
      radio.setChannel(i);
      radio.startListening();
      delayMicroseconds(512);
      radio.stopListening();
      if ( radio.testCarrier() )
        ++values[i];
    }
  }
  int i = 0;
  while ( i < num_channels )
  {
    printf("%x", min(0xf, values[i] & 0xf));
    ++i;
  }
  printf("\n\r");
}
 

Вложения

Изменено:

Pavel-programmer

✩✩✩✩✩✩✩
8 Янв 2024
3
0
@PiratFox, на плату питания(ниже ее фото) для NRF24l01 подаю 5В, она их превращает в 3.3 вольта и питает саму NRF24l01.4.jpg
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
@Pavel-programmer, с этим понятно. А вы учли тот момент, что пины SPI (MOSI, MISO, Clk) у контроллеров 32U4 и 328 висят на разных портах и не совпадают?
P.S. Вообще-то нужно приводить нормальную схему, а не какие-то картинки, по которым мало что можно понять.
 

Pavel-programmer

✩✩✩✩✩✩✩
8 Янв 2024
3
0
@PiratFox,Да, этот момент был учтён, подключение проводов соответствует схеме платы(фото1) и схеме подключения(2фото).
SCL - 15 pin
MISO - 14 pin
MOSI - 16 pin
CSN - 10 pin
CE - 9 pin
Есть ли такая вероятность, что контакты SCL, MISO, MOSI не корректно работают?
Как проверить их работу ?
5.png6.jpg
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
Как проверить их работу ?
Прежде всего нужно убедиться в правильности и надёжности соединений между платами ардуино и нрф. Перепутать пару проводов очень легко, поэтому лучше лишний раз перепроверить. Если есть подозрение, что вы могли как-то повредить эти пины, то проверить их работоспособность можно осциллографом. При его отсутствии можно залить скетч-моргалку Blink с задействованием этих пинов и проверить моргание на них светодиодом.
Если пины окажутся исправными, то возможно, что причина может быть в библиотеке SPI.h. Лично я не работал с МК 32U4, но при такой проблеме действовал бы именно так.
 
Изменено:
  • Лойс +1
Реакции: Pavel-programmer