Предварительный усилитель с микроконтроллерным управлением.

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение dt_andrew »

хорошо напишу инструкцию небольшую
а по компиляции я такую уже писал - ее тоже еще раз приложу
Ок
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Ок, спасибо. Очень жду (:
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение dt_andrew »

итак по балансу
вы правильно определили участок кода отвечающего за баланс

Код: Выделить всё

if (nmenu == 4)
{
  i2c_write(0x80 + p_tda[nmenu]);
  i2c_write(0xA0 + 16 - p_tda[nmenu]);
}
if (nmenu == 5)
{
  i2c_write(0xC0 + p_tda[nmenu]);
  i2c_write(0xE0 + 16 - p_tda[nmenu]);
}


для начала взглянем на даташит
Изображение
мы видим что за фронт левого канала отвечает код
i2c_write(0x80 + какае то число от 0x00 до 0x1E
за фронт правого канала аналогично
i2c_write(0xA0 + какае то число от 0x00 до 0x1E
(тыловому каналу все аналогично) только начальное число соответственно 0xC0 и 0xE0

по файлу preamp.h

мы видим что у нас 2 пункта меню отвечающего за это это

Код: Выделить всё

" Balans F    dB",
" Balans R    dB"

это соответствует nmenu == 4 (Balans F)
это соответствует nmenu == 5 (Balans R)
рассмотрим только по фронту когда nmenu == 4 (по тылы все аналогично)

за число которое прибавляется к основному числу это 2 последних элемента массива

Код: Выделить всё

signed char x[6][16] = { { -78,-65,-55,-45,-40,-35,-30,-25,-20,-17,-14,-11,-8,-5,-2,0 },
{ 0,0,0,0,6,6,6,6,12,12,12,12,18,18,18,18 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 },
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 } };

то есть
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 },
заметьте что значение в массиве как бы идут от центра только слева у нас с минусом а справа с плюсом
в центре 0

при регулировки параметра значение у нас меняется от 1 до 16, поэтому и будут перебераться значения от -17 до 20
при значении 8 мы получим из массива 0

Код: Выделить всё

i2c_write(0x80 + p_tda[nmenu]);
i2c_write(0xA0 + 16 - p_tda[nmenu]);


при движении ползунка влево или вправо у нас будет увеличиваться громкость в одном из каналов
i2c_write(0x80 + p_tda[nmenu]);
и уменьшаться в другом
i2c_write(0xA0 + 16 - p_tda[nmenu]);

если вам не надо этого то закоментируйте 2 строку


как я писал ранее не все так просто как может показаться

мы не сможем регулировать 2 параметра одновременно

можно пойти по двум путям или полностью перерабатывать код или менять значения в массиве с нашими потребностями

вот как то так

надеюсь понятно обьяснил

пробуйте компелите и проверяйте

с первого раза врятли без опыта получиться добиться того что вам надо

инструкцию по компеляции проекта прилагаю

и еще тихо может быть не только из за кода но и от источника звука
у меня такое было когда с плайера шел сигнал с очень низкой амплитудой

учитывайте это

удачи

отпишитесь что у вас получилось
Вложения
build.txt
(1.75 КБ) 258 скачиваний
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Просто поставить числа которые нужно неполучиться, поэтому пойдем по другому пути)
Если я закоментирую вторую строчку по по идее не будет легулироваться один канал вообще. В нашем случае правый.

А если в массив добавить регулировку отдельно по каждому каналу? Кстати микросхема ведь с помощью Attenuators также позволяет делаль регулировку баланса по фронту и тылу!

Код: Выделить всё

signed char x[8][16] = { { -78,-65,-55,-45,-40,-35,-30,-25,-20,-17,-14,-11,-8,-5,-2,0 },
{ 0,0,0,0,6,6,6,6,12,12,12,12,18,18,18,18 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -17,-15,-12,-10,-7,-5,-2,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,2,5,7,10,12,15,17,20 },
{ -17,-15,-12,-10,-7,-5,-2,0,0,0,0,0,0,0,0,0 },
{ 0,0,0,0,0,0,0,0,2,5,7,10,12,15,17,20 } };


Код: Выделить всё

if (nmenu == 4)
{
  i2c_write(0x80 + p_tda[4]);
  i2c_write(0xA0 + 16 - p_tda[5]);
}
if (nmenu == 5)
{
  i2c_write(0xC0 + p_tda[6]);
  i2c_write(0xE0 + 16 - p_tda[7]);
}


Так работать будет?) Надеюсь другие функции не привязаны к данным строкам в массиве.
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение dt_andrew »

помоему нет не будет

самый правильный и универсальный вариант но более сложный
такой

надо добавить еще 2 пункта меню

