тинси 3.2; Беспроводное аудио 4.0 nRF24L01 — задержка увеличивается со временем

Сначала задержки почти нет(между ними), через несколько минут появляется задержка около 1 сек. Случайно отключился SCK nRF24L01(передатчик), подключил обратно и задержка исчезла(исправлена ) а потом через несколько минут он появился снова. Отключил и снова подключил SCK от ресивера, задержка осталась прежней. Пробовал обе платы на процессоре 24 МГц, без изменений.

    //Teensy 3.2 @ 120Mhz - передатчик

#include <Audio.h>

#include <Wire.h>

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

#define audiobuffersize 128 // один блок в аудиобиблиотеке имеет 128 значений по 2 байта

byte ControlBuffer[8];

RF24 radio(10, 5, 10000000); // Teensy 3.6 контакт 21=CE, Teensy 3.6 контакт 15=CSN

const byte pipeaddress[2][5] = {
    {'1','N','O','D','E'},
    {'2','N','O','D','E'}
};

elapsedMillis millisec;

// GUItool: начать автоматически сгенерированный код
AudioInputI2S i2s1; //ху=385,302
AudioOutputUSB usb1; //ху=592 281
AudioRecordQueue queue1; //ху=597 346
AudioConnection patchCord1(i2s1, 0, usb1, 0);
AudioConnection patchCord2(i2s1, 0, queue1, 0);
AudioConnection patchCord3(i2s1, 1, usb1, 1);
AudioControlSGTL5000 sgtl5000_1; //ху=502 443
// GUItool: завершить автоматически сгенерированный код
//const int myInput = AUDIO_INPUT_LINEIN;
const int myInput = AUDIO_INPUT_MIC;

uint8_t bufr[audiobuffersize * 2]; //буфер для хранения 256 байт аудиоданных
uint8_t errorcount; //счетчик ошибок для ошибок передачи nrf24

void setup() {
  //Серийный.начало(9600);
  //Serial.println("Запустить передатчик");
  AudioMemory(100); // даем аудиобиблиотеке немного памяти для работы
  sgtl5000_1.enable();
  sgtl5000_1.inputSelect(myInput);
  sgtl5000_1.volume(0.5);
  sgtl5000_1.micGain(30.3);
  sgtl5000_1.adcHighPassFilterDisable();

  errorcount = 0;
  AudioMemory(100); // даем аудиобиблиотеке немного памяти для работы

  Serial.begin(36000);

  // использовать альтернативные выводы SPI для nrf24
  SPI.setMOSI(7);
  SPI.setMISO(8);
  SPI.setSCK(14);
  SPI.begin();

  delay(100);

  radio.begin();
  //radio.setPayloadSize(32); //это максимальный размер полезной нагрузки для передачи пакета nrf24
  radio.setAutoAck(false); // нет подтверждения
  //radio.enableDynamicPayloads();
  //радио.setRetries(0,0);
  //радио.disableCRC(); // нет CRC
  //радио.setCRCLength(RF24_CRC_8); // Используйте только 8-битный CRC для аудио из: https://github.com/nRF24/RF24Audio/blob/master/examples/USB_Audio/USB_Audio.ino
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_2MBPS);
  //радио.setChannel(121);
  delay(50);

  radio.openWritingPipe(pipeaddress[0]);
  radio.stopListening(); // переходим в режим передачи
  delay(100);

  queue1.begin();
}

void loop() {
  if (queue1.available()) {
    memcpy(bufr, queue1.readBuffer(), audiobuffersize * 2); // копируем 256-байтовые аудиоданные из буфера аудиобиблиотеки в bufr
    queue1.freeBuffer();

    // отправляем аудиоданные в 8 пакетах по 32 байта в буферы FIFO
    for (int i = 0; i < 8; i++) {
      if (!radio.writeFast( & bufr[i * 32], 32)) errorcount++;
    }
    if (errorcount > 0) {
      //Serial.print("Ошибки: ");
      //Serial.println(счетчик ошибок);
      errorcount = 0;
    }
  }
}

    //Teensy 4.0@24 МГц (приемник)

#include <Audio.h>

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

#define audiobuffersize 128 // один блок в аудиобиблиотеке имеет 128 значений по 2 байта

RF24 radio(7, 8, 10000000); // Teensy 3.6 контакт 21=CE, Teensy 3.6 контакт 15=CSN

const byte pipeaddress[2][5] = {
    {'1','N','O','D','E'},
    {'2','N','O','D','E'}
};

// GUItool: начать автоматически сгенерированный код
AudioPlayQueue queue1; //ху=281 418
AudioOutputI2S i2s1; //ху=505 346
AudioOutputUSB usb1; //ху=508 445
AudioConnection patchCord1(queue1, 0, i2s1, 1);
AudioConnection patchCord2(queue1, 0, usb1, 0);
AudioConnection patchCord3(queue1, 0, usb1, 1);
// GUItool: завершить автоматически сгенерированный код

uint8_t bufr[audiobuffersize * 2]; //буфер для хранения 256 байт аудиоданных
uint8_t bufcount; //получил счетчик пакетов nrf24l01+
byte ControlBuffer[8];
uint8_t ZielPipe;

int i; //Прилавок
int k; //темп

void setup() {
  //Серийный.начало(9600);
  bufcount = 0;

  AudioMemory(200); // даем аудиобиблиотеке немного памяти для работы
  /*
  // использовать альтернативные выводы SPI для nrf24
  SPI.setMOSI(7);
  SPI.setMISO(8);
  SPI.setSCK(14);
  SPI.begin();
  */

  /*
  sine1.frequency(500);
  sine1.amplitude(0.3);
  */
  radio.begin();
  //radio.setPayloadSize(32); //это максимальный размер полезной нагрузки для передачи пакета nrf24
  radio.setAutoAck(false); //нет подтверждения (daca e aici true si dincolo false, nu merge
  //радио.enableAckPayload();
  //радио.setRetries(1,2);
  //радио.disableCRC(); // нет CRC
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_2MBPS);
  ///радио.setChannel(121);
  delay(100);

  radio.openReadingPipe(1, pipeaddress[0]);
  radio.openReadingPipe(2, pipeaddress[1]);
  delay(50);

  radio.startListening();
}

void loop() {
  if (radio.available()) {
    // получаем 8 пакетов аудиоданных размером 32 байта
    if ((bufcount >= 0) && (bufcount < 8)) {
      // получаем 32-байтовые данные аудиопакета
      radio.read( & bufr[bufcount * 32], 32);

      // проверить, все ли 8 пакетов получены
      if (bufcount == 7) {
        bufcount = 0;
        int16_t * p = queue1.getBuffer();
        memcpy(p, & bufr[0], (audiobuffersize * 2));
        queue1.playBuffer();
      } else bufcount++;
    }
  }
}

, 👍0

Обсуждение

Добавил переключатель в "radio.flush_tx();", сбрасывает задержку на "0", после чего проблема повторяется., @Radu