тинси 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++;
}
}
}
@Radu, 👍0
Обсуждение0
Смотрите также:
- nRF24L01 +pa +lna link не связывается
- Есть ли подробные примеры Si4463?
- Команды библиотеки RF24, канал и адрес
- Как отправить данные датчика с Arduino через NRF24L01 на Raspberry Pi
- RaspberryPi Pico SPI и nrf24l01
- Проблема с NRF24L01
- SPI с преобразователем уровня на другом конце соединения
- STM32 и NRF отправка и получение
Добавил переключатель в "radio.flush_tx();", сбрасывает задержку на "0", после чего проблема повторяется., @Radu