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

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


Ответить

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 10:42:22

Нет. Это место - это лишь ремаппинг команд _PREV и _NEXT в обычные _IN_X. А они уже ниже обрабатываются, там и вставлять.

Никакие if не нужны. tunerSetMute(aproc.mute || aproc.input) как включит mute тюнера (либо когда обычный mute включен, либо канал ненулевой), так и выключит (на нулевом канале)

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 17:32:01

Нет. Это место - это лишь ремаппинг команд _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 раз.
Причина: Нарушение п2.7 правил форума. Предупрежден.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 18:13:35

Ниже. Функция срабатывать должна не только на 0 входе (делать mute = 0), но и на других (mute = 1). И уж точно позднее sndSetInput(), коль скоро использует aproc.input в параметрах.

Как в ATmega32: https://github.com/WiseLord/ampcontrol/ ... ons.c#L346

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 19:41:26

а что хранится в переменной 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 и больше - включен?
извиняюсь за такие вопросы, я пока чайник в С++

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 19:48:21

Номер входа, как естественно следует из названия.

Нет, неправильно. И добавлять не надо. Если так оставите как хотите, то в случае 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

как-то так?
Код:
    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:08:12

В PT232x каналов как раз пять.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 20:22:39

извиняюсь за нудность, а пустые 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(номеру канала темброблока), выполнить команды под кейсом. или это не номер канала?

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 20:50:23

С чего Вы взяли, что они пустые?

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 20:55:26

за case CMD_RC_IN_0: напр нет команд
а в case CMD_RC_IN_4:
команда
break;
что-то есть.
а как тогда это работает :shock:

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 20:58:50

Мда.. похоже, в C действительно не очень разбираетесь. Вот тогда Вам три примера, из которых логика работы switch должна стать понятной:

Изображение Изображение Изображение

Команды после _4 выполняются и для _0.._3, потому что нет никаких причин (break) этого не делать.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб авг 05, 2017 21:08:45

тыдыщ, пошел курить учебник по сям

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 06, 2017 13:40:03

Всем привет, спаял наконец то плату, теперь нужно запрограмировать...
У меня есть USBAPS с программой Khazama и STK 200/300 с PonyProg, Есть у кого принтскрин как ставить фузы в этих программах?
За основу взял печатку Mazzz
Плата БП
IMG_20170806_112718.jpg
(42.45 KiB) Скачиваний: 759

IMG_20170806_112724.jpg
(30.96 KiB) Скачиваний: 448

Сам "Темброблок"
IMG_20170806_112743.jpg
(39.75 KiB) Скачиваний: 696

IMG_20170806_112750.jpg
(54.29 KiB) Скачиваний: 549


Добавлено after 2 hours 46 minutes 49 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Вроде так?
Fuse PonyProg.JPG
(114.1 KiB) Скачиваний: 492

Fuse Khazama.JPG
(35.65 KiB) Скачиваний: 495
Вложения
AMP Control.rar
(123.84 KiB) Скачиваний: 325

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 06, 2017 15:58:19

На днях приобрёл себе новый телефон Xiaomi Redmi 4x. Старый Galaxy S Plus верой-правдой прослужил почти 6 лет и до сих пор работает отлично, но нынешние приложения тяжеловаты уже для него, одноядерного.

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

1. Universal TV Remote. Позволяет создать пульт с нуля, и каждой кнопке, при желании, назначить некоторый код в виде строки IR Sequence. Редактор EEPROM теперь позволяет генерировать эти IR Sequence.

2. Smart IR Remote - AnyMote, или бесплатный вариант с рекламой - AnyMote Universal Remote + WiFi Smart Home Control. Позволяет импортировать файл пульта.

Собственно, под эти программы (возможно, и для каких-то других подойдёт) и доработан сейчас 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 раз.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 06, 2017 16:12:28

Прошил ampcontrol_m32_ks0108b.hex с архива из статьи ...
Ждущий режим
IMG_20170806_165550.jpg
(38.88 KiB) Скачиваний: 404

Насколько помню 80 в секундах говорит, что часы нужно запустить.
Подсветка горит на всю, и вместа дня недели прямоугольники.
На кнопку S1 реагирует. Уровни на mute и stby меняются.
Подсветка горит так же 100%.
на экране вот ...
IMG_20170806_165603.jpg
(30.15 KiB) Скачиваний: 519

На кнопки реагирует, заходит в режим настройки дата/время.
Прошил под 0108A Все то же самое только половинки экрана по вертикали поменялись местами.

Плату прозвонил, обвязка дисплея и МК без "соплей", плата мытая в нефрасе.
Что посоветуете, куда копать, грешу на МК, так как при первом включении воткнул дисплей верхногами :(

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 06, 2017 16:22:21

EEPROM тоже надо прошить.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 06, 2017 17:13:20

Прошивал и ru и en

Добавлено after 42 minutes 23 seconds:
WiseLord, фьюзы правильно выставил?
Последний раз редактировалось AlekseyEnergo Ср авг 09, 2017 21:34:19, всего редактировалось 1 раз.
Причина: Нарушение п2.7 правил форума. Предупрежден.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 06, 2017 18:05:28

Не знаю, -U lfuse:w:0x3F:m -U hfuse:w:0xC1:m - правильные.

Отсутствие текстов и максимальные значения параметров повсюду - результат непрошитого EEPROM, т.к. по дефолту там FF везде читается.

P.S. Вот такой пульт получился в Anymote:

Изображение

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 06, 2017 18:13:15

Не знаю, -U lfuse:w:0x3F:m -U hfuse:w:0xC1:m - правильные.

Отсутствие текстов и максимальные значения параметров повсюду - результат непрошитого EEPROM, т.к. по дефолту там FF везде читается.


Все ясно, буду пробовать, Последняя стабильная прошивка находится в статье?

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс авг 06, 2017 18:29:14

На гитхабе
Ответить