Microsd reader + nrf24l01

Тема в разделе "Arduino & Shields", создана пользователем Den00, 12 сен 2020.

  1. Den00

    Den00 Нуб

    Всем привет, возникла проблема с конфликтом модуля чтения/записи на микро сд и радио передатчиком. (arduino mega) Выяснил, что если не подавать на ридер питание, радио модуль исправно работает. Как только пытаюсь запустить их вместе - ридер работает, nrf24 говорит что не подключён. Пробовал отключать пин управления у ридера, но это не помогло.
     
  2. Un_ka

    Un_ka Гик

    Код дайте, вставленный
    Код (C++):
    вот так
    Скорее всего надо указать разные пины ce.
     
  3. Den00

    Den00 Нуб

    Код (C++):
    #include <Wire.h>
    #include <SD.h>
    #include "nRF24L01.h"
    #include "RF24.h"

    #define SD_CS_PIN 4
    #define RF24_CS_PIN 9

    RF24 radio(RF24_CS_PIN, 53);

    const uint8_t num_channels = 128;
    uint8_t values[num_channels];

    void setup() {
      Serial.begin(9600);
      Wire.begin();

      initSD();
      initNRF();
    }

    void loop(void)
    {
      testNRF();
    }

    const int num_reps = 100;
    void testNRF() {
      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(128);
          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");
    }

    void initNRF() {

      Serial.println("Инициализация nRF24L01...");

      printf_begin();
      radio.begin();

      radio.setChannel(0x76);
      radio.setPALevel(RF24_PA_MAX);
      radio.enableDynamicPayloads();

      radio.setAutoAck(false);
      radio.startListening();

      radio.printDetails();  // Вот эта строка напечатает нам что-то, если все правильно соединили.
      delay(5000);              // И посмотрим на это пять секунд.

      radio.stopListening();
      int i = 0;    // А это напечатает нам заголовки всех 127 каналов
      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");
    }

    int serial_putc( char c, FILE * ) {
      Serial.write( c );
      return c;
    }

    void printf_begin(void) {
      fdevopen( &serial_putc, 0 );
    }

    bool initSD() {
      Serial.println("Инициализация SD карты...");
      pinMode(SD_CS_PIN, OUTPUT);

      if (!SD.begin(SD_CS_PIN)) {
        Serial.println("Ошибка инициализации SD карты");
        return false;
      }
      Serial.println("SD карта инициализирована");
      return true;
    }

    void WriteInFile(String fileName, String info) {
      File file = SD.open(fileName, FILE_WRITE);
      if (!file) {
        Serial.println(" Ошибка открытия файла " + fileName);
        return;
      }
      file.println(info);
      file.close();
    }
     
  4. Den00

    Den00 Нуб

    Сериал порт выдаёт вот такую петрушку
    upload_2020-9-12_20-37-58.png
     
  5. Un_ka

    Un_ka Гик

    Зачем подключаете библиотеку wire если нужна SPI?
     
  6. parovoZZ

    parovoZZ Гуру

    была информация, что какие-то кардридеры не отпускали толи MISO, толи MOSI.
     
  7. Den00

    Den00 Нуб

    Как в данном случае использовать SPI?
     
  8. Un_ka

    Un_ka Гик

    И что с этим делать? Диоды ставить?
    Код (C++):
    #include<SPI.h>
     
  9. Den00

    Den00 Нуб

    Библиотеку я то подключил, но ведь нужно что то сделать помимо? Если нет то проблема осталась.
     
  10. Den00

    Den00 Нуб

    Выяснил, что с кардридера с MISO выходит постоянно 3.5В.
    Если отпаять этот контакт, радио модуль подключается и работает.
     
  11. parovoZZ

    parovoZZ Гуру

    резисторы. Диоды не спасут.

    не парься - библиотека сама всё делает.
     
  12. Den00

    Den00 Нуб

    Библиотека к сожалению не справилась, всё также как и было.
     
  13. parovoZZ

    parovoZZ Гуру

    С ЧЕМ??? Библиотека для nRF абсолютно рабочая. Проверено неоднократно. Другое дело, что она не реализует все возможности nRF. Но это проблема всех дурино библиотек.
    Библиотека для SD тоже, видимо, абсолютно рабочая, т.к. в тырнетах нет вопросов касательно её работоспособности.
     
  14. issaom

    issaom Гуру

    Библиотеки не предполагают, что вы кучу всего запихаете на одну шину - а иногда и железо тоже. (видел тут дисплей на ютубе с притянутым к земле пином CS - его полюбасу уже не повесить на SPI больше ни с чем)
     
  15. Den00

    Den00 Нуб

    Я говорю о том, что проблема осталась. Значит причина в чём то другом.
     
  16. parovoZZ

    parovoZZ Гуру

    Так вроде же выяснили, в чём проблема:
    Бибилотеки здесь причём, если проблема аппаратная?
     
  17. Den00

    Den00 Нуб

    С кардридером работаю впервые, не знаю является ли это нормой для модуля.
    Получается по порту miso он заглушает всё что идёт с nrf.