Нет. Это место - это лишь ремаппинг команд _PREV и _NEXT в обычные _IN_X. А они уже ниже обрабатываются, там и вставлять.
Никакие if не нужны. tunerSetMute(aproc.mute || aproc.input) как включит mute тюнера (либо когда обычный mute включен, либо канал ненулевой), так и выключит (на нулевом канале)
Нет. Это место - это лишь ремаппинг команд _PREV и _NEXT в обычные _IN_X. А они уже ниже обрабатываются, там и вставлять.
Никакие if не нужны. tunerSetMute(aproc.mute || aproc.input) как включит mute тюнера (либо когда обычный mute включен, либо канал ненулевой), так и выключит (на нулевом канале)
:ampcontrol-m8\main.c
case CMD_RC_IN_0: tunerSetMute(aproc.mute || aproc.input) case CMD_RC_IN_1: case CMD_RC_IN_2: case CMD_RC_IN_3: case CMD_RC_IN_4: ks0066Clear(); sndSetInput(action - CMD_RC_IN_0); dispMode = MODE_SND_GAIN0 + aproc.input; setDispTimer(DISPLAY_TIME_GAIN); break;
я правильно понял? мне для проверки прошивки разбирать много приходится, SPI не допаял пока.
и да, в версии m32 этого тоже нет.
Последний раз редактировалось AlekseyEnergo Ср авг 09, 2017 21:30:54, всего редактировалось 1 раз.
Ниже. Функция срабатывать должна не только на 0 входе (делать mute = 0), но и на других (mute = 1). И уж точно позднее sndSetInput(), коль скоро использует aproc.input в параметрах.
Заголовок сообщения: Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Добавлено: Сб авг 05, 2017 19:41:26
Вымогатель припоя
Зарегистрирован: Ср сен 09, 2015 13:09:15 Сообщений: 558
Рейтинг сообщения:0
а что хранится в переменной aproc.input? т.е первый кейс правильно и надо вставить в остальные 4?
case CMD_RC_IN_0: tunerSetMute(aproc.mute || aproc.input) case CMD_RC_IN_1: tunerSetMute(aproc.mute || aproc.input); case CMD_RC_IN_2: tunerSetMute(aproc.mute || aproc.input); case CMD_RC_IN_3: tunerSetMute(aproc.mute || aproc.input); case CMD_RC_IN_4: ks0066Clear(); sndSetInput(action - CMD_RC_IN_0); dispMode = MODE_SND_GAIN0 + aproc.input; setDispTimer(DISPLAY_TIME_GAIN); tunerSetMute(aproc.mute || aproc.input); break;
диапазон параметров для процедуры void tunerSetMute(uint8_t value) какой? 0 - выключен mute, 1 и больше - включен? извиняюсь за такие вопросы, я пока чайник в С++
Нет, неправильно. И добавлять не надо. Если так оставите как хотите, то в случае case CMD_RC_IN_0 функция будет вызываться целых 5 раз.
Я уже привёл пример кода для ATmega32 - как надо.
Да, передача нуля в функцию установит mute в ноль, то есть звук пойдёт. Любое другое значение - режим mute, звука нет.
P.S. И вставляйте кусочки кода в тег [code] - ибо нечитабельно.
P.P.S. Код, имхо, понятен чуть менее чем полностью. Например, для ATmega32: Спойлер
Код:
case CMD_RC_IN_0: if (getDefDisplay() == MODE_SPECTRUM && tuner.ic) setDefDisplay(MODE_FM_RADIO); case CMD_RC_IN_1: case CMD_RC_IN_2: case CMD_RC_IN_3: case CMD_RC_IN_4: sndSetInput(action - CMD_RC_IN_0); dispMode = MODE_SND_GAIN0 + aproc.input; setDisplayTime(DISPLAY_TIME_GAIN); tunerSetMute(aproc.mute || aproc.input); break;
Прилетает некоторое событие (номер) action. CMD_RC_IN_0 - это какое-то число из перечисления, неважно какое, допустим, 5. Остальные четыре входа - числа 6..9 соответственно.
И вот, если этот action = X - одно из чисел от 5 до 9 - срабатывает этот кусок кода; 1. установка одного из входов 0..4: sndSetInput(action - CMD_RC_IN_0); => sndSetInput(X - 5) => sndSetInput(0 .. 4) 2. вход в режим экрана dispMode = MODE_SND_GAIN0 .. MODE_SND_GAIN4 3. экран этот будет отображаться DISPLAY_TIME_GAIN миллисекунд. 4. в зависимости от общего режима mute (aproc.mute) и текущего входа (aproc.input) будет приглушён или возобновлён звук с тюнера.
Дополнительно, только для команды CMD_RC_IN_0 в самом начале кода идёт смена дефолтного (т.е. того, куда будет возвращаться экран по таймауту) режима дисплея MODE_FM_RADIO, если текущий режим - спектр (MODE_SPECTRUM) и радио вообще в наличии (tuner.ic ненулевой)
Но ещё раз повторюсь, всё это объяснять смысла нет, потому что по коду всё и так полностью понятно.
Последний раз редактировалось WiseLord Сб авг 05, 2017 20:11:02, всего редактировалось 3 раз(а).
Заголовок сообщения: Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Добавлено: Сб авг 05, 2017 20:05:32
Вымогатель припоя
Зарегистрирован: Ср сен 09, 2015 13:09:15 Сообщений: 558
Рейтинг сообщения:0
как-то так?
Код:
case CMD_RC_IN_0: case CMD_RC_IN_1: case CMD_RC_IN_2: case CMD_RC_IN_3: case CMD_RC_IN_4: ks0066Clear(); sndSetInput(action - CMD_RC_IN_0); dispMode = MODE_SND_GAIN0 + aproc.input; setDispTimer(DISPLAY_TIME_GAIN); tunerSetMute(aproc.mute || aproc.input); break;
блин, надо книжку по Си полистать, и почему вызов процедуры в case CMD_RC_IN_4: , если каналов максимум 4 а это пятый ? для себя понять логику работы алгоритма хочу.
Заголовок сообщения: Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12
Добавлено: Сб авг 05, 2017 20:22:39
Вымогатель припоя
Зарегистрирован: Ср сен 09, 2015 13:09:15 Сообщений: 558
Рейтинг сообщения:0
извиняюсь за нудность, а пустые case CMD_RC_IN_0: - case CMD_RC_IN_3: что выполняют, это зарезервировано на будущее? если я внесу вызов процедуры без параметров в case CMD_RC_IN_0: то она будет работать только на 0 канале? одно пока не пойму, как работает case CMD_RC_IN_4: если у меня каналы с 0 по 2, а 3 и 4 нет. по логике switch (action) его просто пропустит.
если action равен CMD_RC_IN_4(номеру канала темброблока), выполнить команды под кейсом. или это не номер канала?
Всем привет, спаял наконец то плату, теперь нужно запрограмировать... У меня есть USBAPS с программой Khazama и STK 200/300 с PonyProg, Есть у кого принтскрин как ставить фузы в этих программах? За основу взял печатку Mazzz Плата БП
На днях приобрёл себе новый телефон Xiaomi Redmi 4x. Старый Galaxy S Plus верой-правдой прослужил почти 6 лет и до сих пор работает отлично, но нынешние приложения тяжеловаты уже для него, одноядерного.
В новом телефоне есть IR-передатчик. Поигравшись с кучей приложений для управления аппаратурой, нашёл лишь два более-менее подходящих для проекта, а именно - позволяющих вручную вводить коды пульта. Все прочие пользуются онлайн базами данных пультов.
1. Universal TV Remote. Позволяет создать пульт с нуля, и каждой кнопке, при желании, назначить некоторый код в виде строки IR Sequence. Редактор EEPROM теперь позволяет генерировать эти IR Sequence.
Собственно, под эти программы (возможно, и для каких-то других подойдёт) и доработан сейчас Ampcontrol EEPROM Editor. В нём можно как просто получить IR Sequence, так и готовый файл для AnyRemote.
Вообще-то AnyRemote может и обучаться от текущего пульта, но это если железо телефона позволяет. В моём телефоне, похоже, есть только IR передатчик без приёмника, так что нужен другой способ.
Итак, как сдублировать имеющийся пульт на телефон:
1. Сливаем из уже обученной ATmega32 eeprom файл. Открываем его в редакторе EEPROM. На вкладке Remote можно видеть коды IR sequence, подходящие для Universal TV Remote (и, возможно, для других программ). Их и вбиваем потом на телефоне. Я у себя в Linux, пользуяс KDE Connect делаю это для всех кнопок минут за пять - есть возможность сделать Copy текста на компьютере и Paste на телефоне. Для AnyMote же можно экспортировать всю конфигурацию в файл
Спойлер
2. В случае AnyMote получаем вот файлик в JSON формате, который нужно скопировать на телефон:
Спойлер
3. Далее уже на телефоне в AnyMote добавляем пульт импортом из файла:
Спойлер
Далее уже в обеих программах можно кнопки расположить на экране как угодно, раскрасить в нужные цвета, добавить иконки и т.д.
!!! На данный момент редактор EEPROM экспортирует только пульты формата RC5. Прочие пока не поддерживаются, добавлю их позднее в течение этого месяца. P.S. Забрать всё можно на GitHub вместе со свежим релизом.
Последний раз редактировалось WiseLord Вс авг 06, 2017 16:19:35, всего редактировалось 1 раз.
Насколько помню 80 в секундах говорит, что часы нужно запустить. Подсветка горит на всю, и вместа дня недели прямоугольники. На кнопку S1 реагирует. Уровни на mute и stby меняются. Подсветка горит так же 100%. на экране вот ...
На кнопки реагирует, заходит в режим настройки дата/время. Прошил под 0108A Все то же самое только половинки экрана по вертикали поменялись местами.
Плату прозвонил, обвязка дисплея и МК без "соплей", плата мытая в нефрасе. Что посоветуете, куда копать, грешу на МК, так как при первом включении воткнул дисплей верхногами
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения