Пользовательские блоки аудиопроцессоров на PT2322 и PT2323

ПБ для PT2322 и PT2323

Создаем свой блок. Вопросы, помощь знатоков.
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#1

Сообщение kalobyte » 31.08.2018{, 21:48}

av,
этот пример на 95% состоит из ненужных тебе вещей, т.к. там больше кода для обработки нажатий и вывода на индикатор
все это не нужно для создания блока

важные вещи это вот это
PT2322 audio;
если говорить простыми словами, то тут создается специальная переменная типа PT2322 , в ней хранятся все функции, которые тебе надо вызывать в секции сетап или луп
а переменная идет в секцию декларации или как она там называется, т.к. должна быть доступна всегда

теперь ищеш все вызовы функций в нужных секциях и тупо копируеш их в мастер создания блока
например
int rtnCode = audio.init(); в секции сетап, они выполнятся один раз, мелкасхема будет настроена по умолчанию, в самой библиотеке эти значения уже забиты, а в этом примере автор решил сделать свои значения по умолчанию

в файле .h перечислены все функции пользователя
int init(void);
void muteOn(void);
void muteOff(void);
void _3DOn(void);
void _3DOff(void);
void toneOn(void);
void toneOff(void);
void leftVolume(unsigned char flv);
void rightVolume(unsigned char frv);
void centerVolume(unsigned char cv);
void rearLeftVolume(unsigned char rlv);
void rearRightVolume(unsigned char rrv);
void subwooferVolume(unsigned char sv);
void masterVolume(unsigned char mv);
void bass(unsigned char tb);
void middle(unsigned char tm);
void treble(unsigned char tt);

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

по поводу возвращаемого значения функции инит я так и не понял, это даташит надо читать, зачем там что-то возвращать и что там за функции

теперь по поводу создания входов и выходов
тут нужно понимать, какие функции могут быть входами какого типа и как это оформить в коде, т.к. все равно придется писать свой код для реализации логики
для этого надо хорошо понимать, как работает мелкасхема и ее функция

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

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#2

Сообщение kalobyte » 31.08.2018{, 21:59}

берем 2 функции, которые реализуют один режим - включить и выключить звук
void muteOn();
void muteOff();

у этих функций нет вообще никаких параметров, как их вызвать из флпрог? какого типа будет вход?
определимся, что делает функция
в данном случае она вызывается 1 раз и устанавливает 1 режим, другая функция устанавливает тоже один режим, но он противоположный первому
значит эти функции не могут вызываться друг за другом, а только по условию

и тут встает вопрос: как я буду использовать в флпрог эти функции мелкасхемы? что лучше: сделать 2 входа как 2 функции или же один вход boolean и вызывать нужную функцию в зависимости от состояния входа? какие дополнительные блоки флпрог я повешу еще, чтобы все работало как надо и чтобы паразитного кода было меньше?

например я хочу выключить звук кнопкой на пульте ду - как работает блок пульта ду? сохраняется ли состояния кнопки или же оно только 1, когда кнопка нажата? логично предположить, что выход сбрасывается в 0, когда кнопка отпущена, а если нам надо держать его в 1, то бы ставим туда триггер тт

если у нас есть уже блок триггера, то зачем нам его писать еще раз в блоке?
значит мы сделаем просто один вход mute типа boolean
если там 1, то вызовется 1 раз функция muteOn, которая выключит звук
если же единицы нет, то т.к. эта функция будет помещена в блок луп, то она будет вызываться постоянно и включать звук

делаем в блоке вход mute типа boolean
в секции луп пишем условие
if (mute) muteOn();
else muteOff();

пока все, если возникли вопросы по этому куску, то пиши

Отправлено спустя 7 минут 1 секунду:
av, тебе не си надо учить, а диалект с++ для ардуины, он намного проще и это совсем другое, нежели с и с++
в ютубе есть куча инфы



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

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#3

Сообщение kalobyte » 31.08.2018{, 22:28}

av писал(а):
31.08.2018{, 22:11}
ачем их там две если по даташиту на управление mute идет один бит данных
так решил автор библиотеки
ты можеш переписать ее как mute(boolean); и когда на входе true, то звук выключится

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

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#4

Сообщение kalobyte » 31.08.2018{, 23:03}

ни один процессор не может оперировать памятью меньше одного байта
т.е. если ты использовал 1 бит, то технически это все равно создалась переменная типа byte :D
прикол только тут в том, что в момент компиляции компилятор в этот байт может запихать несколько boolean

тип boolean удобен чисто для программиста, чтобы понимать или помочь понять смысл кода

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#5

Сообщение kalobyte » 31.08.2018{, 23:21}

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

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#6

Сообщение kalobyte » 01.09.2018{, 00:26}

тебе нужны только куски, начинающиеся на audio.
ну и еще зачем-то автор инициализирует и2ц в основном коде, когда это должно делаться в библиотеке :smile250:

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#7

Сообщение Sancho » 01.09.2018{, 09:08}

kalobyte писал(а):
31.08.2018{, 21:48}
по поводу возвращаемого значения функции инит я так и не понял, это даташит надо читать, зачем там что-то возвращать и что там за функции
0: передача успешна
1: объем данных слишком велик для буфера передачи
2: получен NACK при передаче адреса
3: получен NACK при передаче данных
4: другая ошибка
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#8

Сообщение kalobyte » 01.09.2018{, 11:22}

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

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#9

Сообщение kalobyte » 01.09.2018{, 11:29}

av писал(а):
01.09.2018{, 11:25}
Значит можно из перечисления функций enum удалить эту функцию ?

это не функции в плане синтаксиса, енум это перечисление, оно не является кодом рантайма и вычисляется во время компиляции
вместо этих букв будут подставлены числа от 0 до количества перечислений -1

нужно это для замены числовых констант боле понятными буквенными
типа как тут
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04

только тут нет перечисления, а конкретные значения
av писал(а):
01.09.2018{, 11:22}
Вопрос для чего ?
оператор if в скобках ожидает какое-то условие, результат которого всегда должен быть true или false
что такое true? это любое число не 0

отсюда следует, что если переменная (вход) mute будет в флпрог выставлена в true, то оператор if выполнит условие в первых фигурных скобках и запустит функцию muteOn, которая выключит звук

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#10

Сообщение kalobyte » 01.09.2018{, 12:18}

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

а тот пример это просто пример, который покажет тебе, как используется библиотека и какие куски или строки в каких секциях распологать

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#11

Сообщение Sancho » 01.09.2018{, 13:58}

av писал(а):
01.09.2018{, 11:41}
а может тупо с файла .h скопировать все функции добавить входы параметров ну и где нужно преобразовать в нужный тип переменной. Возможно ли такое ?
Можно, но, в данном случае не нужно - там лишнего нет. И нет гимора копирования, много копировать...
Ещё.
Разницу посмотри, о чём вчера беседовали..
Не забывай задекларировать old_.... с нужными типами данных.

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

if (mute) muteOn();
else muteOff();

И так:

if (mute != old_mute)
{
	if (mute) muteOn();
	else muteOff();
	old_mute=mute;
}
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#12

Сообщение kalobyte » 02.09.2018{, 00:20}

av, вот еще тебе список всех операторов http://arduino.ru/Reference

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#13

Сообщение Sancho » 04.09.2018{, 14:56}

av, Сейчас сделаю набросок. Подправлю библиотеку, немножко...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#14

Сообщение kalobyte » 04.09.2018{, 16:05}

av, неправильно
в самом верху зачем скобки вокруг переменной?
не надо значения переменных со входов блока присваивать переменным в коде и потом их отправлять в функции
это делается сразу - со входа данные идут как аргумент функции без расхода памяти и запутывании кода

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

вот тут весь цимес - сделать алгоритм такой, чтобы не посылать лишний раз данные, если они не менялись
у меня примерно этот алгоритм возник, но тебе придется писать код и тестировать все на реальном железе :D
95% времени занимает как раз тестировании алгоритма и подгонка кода под этот алгоритм

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#15

Сообщение kalobyte » 04.09.2018{, 16:37}

av писал(а):
04.09.2018{, 16:16}
Сейчас посмотрел вроде отправка реализована в файле .cpp из библы к PT2322/
это тебе не надо знать, там реализованы функции отправки и туда не надо лезть
никогда не меняй в чужих файлах бех необходимости

алгоритм примерно такой
если ты не планируеш использовать какие-то функции этой мелкасхемы, то не делай их

далее вводятся дополнительные переменные для каждой функции, которые будут содержать данные от прошлого изменения типа last_volume_up
далее делаем примерно так
if (last_volume!=volume_up){
volumeup(volume_up);
last_volume = volume;
}

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#16

Сообщение Sancho » 04.09.2018{, 16:54}

Принимайте, други
Файл ino - это не скетч, а заготовка для блока. Надо дописать :)
Поправленая бибка

Отправлено спустя 3 минуты 17 секунд:
Громкость 0- мин, 79 макс.
Каналы 0 макс, 15 - затухание -15дб
Вложения
Sancho_PT2322.rar
Не качать, немного много буков :) Исправленая ниже!
(2.7 КБ) 73 скачивания
Sancho_PT2322_блок_v1.ino
НЕ скетч!!!!!!!
(952 байт) 88 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#17

Сообщение kalobyte » 04.09.2018{, 17:05}

av писал(а):
04.09.2018{, 16:49}
Чтобы менять там что то с начало надо знать вообще как оно работает.
ну как? довольно просто - в функцию передаеш число и она переводит его в набор нулей и единиц, которые надо отправить в мелкасхему
а какие нули с единицами - это в даташите пишут, правда иногда очень замудрено выходит, особенно когда с китайского на английский переводят

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#18

Сообщение Sancho » 04.09.2018{, 17:11}

av, Бибку перекачать - забыл несколько буков в описании функции :)

Отправлено спустя 2 минуты 52 секунды:
Здесь список более полный, немного, но всё-же )
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#19

Сообщение kalobyte » 04.09.2018{, 17:44}

av,
вот как я и говорил, Sancho сделал этот алгоритм
if(old_MASTERvol != MASTERvol){old_MASTERvol = MASTERvol; audio.masterVolume(MASTERvol);}

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Разработка пользовательского блока для звукового процессора 5.1 на PT2322

#20

Сообщение kalobyte » 04.09.2018{, 19:08}

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

Ответить

Вернуться в «Разработка пользовательских блоков»