" Volume dB",
" Attens dB",
" Bass dB",
" Treble dB",
" Usilenie FL dB",
" Usilenie FR dB",
" Usilenie RL dB",
" Usilenie RR dB",

и регулировать все отдельно по тылу и фронту и по правому и левому каналу отдельно

тогда можно настроить громкость каждой колонки из 4 возможных индивидуально

но как сказал это требует более серьезной правки кода
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Никак немогу найти в коде, где можно изначально установить ползунок баланса в самое начало
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение dt_andrew »

а его там и нет

вернее сказать есть но
находится он в процедуре
Load_EEprom_Param(void)

все сначала считывается из ЕЕПРОМ
что было после выключения

если ЕЕПРОМ пустой тоесть включили первый раз

то вот эта строка

p_tda[n] = (n == 1) ? 1 : 8;

и определяет для всех пунктов первоночально = 1 а для баланса 8

вам надо очистить ЕЕПРОМ
а эту строку изменить на
p_tda[n] = 1;

или добавить такой код в процедуре main
p_tda[4] = 1;
p_tda[5] = 1;

но только после вызова функции
Load_EEprom_Param
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Проверяю в Proteus
EEPROM очищен
Заменил p_tda[n] = (n == 1) ? 1 : 8;
на p_tda[n] = 1;

Непомогло
Потом еще добавил в процедуру main
p_tda[4] = 1;
p_tda[5] = 1;

Ползунки всеравно посередине, может гдето еще есть подводный камень?

Добавлено....

Вставил в конец процедуры Load_EEprom_Param
p_tda[4] = 1;
p_tda[5] = 1;
Только потом стали ползунки вначало... Что еще может менять ихнее расположение?
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение dt_andrew »

может и стоит где - давно я не смотрел код по этому усилителю

поиском по p_tda[
гляньте
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Вообщем пока сделал так:
В файле preamp.c
Это:

Код: Выделить всё

for (n = 0; n < 6; n++)

Заменил на:

Код: Выделить всё

for (n = 0; n < 8; n++)


Это:

Код: Выделить всё

if ((reg == BALANS_F_MENU) || (reg == BALANS_R_MENU))

Заменил на:

Код: Выделить всё

if ((reg == BALANS_FL_MENU) || (reg == BALANS_FR_MENU) || (reg == BALANS_RL_MENU) || (reg == BALANS_RR_MENU))


Это:

Код: Выделить всё

if (nmenu == 4)
{
  i2c_write(0x80 + p_tda[nmenu]);
  i2c_write(0xA0 + 16 - p_tda[nmenu]);
}
if (nmenu == 5)
{
  i2c_write(0xC0 + p_tda[nmenu]);
  i2c_write(0xE0 + 16 - p_tda[nmenu]);
}

Заменил на:

Код: Выделить всё

if (nmenu == 4)
{
  i2c_write(0x80 + p_tda[nmenu]);
}
if (nmenu == 5)
{
  i2c_write(0xA0 + p_tda[nmenu]);
}
if (nmenu == 6)
{
  i2c_write(0xC0 + p_tda[nmenu]);
}
if (nmenu == 7)
{
  i2c_write(0xE0 + p_tda[nmenu]);
}


В файле preamp.h

Это:

Код: Выделить всё

#define MENU_MAX 5
#ifdef ENGLISH
unsigned char *mainmenu[] = {
" Volume      dB",
" Attens      dB",
" Bass        dB",
" Treble      dB",
" Balans F    dB",
" Balans R    dB"
};
#else
unsigned char *mainmenu[] = {
"ЎpoјєocїД    dB",
"©cё»eЅёe     dB",
"TeјІp(H«)    dB",
"TeјІp(B«)    dB",
" a»aЅc(Є)    dB",
" a»aЅc(T)    dB"
};
#endif
#define VOLUME_MENU   0
#define ATTENS_MENU   1
#define BASS_MENU     2
#define TREBLE_MENU   3
#define BALANS_F_MENU 4
#define BALANS_R_MENU 5


Заменил на:

Код: Выделить всё

#define MENU_MAX 7
#ifdef ENGLISH
unsigned char *mainmenu[] = {
" Volume      dB",
" Attens      dB",
" Bass        dB",
" Treble      dB",
" Balans FL   dB",
" Balans FR   dB",
" Balans RL   dB",
" Balans RR   dB"
};
#else
unsigned char *mainmenu[] = {
"¡po¼ºoc¿Ä    dB",
"©c¸»e½¸e     dB",
"Te¼²p(H«)    dB",
"Te¼²p(B«)    dB",
" a»a½c(FL)   dB",
" a»a½c(FR)   dB",
" a»a½c(RL)   dB",
" a»a½c(RR)   dB"
};
#endif
#define VOLUME_MENU    0
#define ATTENS_MENU    1
#define BASS_MENU      2
#define TREBLE_MENU    3
#define BALANS_FL_MENU 4
#define BALANS_FR_MENU 5
#define BALANS_RL_MENU 6
#define BALANS_RR_MENU 7


Это:

Код: Выделить всё

signed char x[6][16] = { { -78,-65,-55,-45,-40,-35,-30,-25,-20,-17,-14,-11,-8,-5,-2,0 },
{ 0,0,0,0,6,6,6,6,12,12,12,12,18,18,18,18 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 },
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 } };

Заменил на:

Код: Выделить всё

signed char x[8][16] = { { -78,-65,-55,-45,-40,-35,-30,-25,-20,-17,-14,-11,-8,-5,-2,0 },
{ 0,0,0,0,6,6,6,6,12,12,12,12,18,18,18,18 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 },
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 },
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 },
{ -17,-15,-12,-10,-7,-5,-2,0,2,5,7,10,12,15,17,20 } };


На реальном устройстве пока не проверял, так как оконечник пришлось пока разобрать (Буду место LM3886 холтон ставить), но в протеусе регулируеться.
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Вот кстате если есть желающие, готовые прошивки!
Вложения
preamp_rus.rar
(15.29 КБ) 228 скачиваний
preamp_eng.rar
(15.25 КБ) 242 скачивания
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение dt_andrew »

умничка!
не факт что это в реале заработает как надо

но то что что это значительно ближе к правильному решению это точно

а мне всетаки придеться собрать вер 2 пусть даже в макетном состоянии
для вот таких аналогичных случаев

к чему уже и приступил
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Сегодня вечерком подцеплю свою TDA7294 и проверю (:
А в коде разве что нужно ползунки в начальное положение поставить, хотя кому надо может и сам отрегулировать как надо, ну и числа заменить. По даташиту видно что затухение в канале можно делать до -38,75 dB. В нашем же случае можно сделать до -30 dB (Больше просто места нет :))) )
Кстате как можно зделать регулировку громкоски с шагом в 1,25 dB если у нас во-певых экранчик на 16 символов (Нужно както перепиывать код чтобы ползунок двигался по одному пикселю), а во-вторых массив построен на 16 символов?
Аватара пользователя
dt_andrew
Мявтор!
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение dt_andrew »

я бы не стал ползунок двигать по 1 пикселу а вот цифры менял бы
а ползунок менялся бы через 2 изменения или через 4 (32 или 64 шага соответственно)

массив по громкости делаем соответственно на 32 или 64
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Короче, свою затею с балансом я проверил на реальном устройстве, все работает! (:
Единственное - я шкалу нормальную сделал от 0 до -30 dB.

Вот прошивки кому нужны, с промышленным энкодером (RU,EN). (Прим. - прошивки для версии 2.0)
Кто не читал тему, изменена регулировка баласа, отдельно по каждому каналу.
Вложения
preamp_rus_18.05.10.rar
(15.3 КБ) 269 скачиваний
preamp_eng_18.05.10.rar
(15.27 КБ) 222 скачивания
zmey71
Мучитель микросхем
Сообщения: 422
Зарегистрирован: Вс май 03, 2009 21:47:44
Откуда: Минск

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение zmey71 »

WtopoR Ай молодца,будем пробовать.
Митя
Родился
Сообщения: 15
Зарегистрирован: Вт окт 27, 2009 15:20:54

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение Митя »

WtopoR, вы можете выложить прошивку с вашими изменениями, но версию для "валкодера из шагового двигателя eng", или ещё лучше изменённые исходники. И ещё, после изменения в прошивне, вы не заметили так сказать, небольшой тормознутости в работе программы по сравнению с оригенальной версией Андрея.
milukin
Родился
Сообщения: 9
Зарегистрирован: Вс июл 06, 2008 10:08:04

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение milukin »

WtopoR, спасибо за прошивочки! Буду пробовать!
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Митя
Ок, прошивку сделаю...
Насчет тормознутости, вроде что оригинальная что с изменениями работает одинаково... Вы не забывайте перед программированием очищать EEPROM.
Аватара пользователя
WtopoR
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Ср ноя 05, 2008 01:06:32
Откуда: Днепропетровск
Контактная информация:

Re: Предварительный усилитель с микроконтроллерным управлени

Сообщение WtopoR »

Вот прошивка для шаговых движков. Исходники спрашивайте у автора проэкта.
Вложения
preamp_rus_motor.rar
(15.29 КБ) 209 скачиваний
preamp_en_motor.rar
(15.25 КБ) 193 скачивания
Ответить

Вернуться в «Статьи»