Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
#define MASTER_VOLUME_10STEP 0xe0#define SYSTEM_RESET 0xff
перенести на новую строку #define SYSTEM_RESET 0xff
перенести на новую строку #define SYSTEM_RESET 0xff
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
void PT2322::rightVolume(unsigned charr frv)
ошибка в charr , одну букву р убери
ошибка в charr , одну букву р убери
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
[ref]av[/ref], Думаю, библиотека лишнее. Используй функции.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
у тебя 2 раза повторяется
void pt2323(byte command);
void pt2323(byte command);
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
[ref]av[/ref], Я думал, даже уверен, что всё можно сделать намного проще!
Сейчас сделаю макетик/набросок... Может завтра - смена заканчивается.
Отправлено спустя 16 минут 7 секунд:
Отправлено спустя 3 минуты :
это IDE напрямую "проглотит", а блок FLProg - нет, надо каждую переменную объявлять отдельно:
Отправлено спустя 5 минут :
Микруха - просто селектор и ещё чуть чуть...
Посмотрел код- всё очень даже красиво!
Я бы дискретные сигналы, enhancement, mix6db, mute, привёл к типу bool, что-бы не путаться.
переменную mode не нашёл, кроме объявления
Сейчас сделаю макетик/набросок... Может завтра - смена заканчивается.
Отправлено спустя 16 минут 7 секунд:
Согласен, и последняя точно лишняя вместе с содержимым!
Отправлено спустя 3 минуты :
Код: Выделить всё
byte input, enhancement, mix6db, mute, mode;
Код: Выделить всё
byte input;
byte enhancement;
//....
Микруха - просто селектор и ещё чуть чуть...
Посмотрел код- всё очень даже красиво!
Я бы дискретные сигналы, enhancement, mix6db, mute, привёл к типу bool, что-бы не путаться.
переменную mode не нашёл, кроме объявления

мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
очень просто, но как я обычно говорю - программировать под веб это одно, программировать под линупс это другое, писать под виндовс это третье, а под флпрог это сооовсем другая концепция написания кода для блоковav писал(а): 05 окт 2018, 18:09Так же никак не врубаюсь как создать функции отправки в шину только при изменении значений переменных. Вроде понимаю,что нужно сравнивать промежуточную переменную с переменной входа а вот как организовать все это не хватает знаний.
ты наверное работал с блоком епром? для записи там есть вход enable и он позволяет однократно записать в пзу
для этого сначала выставляем данные и потом дергаем тт триггером вход разрешения записи
с точки зрения твой код будет выглядеть так
if (enable){
все функции твоего кода
}
в флпрог при нажатии какой кнопки тебе надо еще подавать сигнал на вход разрешения
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
[ref]av[/ref], Функцию не сделаешь - гиморно, но можно. Массив придётся собрать и цикл вставлять.
Для начала просто, по условию, писали раньше, сравниваешь xxx с old_xxx, если не совпадают - шлёшь, и заодно old_xxx присваиваешь значение xxx.
Для начала просто, по условию, писали раньше, сравниваешь xxx с old_xxx, если не совпадают - шлёшь, и заодно old_xxx присваиваешь значение xxx.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
Как угодно - шли что хочешь, заодно этим инициализируй old_xxx
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
Не сегодня, завтра на работе гляну.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
ты не понял
вход разрешения записи в пзу это абстгактный вход
с точки зрения кода для записи в пзу надо вызвать одну функцию и передать ей адрес и данные
в лупе эта функция будет вызываться постоянно, если код сгенерить флпрогом
поэтому чтобы этв функция выполнилась когда нужно, то ее _оборачивают_ в конструкцию вида if (enable){}
и когда в схеме уже будет enable == true, только тогда выполнится запись или передача команд
это оверхед, который можно было бы избежать, если бы ты писал руками код
но флпрог дает тебе скорость и простоту написания, но платиш ты за это ресурсами типа памяти и скорости
вход разрешения записи в пзу это абстгактный вход
с точки зрения кода для записи в пзу надо вызвать одну функцию и передать ей адрес и данные
в лупе эта функция будет вызываться постоянно, если код сгенерить флпрогом
поэтому чтобы этв функция выполнилась когда нужно, то ее _оборачивают_ в конструкцию вида if (enable){}
и когда в схеме уже будет enable == true, только тогда выполнится запись или передача команд
это оверхед, который можно было бы избежать, если бы ты писал руками код
но флпрог дает тебе скорость и простоту написания, но платиш ты за это ресурсами типа памяти и скорости
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
да я это не к тому, а что когда вообще код пишется руками, то там концепция построения каркаса проги совсем другая
кстати в этом и заключается умение писать код - знать паттерны программирования и уметь их применять
я тут порылся, может эта инфа будет полезной для понимания теории конечных автоматов и как одна из концепций написания прошивок
http://popayaem.ru/konechnye-avtomaty-k ... parok.html
http://easyelectronics.ru/avr-uchebnyj- ... tomat.html
еще есть операционные системы реального времени
там еще проще, но оверхед больше и надо потратить время на изучение ее
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
ну это как в математике
y = f(x), где f(x) = x+2
такое же решал?
в коде это записывается такъ
int y;
---
int f(int x) { return x+2;}
вызывается так
y = f(2);
printf(y);
на экране получим 4
объясняю на примере дихальтовской статьи
[spoiler]
Код: Выделить всё
void Blink(void)
{
if (Blink_State == 1)
{
Led_On();
Blink_State = 0;
Return;
}
if (Blink_State == 0)
{
Led_Off();
Blink_State = 1;
Return;
}
}
у нас есть переменная Blink_State
в зависимости от ее состояния выполняются какие-то действия + обязательно изменить состояние этой переменной на нужное
если мы выключили диод, то в следущий раз его надо включить (т.е. состояние Blink_State должно быть уже 1, т.к. включение светодиода у нас вызывается в блоке, где условие в круглых скобках Blink_State == 1
в флпроге такое не предусмотрено, зато на многих блоках есть вход разрешения
подав туда единицу, мы разрешаем выполнять код, который сгенерирует этот блок
т.е. мы так же делаем условие if (enable == true) { led_on();}
тут возникает второй вопрос: у меня много кнопок и значит будет много состояний, как тогда действовать?
для этого есть другой вид записи
сначала мы делаем перечисления всех состояний автомата
enum function {FMasterVolume, FFrontLeftVolume, FFrontRightVolume,
FCenterVolume, FRearLeftVolume, FRearRightVolume, FSubVolume,
FBass, FMiddle, FTreble, F3D, FToneDefeat, FEnd};
задаем начальное состояние автомата
// startup state
int currentFunction = FMasterVolume; // вот эта строчка
int mute = false;
int mode = DISPLAYMODE;
дальше там есть кнопка функций мелкасхемы этой
когда мы ее нажимаем, то каждый раз на экране загорается новый режим
void loop()
{
// read function button
int functionButton = deBounceRead(FUNCTIONPIN);
if (functionButton == HIGH){
currentFunction++;
if (currentFunction == FEnd) // если мы достигли конца, то выставляем дефолтный режим FMasterVolume
currentFunction = FMasterVolume;
displayFunction();
mode = EDITINGMODE;
}
в таком режиме регулируется громкость кнопками +-
в других режимах регулируется какой-то другой параметр
что происходит, когда мы нажимаем кнопку вверх?
// read up button
int upButton = deBounceRead(UPPIN);
if (upButton == HIGH && mode == EDITINGMODE){
if (currentFunction > FTreble)
functionValues[currentFunction] = !functionValues[currentFunction];
else{
if (functionValues[currentFunction] < maxValues[currentFunction])
functionValues[currentFunction] += 1;
}
displayFunction();
}
вот интересная строчка
if (upButton == HIGH && mode == EDITINGMODE){
у нас тут при нажатии кнопки проверяется не просто ее нажатие, но одновременно еще состояние машины
а их 2
#define DISPLAYMODE 0
#define EDITINGMODE 1
&& это логическое И, только не побитовое, а именно логическое для frue/false
конечно этот код из файла в первом посте этой темы не совсем годный пример, но боле менее показывает, как делается переключение между разными функциями мелкасхемы
в флпрог это делается путем посылки данных + сигнала запись этих данных в виртуальный блок
как вариант - можно сделать блок, у которого будет вход инт и каждое число это будет режим мелкасхемы
регулировка громкости 1, баланс 2, тембр 3
и еще входы +-
после последнего нажатия ждем пару секунд и сбрасывает вход на 1, который отвечает за регулировку громкости используется чаще всего
Отправлено спустя 5 минут 25 секунд:
вот еще почитай теорию
http://easyelectronics.ru/avr-uchebnyj- ... gramm.html
вот так, генерируемый флпрогом код это и есть суперцикл
т.к. код сгенерен прогой для проги, то нам нет смысла разбираться в этом наборе букв, для нас он не имеет смысла, важно чтобы компилятор переварил это
а когда мы делаем сложные ветвления, то тут применются все остальные методы конструкции проги
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
kalobyte писал(а): 05 окт 2018, 23:39в коде это записывается такъ
int y;
---
int f(int x) { return x+2;}
вызывается так
y = f(2);
printf(y);
на экране получим 4
av писал(а): 06 окт 2018, 00:05Вот даже здесь не понятно. Если это математика, то как вы получили х+2 если f умножено на (х), и откуда взята 2.
Код: Выделить всё
int y; // объявляем переменную y
--- // другие действия: объявы, loop , setup,...
int f(int x) { return x+2;} // описываем функцию: возвращаемые данные типа int, называется f,
// (аргумент х с типом данных int), может быть несколько
// { тело функции: вернём принятый аргумент, предварительно прибавив 2}
// вызывается так в секции loop
y = f(2); // вызываем функцию f и передаём ей аргумент 2, то что вернёт - присвоим y
printf(y); // печатаем y
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
Да, но я стараюсь не использовать одни и те-же имена снаружи и внутри функций.
Если, к примеру, отправляю address, то внутренний аргумент называю _address, или нарочно неправильно adres, т.е.
Код: Выделить всё
myfunction(address_reg, value); // вызываю функцию, адрес регистра и значение, в секции loop
void myfunction( uint16_t adres_reg, uint8_t znachen) // описываю аргументы
{
Wire.beginTransmission(0x4F);
Wire.write((int)( adres_reg >> 8));
Wire.write((int)( adres_reg & 0xFF));
Wire.write( znachen );
Wire.endTransmission();
}
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
как я тебя понимаю

когда-то давно я так же в школе сидел и не мог понять, что за функции, откуда х+2, зачем она что-то возвращает
я их понял только когда стал заниматься программированием, а там вполне наглядно показали смысл функций
х+2 это я взял из головы как самый простой примерav писал(а): 06 окт 2018, 00:05 Если это математика, то как вы получили х+2 если f умножено на (х), и откуда взята 2.
и ф не умножено на (х), в математике это читается как ф от х
в твоем примере это может быть
n = getButton();
нажимаеш на какую-то кнопку, а в переменную н у тебя помещается какое-то число по номеру кнопки
в данном случае функция без аргументов, но выдает результат работы
есть просто функция, которая без входа и без выхода
void initPT2323() { // Функция инициализации PT2323
setMute();
delay(300);
setInput();
setSurroundEnhancement();
setMixerChannel6Db();
pt2323();
}
смысл ее скорее в разделении кода для понятливости
мы видим название функции и по нему понимаем ее смысл
мы видим другие название и тоже понимаем, что происходит
например эту функцию или лучше ее содержимое обязательно надо засунуть в секцию сетап флпрог, т.к. она вызывается один раз
а может и вообще не надо и ты сам в флпрог сделаеш схему, которая выставит режимы по умолчанию
т.е. ты сам решаеш, как тебе лучше сделать и твое решение будет правильно для тебя
так например управлять мелкасхемами не трудно, весь смысл в их управлении - слать правильные байты туда или получать от туда
трудность как раз в понимании даташита и принципа работы сложных мелкасхем типа трансиверов 2401 или подобных, где куча регистров
Отправлено спустя 8 минут 36 секунд:
скачай калькуляторav писал(а): 06 окт 2018, 10:55[ref=#ff8000]Sancho[/ref], а зачем вы указали для аргумента "adres_reg" двух байтный размер и в последствии сдвигаете его на 8. Ведь эта переменная восьми разрядная. И далее вы применяете логическое "И". Все это пока для меня сложновато.
http://www.speqmath.com/
без него такие конструкции действительно непонятны и пока не попробуеш, то ничего не поймеш
воткак пример
0 << 3
Ans = 0
(2 & 7) << 3
Ans = 16
и вот еще калькулятор
https://sites.google.com/site/bincalc/
http://www.jpuhlmann.net/software_bitcalc.html
они помогут разобраться в этих сдвигах и пригодятся при написании прог в любом случае
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
Это пример, касается микросхем, у которых адреса регистров двух-байтные, пример посылки: поэтому сначала из адреса достаю старший байт, сдвинув исходное вправо на восемь байт - как раз в младшем байте окажется старший, а в старших разрядах нули, потом побитно делаю "И" исходного с восьмью нулями и восьмью единицами - результат тот-же, только остаётся "голый" младший байт.av писал(а): 06 окт 2018, 10:55Sancho, а зачем вы указали для аргумента "adres_reg" двух байтный размер
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
он наверное ошибся в коде
что-то этот код как-то не для 2323, в даташите нет никакого регистра адреса
или этот код не для 2323?
Отправлено спустя 5 минут 54 секунды:
вот кусок для 2323
там всего один байт команды
void pt2323(byte command)
{
Wire.beginTransmission(74); // transmit to device 0x94(hex) -> 148(dec)(addressing is 7-bit) -> 148/2
switch(command)
{
case 0:
Wire.send(0xc7); // 6-ch input
break;
case 4:
Wire.send(0xc8); // stereo 4 input
break;
case 3:
Wire.send(0xc9); // stereo 3 input
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
[ref]av[/ref],
а для какой мс этот пример? такие операции с битами часто встречаются
например есть регистр адреса и он 3 бита всего
это 2 в 3 степени - 8 и еще остается 5 бит на данные
как запаковать в 1 байт и адрес, и данные из переменной, которая всегда 8 бит?
вот тут и применяются сдвиги и маски типа 0xFF или можно обрезать полбайта 0x0F
попробуй на тех калькуляторах, что я тебе дал, так словами это не объяснить, обязательно практика нужна
я тебе вчера же показывал пример
а для какой мс этот пример? такие операции с битами часто встречаются
например есть регистр адреса и он 3 бита всего
это 2 в 3 степени - 8 и еще остается 5 бит на данные
как запаковать в 1 байт и адрес, и данные из переменной, которая всегда 8 бит?
вот тут и применяются сдвиги и маски типа 0xFF или можно обрезать полбайта 0x0F
попробуй на тех калькуляторах, что я тебе дал, так словами это не объяснить, обязательно практика нужна
сделать вход enable для всего блока, как это сделано для блока запись в епром
я тебе вчера же показывал пример
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
[ref]av[/ref], Мне кажется, идея, предложенная [ref]kalobyte[/ref], с + и -, но и вход управления режимами сделать не int, а также +-, добавив несколько выходов: какой режим, какое текущее значение, может ещё что.
Это позволит упростить код, создав массивы, уменьшит количество функций, как в первоисточнике.
А меню - дело поправимое...
Это позволит упростить код, создав массивы, уменьшит количество функций, как в первоисточнике.
А меню - дело поправимое...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
да все просто
вот типа модуль
у него есть кнопки прибавить и убавить
и есть вход инт, куда подается число с модуля меню, когда ты выбираеш там регулировать громкость, тембр, баланс или еще чего
если стоит 0, то модуль не реагирует никак
[ref]av[/ref],
а что на практике показывает, если в мелкасхему будут отправляться данные каждый раз одинаковые? сказывается ли это как-то на звучании? типа там щелчки какие есть?
если нет, то и пускай шлет

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя