Всем привет, возникла проблема с конфликтом модуля чтения/записи на микро сд и радио передатчиком. (arduino mega) Выяснил, что если не подавать на ридер питание, радио модуль исправно работает. Как только пытаюсь запустить их вместе - ридер работает, nrf24 говорит что не подключён. Пробовал отключать пин управления у ридера, но это не помогло.
Код (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(); }
Выяснил, что с кардридера с MISO выходит постоянно 3.5В. Если отпаять этот контакт, радио модуль подключается и работает.
С ЧЕМ??? Библиотека для nRF абсолютно рабочая. Проверено неоднократно. Другое дело, что она не реализует все возможности nRF. Но это проблема всех дурино библиотек. Библиотека для SD тоже, видимо, абсолютно рабочая, т.к. в тырнетах нет вопросов касательно её работоспособности.
Библиотеки не предполагают, что вы кучу всего запихаете на одну шину - а иногда и железо тоже. (видел тут дисплей на ютубе с притянутым к земле пином CS - его полюбасу уже не повесить на SPI больше ни с чем)
С кардридером работаю впервые, не знаю является ли это нормой для модуля. Получается по порту miso он заглушает всё что идёт с nrf.
В общем попробовал заменить модуль, всё перепаял, проверил подключение - верно, но в итоге всё тоже самое, те же четвёрки даже если не подключать сам nrf. Теперь даже не знаю что делать..