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

мы видим что за фронт левого канала отвечает код
i2c_write(0x80 + какае то число от 0x00 до 0x1E
за фронт правого канала аналогично
i2c_write(0xA0 + какае то число от 0x00 до 0x1E
(тыловому каналу все аналогично) только начальное число соответственно 0xC0 и 0xE0
по файлу preamp.h
мы видим что у нас 2 пункта меню отвечающего за это это
это соответствует nmenu == 4 (Balans F)
это соответствует nmenu == 5 (Balans R)
рассмотрим только по фронту когда nmenu == 4 (по тылы все аналогично)
за число которое прибавляется к основному числу это 2 последних элемента массива
то есть
{ -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]);
если вам не надо этого то закоментируйте 2 строку
как я писал ранее не все так просто как может показаться
мы не сможем регулировать 2 параметра одновременно
можно пойти по двум путям или полностью перерабатывать код или менять значения в массиве с нашими потребностями
вот как то так
надеюсь понятно обьяснил
пробуйте компелите и проверяйте
с первого раза врятли без опыта получиться добиться того что вам надо
инструкцию по компеляции проекта прилагаю
и еще тихо может быть не только из за кода но и от источника звука
у меня такое было когда с плайера шел сигнал с очень низкой амплитудой
учитывайте это
удачи
отпишитесь что у вас получилось
вы правильно определили участок кода отвечающего за баланс
Код: Выделить всё
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: Предварительный усилитель с микроконтроллерным управлени
Просто поставить числа которые нужно неполучиться, поэтому пойдем по другому пути)
Если я закоментирую вторую строчку по по идее не будет легулироваться один канал вообще. В нашем случае правый.
А если в массив добавить регулировку отдельно по каждому каналу? Кстати микросхема ведь с помощью Attenuators также позволяет делаль регулировку баланса по фронту и тылу!
Так работать будет?) Надеюсь другие функции не привязаны к данным строкам в массиве.
Если я закоментирую вторую строчку по по идее не будет легулироваться один канал вообще. В нашем случае правый.
А если в массив добавить регулировку отдельно по каждому каналу? Кстати микросхема ведь с помощью 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]);
}Так работать будет?) Надеюсь другие функции не привязаны к данным строкам в массиве.
Re: Предварительный усилитель с микроконтроллерным управлени
помоему нет не будет
самый правильный и универсальный вариант но более сложный
такой
надо добавить еще 2 пункта меню
" Volume dB",
" Attens dB",
" Bass dB",
" Treble dB",
" Usilenie FL dB",
" Usilenie FR dB",
" Usilenie RL dB",
" Usilenie RR dB",
и регулировать все отдельно по тылу и фронту и по правому и левому каналу отдельно
тогда можно настроить громкость каждой колонки из 4 возможных индивидуально
но как сказал это требует более серьезной правки кода
самый правильный и универсальный вариант но более сложный
такой
надо добавить еще 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: Предварительный усилитель с микроконтроллерным управлени
Никак немогу найти в коде, где можно изначально установить ползунок баланса в самое начало
Re: Предварительный усилитель с микроконтроллерным управлени
а его там и нет
вернее сказать есть но
находится он в процедуре
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
вернее сказать есть но
находится он в процедуре
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: Предварительный усилитель с микроконтроллерным управлени
Проверяю в 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;
Только потом стали ползунки вначало... Что еще может менять ихнее расположение?
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;
Только потом стали ползунки вначало... Что еще может менять ихнее расположение?
Re: Предварительный усилитель с микроконтроллерным управлени
может и стоит где - давно я не смотрел код по этому усилителю
поиском по p_tda[
гляньте
поиском по p_tda[
гляньте
- WtopoR
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Ср ноя 05, 2008 01:06:32
- Откуда: Днепропетровск
- Контактная информация:
Re: Предварительный усилитель с микроконтроллерным управлени
Вообщем пока сделал так:
В файле preamp.c
Это:
Заменил на:
Это:
Заменил на:
Это:
Заменил на:
В файле preamp.h
Это:
Заменил на:
Это:
Заменил на:
На реальном устройстве пока не проверял, так как оконечник пришлось пока разобрать (Буду место LM3886 холтон ставить), но в протеусе регулируеться.
В файле 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: Предварительный усилитель с микроконтроллерным управлени
Вот кстате если есть желающие, готовые прошивки!
- Вложения
-
- preamp_rus.rar
- (15.29 КБ) 228 скачиваний
-
- preamp_eng.rar
- (15.25 КБ) 242 скачивания
Re: Предварительный усилитель с микроконтроллерным управлени
умничка!
не факт что это в реале заработает как надо
но то что что это значительно ближе к правильному решению это точно
а мне всетаки придеться собрать вер 2 пусть даже в макетном состоянии
для вот таких аналогичных случаев
к чему уже и приступил
не факт что это в реале заработает как надо
но то что что это значительно ближе к правильному решению это точно
а мне всетаки придеться собрать вер 2 пусть даже в макетном состоянии
для вот таких аналогичных случаев
к чему уже и приступил
- WtopoR
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Ср ноя 05, 2008 01:06:32
- Откуда: Днепропетровск
- Контактная информация:
Re: Предварительный усилитель с микроконтроллерным управлени
Сегодня вечерком подцеплю свою TDA7294 и проверю (:
А в коде разве что нужно ползунки в начальное положение поставить, хотя кому надо может и сам отрегулировать как надо, ну и числа заменить. По даташиту видно что затухение в канале можно делать до -38,75 dB. В нашем же случае можно сделать до -30 dB (Больше просто места нет
)
Кстате как можно зделать регулировку громкоски с шагом в 1,25 dB если у нас во-певых экранчик на 16 символов (Нужно както перепиывать код чтобы ползунок двигался по одному пикселю), а во-вторых массив построен на 16 символов?
А в коде разве что нужно ползунки в начальное положение поставить, хотя кому надо может и сам отрегулировать как надо, ну и числа заменить. По даташиту видно что затухение в канале можно делать до -38,75 dB. В нашем же случае можно сделать до -30 dB (Больше просто места нет
Кстате как можно зделать регулировку громкоски с шагом в 1,25 dB если у нас во-певых экранчик на 16 символов (Нужно както перепиывать код чтобы ползунок двигался по одному пикселю), а во-вторых массив построен на 16 символов?
Re: Предварительный усилитель с микроконтроллерным управлени
я бы не стал ползунок двигать по 1 пикселу а вот цифры менял бы
а ползунок менялся бы через 2 изменения или через 4 (32 или 64 шага соответственно)
массив по громкости делаем соответственно на 32 или 64
а ползунок менялся бы через 2 изменения или через 4 (32 или 64 шага соответственно)
массив по громкости делаем соответственно на 32 или 64
- WtopoR
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Ср ноя 05, 2008 01:06:32
- Откуда: Днепропетровск
- Контактная информация:
Re: Предварительный усилитель с микроконтроллерным управлени
Короче, свою затею с балансом я проверил на реальном устройстве, все работает! (:
Единственное - я шкалу нормальную сделал от 0 до -30 dB.
Вот прошивки кому нужны, с промышленным энкодером (RU,EN). (Прим. - прошивки для версии 2.0)
Кто не читал тему, изменена регулировка баласа, отдельно по каждому каналу.
Единственное - я шкалу нормальную сделал от 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 скачивания
Re: Предварительный усилитель с микроконтроллерным управлени
WtopoR Ай молодца,будем пробовать.
Re: Предварительный усилитель с микроконтроллерным управлени
WtopoR, вы можете выложить прошивку с вашими изменениями, но версию для "валкодера из шагового двигателя eng", или ещё лучше изменённые исходники. И ещё, после изменения в прошивне, вы не заметили так сказать, небольшой тормознутости в работе программы по сравнению с оригенальной версией Андрея.
Re: Предварительный усилитель с микроконтроллерным управлени
WtopoR, спасибо за прошивочки! Буду пробовать!
- WtopoR
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Ср ноя 05, 2008 01:06:32
- Откуда: Днепропетровск
- Контактная информация:
Re: Предварительный усилитель с микроконтроллерным управлени
Митя
Ок, прошивку сделаю...
Насчет тормознутости, вроде что оригинальная что с изменениями работает одинаково... Вы не забывайте перед программированием очищать EEPROM.
Ок, прошивку сделаю...
Насчет тормознутости, вроде что оригинальная что с изменениями работает одинаково... Вы не забывайте перед программированием очищать EEPROM.
- WtopoR
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Ср ноя 05, 2008 01:06:32
- Откуда: Днепропетровск
- Контактная информация:
Re: Предварительный усилитель с микроконтроллерным управлени
Вот прошивка для шаговых движков. Исходники спрашивайте у автора проэкта.
- Вложения
-
- preamp_rus_motor.rar
- (15.29 КБ) 209 скачиваний
-
- preamp_en_motor.rar
- (15.25 КБ) 193 скачивания