Форум Радиолюбителей

Птеродактиль трансивер (аналог+DDC)

1484506 просмотров, 2129 ответов — стр. 31 из 142

Игорь 2
Сообщений: 21288
26 января 2021 г. в 03:08#451
Да там везде тональник какой-то неправильный. И, конечно же, его нужно не на 2.8, а на килогерц ставить..
ra0ahcra0ahc
Сообщений: 4868
26 января 2021 г. в 03:23#452
На 1 кГц все нормально, меня смутил именно там, на 2.8кГц. ОН как промодулирован шумом.
Игорь 2
Сообщений: 21288
26 января 2021 г. в 04:43#453
Цитата: ra0ahc
ОН как промодулирован шумом.


Там реальная модуляция, сигнал не чистый, даже анализатором видно...

ra0ahcra0ahc
Сообщений: 4868
26 января 2021 г. в 05:55#454
Это работа шумодава))) он так работает
Вы как раз взяли участок где я включил шумодав.

(палка на которую вы показали - это палка от программатора адау....ну так, к слову)
Игорь 2
Сообщений: 21288
26 января 2021 г. в 06:14#455
Цитата: ra0ahc
это палка от программатора адау


Да то понятно. А с речью пробовали? Хотя, скорее всего, будет то же, что в любом звуковом редакторе, но, всё равно интересно...
ra0ahcra0ahc
Сообщений: 4868
26 января 2021 г. в 07:24#456
АЦП приехал, но еще не подключал.
Вожусь с программированием самого адау через стм
ra0ahcra0ahc
Сообщений: 4868
27 января 2021 г. в 09:33#457
Заработала шина SPI на скорости 24МВ\сек (максимум 21 по даташиту). Нужно убрать 2 (0ом) резистора на шине spi на корпус (плата от чип-дипа)

Ини spi заключается в трехкратном изменении состояния вывода SS.
Код: [Выделить]oid iniSPI_ADAU1467(void) {
uint8_t a = 0;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi3, (uint8_t *) &a, 1,50);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi3, (uint8_t *) &a, 1,50);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi3, (uint8_t *) &a, 1,50);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
HAL_Delay(10); // задержка обязательна , иначе будет звук как удар по барабану
}

Например включение шумодава с помощью переключателя выглядит так:
Код: [Выделить] uint8_t sw[] = {0x0, 0x03, 0x97, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi3, sw, 11, 50);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);

Что бы работал программатор, необходимо на MOSI шины SPI резистор на землю 13к прилепить. Это задает адрес I2C шины. Без него программатор не работает.


ra0ahcra0ahc
Сообщений: 4868
27 января 2021 г. в 09:58#458
Запустил SPI через ДМА для отправки данных.
Возня с кэшем покоя не дает.
Написал программку для отправки.

Помаленьку готовлюсь к отправке коэффициентов для FIR фильтра.

Код: [Выделить]void SPI_DMA_SEND_TO_ADAU1467_ARRAY(uint16_t adress, uint8_t *data, uint16_t lenth8){

lenth8+=3;
uint16_t x=0;
for(int i=3;i<lenth8;i++) {
dspSentToAdau[i]=data[x];
x++;
}

dspSentToAdau[0] =0;
dspSentToAdau[1] =adress>>8;
dspSentToAdau[2] =adress & 0xff;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
SCB_CleanDCache_by_Addr((uint32_t *) dspSentToAdau, lenth8);

HAL_SPI_Transmit_DMA(&hspi3, dspSentToAdau, lenth8);
}

void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);

}
ra0ahcra0ahc
Сообщений: 4868
28 января 2021 г. в 11:20#459
Оказывается, напрямик нельзя кидать данные в память адау. Он конечно работает, но через некоторое время возникает коллизия и узел зависает. Оказывается, адау имеет специальную функцию SafeLoad которая вставляет данные между сэмплами.
Смысл ее в том , что в определенном участке памяти есть участок 32 байта. Первые 5 слов (5*4байт) - это данные. Потом адрес куда закинуть эти данные и последние пара слов отвечают за количество слов от 1 до 5 и за разные страницы этой памяти. И адау сам кидает куда и как ему надо без коллизий.

Так вот, после записи данных через SafeLoad, выше описанного процесса вкл\выкл шумодава, за 40 минут ни одного сбоя. Работает и работает. А в прошлом варианте могло 1минуту отработать и сбой, а может 5 мин отработать и снова сбой и сбой был в любом случаи, вопрос через сколько минут.

