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

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

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


Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

Никакие if не нужны. tunerSetMute(aproc.mute || aproc.input) как включит mute тюнера (либо когда обычный mute включен, либо канал ненулевой), так и выключит (на нулевом канале)
Реклама
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

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

Сообщение kloker »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3156762#p3156762"]Нет. Это место - это лишь ремаппинг команд _PREV и _NEXT в обычные _IN_X. А они уже ниже обрабатываются, там и вставлять.

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

: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 правил форума. Предупрежден.
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

Как в ATmega32: https://github.com/WiseLord/ampcontrol/ ... ons.c#L346
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

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

Сообщение kloker »

а что хранится в переменной 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 и больше - включен?
извиняюсь за такие вопросы, я пока чайник в С++
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

Нет, неправильно. И добавлять не надо. Если так оставите как хотите, то в случае 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 раза.
Реклама
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

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

Сообщение kloker »

как-то так?

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

 	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 а это пятый ? для себя понять логику работы алгоритма хочу.
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

В PT232x каналов как раз пять.
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

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

Сообщение kloker »

извиняюсь за нудность, а пустые 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(номеру канала темброблока), выполнить команды под кейсом. или это не номер канала?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

С чего Вы взяли, что они пустые?
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

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

Сообщение kloker »

за case CMD_RC_IN_0: напр нет команд
а в case CMD_RC_IN_4:
команда
break;
что-то есть.
а как тогда это работает :shock:
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

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

Команды после _4 выполняются и для _0.._3, потому что нет никаких причин (break) этого не делать.
kloker
Вымогатель припоя
Сообщения: 558
Зарегистрирован: Ср сен 09, 2015 13:09:15

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

Сообщение kloker »

тыдыщ, пошел курить учебник по сям
boida
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Чт дек 06, 2012 23:20:07

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

Сообщение boida »

Всем привет, спаял наконец то плату, теперь нужно запрограмировать...
У меня есть USBAPS с программой Khazama и STK 200/300 с PonyProg, Есть у кого принтскрин как ставить фузы в этих программах?
За основу взял печатку Mazzz
Плата БП
IMG_20170806_112718.jpg
(42.45 КБ) 798 скачиваний
IMG_20170806_112724.jpg
(30.96 КБ) 479 скачиваний
Сам "Темброблок"
IMG_20170806_112743.jpg
(39.75 КБ) 740 скачиваний
IMG_20170806_112750.jpg
(54.29 КБ) 581 скачивание
Добавлено after 2 hours 46 minutes 49 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Вроде так?
Fuse PonyProg.JPG
(114.1 КБ) 520 скачиваний
Fuse Khazama.JPG
(35.65 КБ) 520 скачиваний
Вложения
AMP Control.rar
(123.84 КБ) 352 скачивания
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

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

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

2. Smart IR Remote - AnyMote, или бесплатный вариант с рекламой - [url=http://AnyMote%20Universal%20Remote%20+%20WiFi%20Smart%20Home%20Control]AnyMote Universal Remote + WiFi Smart Home Control[/url]. Позволяет импортировать файл пульта.

Собственно, под эти программы (возможно, и для каких-то других подойдёт) и доработан сейчас 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 раз.
boida
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Чт дек 06, 2012 23:20:07

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

Сообщение boida »

Прошил ampcontrol_m32_ks0108b.hex с архива из статьи ...
Ждущий режим
IMG_20170806_165550.jpg
(38.88 КБ) 434 скачивания
Насколько помню 80 в секундах говорит, что часы нужно запустить.
Подсветка горит на всю, и вместа дня недели прямоугольники.
На кнопку S1 реагирует. Уровни на mute и stby меняются.
Подсветка горит так же 100%.
на экране вот ...
IMG_20170806_165603.jpg
(30.15 КБ) 545 скачиваний
На кнопки реагирует, заходит в режим настройки дата/время.
Прошил под 0108A Все то же самое только половинки экрана по вертикали поменялись местами.

Плату прозвонил, обвязка дисплея и МК без "соплей", плата мытая в нефрасе.
Что посоветуете, куда копать, грешу на МК, так как при первом включении воткнул дисплей верхногами :(
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

EEPROM тоже надо прошить.
boida
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Чт дек 06, 2012 23:20:07

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

Сообщение boida »

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

Добавлено after 42 minutes 23 seconds:
WiseLord, фьюзы правильно выставил?
Последний раз редактировалось AlekseyEnergo Ср авг 09, 2017 21:34:19, всего редактировалось 1 раз.
Причина: Нарушение п2.7 правил форума. Предупрежден.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

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

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

Изображение
boida
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Чт дек 06, 2012 23:20:07

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

Сообщение boida »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3157414#p3157414"]Не знаю, -U lfuse:w:0x3F:m -U hfuse:w:0xC1:m - правильные.

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

Все ясно, буду пробовать, Последняя стабильная прошивка находится в статье?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

Вернуться в «Статьи»