SD card module + nRF24l01+

Тема в разделе "Arduino & Shields", создана пользователем AlexBklnv, 30 янв 2017.

  1. AlexBklnv

    AlexBklnv Нерд

    Доброго времени суток!
    Использую arduino nano.
    Провел кучу безуспешных попыток завести вот такой SD модуль
    http://iarduino.ru/shop/Expansion-p...botaet-s-oficialnymi-programmami-arduino.html
    И nRF24L01+ (подключенный через модуль питания, который шел с ним)
    По отдельности все работает замечательно, но если зацепить SD модуля miso/mosi, то происходит магия. И работает только SD модуль.
    У обоих модулей SS пин разный.
    Проводя эксперименты для выявления проблемы заметил еще одну штуку.
    Плата ардуины располагается на макетке. Располагал относительно проводов miso/mosi радиомодуля те же провода модуля карты. Если расположить ближе к пинам ардуино проводки от модуля карты, то в функции вывода информации о радиомодуле (radio.printDetails();) выводило все нули. Если перед то выводило магические числа. А если без проводов модуля карты то все норм.

    Не знаю есть ли прилагать код тк я взял рабочий код с примера для радиомодуля, и модуля карты и просто вписал под себя данные для теста.
    Собственно вопросы:
    1) Можно ли как то это все исправить?).
    2) Можно ли в качестве пинов miso/mosi назначить пины цифровые скажем 5 и 6 (в библиотеке SD.h в карте пинов видел что можно вроде как заменить пины но не помогло).

    Вот код приемника. Повторюсь, без SD модуля ног miso/mosi все работает.
    Код (C++):
    #include <SPI.h>
    #include <Wire.h>
    #include <SD.h>
    #include "nRF24L01.h"
    #include "RF24.h"

    RF24 radio(8, 9);
    const uint32_t pipe = 123456789;

    byte massiv[4];
    File file;
    void setup()
    {
      Serial.begin(9600);
      radio.begin();
      radio.setChannel(55);
      radio.setDataRate(RF24_1MBPS);
      radio.setPALevel(RF24_PA_MIN);
      radio.openReadingPipe(1, pipe);
      radio.startListening();
        if (!SD.begin()) {
        Serial.println("initialization failed!");
      } else {
        Serial.println("init!");
        file = SD.open("test.txt", FILE_WRITE);
        file.println(F("blablabla"));
        file.close();
      }
    }


    void loop()
    {
      if (radio.available())
      {
        radio.read(massiv, 1);
        Serial.println(massiv[0]);
      }
    }
    Так же пробывал через digitalWrite менять на LOW радиомодуль а карту на HIGH и наоборот. Безуспешно..
     
    Последнее редактирование: 30 янв 2017
  2. sslobodyan

    sslobodyan Гик

    Когда-то сталкивался с такими картами, которые не отпускают MISO. Попробуйте подключать этот вывод к дуньке не напрямую, а через резистор в 1-2 килоома.
     
    arkadyf и AlexBklnv нравится это.
  3. AlexBklnv

    AlexBklnv Нерд

    Огромное спасибо!!! Не знаю как выразить благодарность словами) Мучался часов 12
    Воткнул 1,2кОм на пути miso как вы и сказали и все заработало!
     
  4. sslobodyan

    sslobodyan Гик

    Рад помочь
     
  5. AlexBklnv

    AlexBklnv Нерд

    В общем перестало работать все с 1,2кОм через пару дней. Не знаю почему. Посоветовался с http://forum.amperka.ru/members/sslobodyan.10892/
    В итоге был поставлен на 750 оМ резистор вместо 1200 и все зажило прекрасно
     
    sslobodyan нравится это.
  6. ImrDuke

    ImrDuke Гик

    Такая же проблема. nRF работает, а SD-модуль не инициализируется.
    Резистор стоит 1 кОм
     
  7. parovoZZ

    parovoZZ Гуру

    если это 328 или что-то подобное, то модуль UART можно включить в режиме SPI. Как - читать даташит.
     
  8. ImrDuke

    ImrDuke Гик

    Node MCU
     
  9. parovoZZ

    parovoZZ Гуру

    Не тот раздел