0x6000 data_SafeLoad[0] Safeload Data Slot 0
0x6001 data_SafeLoad[1] Safeload Data Slot 1
0x6002 data_SafeLoad[2] Safeload Data Slot 2
0x6003 data_SafeLoad[3] Safeload Data Slot 3
0x6004 data_SafeLoad[4] Safeload Data Slot 4
0x6005 address_SafeLoad Target address for safeload transfer
0x6006 num_SafeLoad_Lower Number of words to write/safeload trigger if on Page 1 lower memory
0x6007 num_SafeLoad_Upper Number of words to write/safeload triggerif on Page 2 upper memory

Код: [Выделить]void SPI_DMA_SEND_TO_ADAU1467_SAFELOAD(uint16_t adress, uint8_t *data, uint8_t lenth32){

//5 слов максимум по 4 байта
uint8_t lenth=3+lenth32*4;
uint16_t x=0;
uint8_t * dd=(uint8_t *) data;

dspSentToAdau[0] =0;
dspSentToAdau[1] =0x6000>>8;
dspSentToAdau[2] =0x6000 & 0xff;

for(int i=lenth;i<32+3;i++) {
dspSentToAdau[i]=0x0;
}

for(int i=3;i<lenth;i++) {
dspSentToAdau[i]=dd[x];
x++;
}

//0x6005 address_SafeLoad Target address
dspSentToAdau[22+3]=adress>>8;
dspSentToAdau[23+3]=adress & 0xff;

dspSentToAdau[27+3]=lenth32; //0x6006 num_SafeLoad_Lower Number of words

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
SCB_CleanDCache_by_Addr((uint32_t *) dspSentToAdau, 32+3);
HAL_SPI_Transmit_DMA(&hspi3, dspSentToAdau, 32+3);
}

Relayer
Сообщений: 1006
28 января 2021 г. в 01:40#460
Я напрямую кидаю и ниче так - все работает без зависания SafeLoad неудобен тем что кидает только 5 слов и заточен под простые фильтры. Кроме этого один SafeLoad - один такт семплрейт. Если что большое им грузить - много времени может уйти. У меня чебышевы 20го порядка так там 50 коэффициентов надо грузануть. Я долго долбался с загрузкой чтобы минимизировать артефакты на выходе - пробовал стопить полностью дсп, но он почему-то стартует потом через раз. Вобщем пошел по самому простому пути - отключаю выход dac при загрузке.
ra0ahcra0ahc
Сообщений: 4868
28 января 2021 г. в 02:03#461
У меня чебышевы 20го порядка так там 50 коэффициентов надо грузануть.
А их можно как то посчитать , что б не грузить таблицами память?

Я напрямую кидаю и ниче так - все работает без зависания
один раз пролезит. Я тоже на 1701 кидал и не парился и тоже выход глушил. Но вот в цикле вылазит такая фигня иногда. А если она вылезла один раз, то вылезет и в другой. Как раз фильтрами сейчас и занимаюсь
Relayer
Сообщений: 1006
28 января 2021 г. в 02:40#462
А их можно как то посчитать , что б не грузить таблицами память?
Ну наверное можно. Только инфы нет от адау что они там считают. Я просто написал прожку которая выковыривает коэффициенты из экспорта и формирует массив. И сгенерировал что мне нужно с шагом
ra0ahcra0ahc
Сообщений: 4868
28 января 2021 г. в 04:58#463
Алгоритм загрузки через SafeLoad уже несколько часов работает.
Смена переключателя каждые 2 секунды.
1767 и ЦАП потребляют 650ма
ra0ahcra0ahc
Сообщений: 4868
29 января 2021 г. в 11:44#464
Запустил управление фильтром. Эти "красавчики" умудрились в адресах все перепутать. Теперь почему-то адреса идут не последовательно

const uint8_t dsp_adr_lpf[] = //фнч cheb2-20-90 адреса НЕ ПОСЛЕДОВАТЕЛЬНЫЕ
{
2,
1,
0, // Первый адрес!!!!!
4,
3,
7,
6,
5,
9,
8,
12,
11,
10,
14,
13,
17,
Умники , просидел вчера весь вечер пока нашел эту хрень.
Зато теперь через SafeLoad грузится без артефактов и ресетов и глушений выхода.

Relayer
Сообщений: 1006
29 января 2021 г. в 11:51#465
Эти "красавчики" умудрились в адресах все перепутать. Теперь почему-то адреса идут не последовательно
Это где именно? В сгенерированном сигмастудией коде? Вроде всегда последовательно по адресам шли коэффициенты