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

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


Ответить

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

Пн дек 30, 2013 22:36:53

Вопросы и предложения по статье 1 и статье 2 можно складывать сюда.

P.S. Git-репозиторий с последними исходниками проекта находится на GitHub.

Основной прошивкой на текущий момент является вариант на ATmega32 с кадровым буфером. Он поддерживает графические дисплеи 128x64:

а) на базе KS0108:
- тип А (прямые лог. уровни на входах CS1/CS2) (схема подключения);
- тип Б (обратные лог. уровни на CS1/CS2), с другой распиновкой (схема подключения);
б) на базе контроллера ST7920, с распиновкой совпадающей с с KS0108A (схема подключения).

Данный вариант прошивки наиболее предпочтителен ввиду наибольшей функциональности:

- Поддержка режима обучения кнопкам любого пульта стандарта RC5 без необходимости ручной правки EEPROM в hex-редакторе
- Управление вентиляторами охлаждения усилителя мощности на базе данных от термодатчиков типа DS18B20 (функциональность лично мною проверена только в эмуляторе, не в железе)
- Высокая скорость обновления дисплея за счёт кадрового буфера
- Графические значки для регулируемых функций.
- Редактор параметров EEPROM в виде отдельного приложения

Именно этот вариант прошивки будет расширяться функционально в будущем.

Также этот вариант прошивки может быть легко перекомпилирован под любой другой контроллер AVR с достаточным объёмом RAM(2kB)/Flash(32kB)/EEPROM(1кБ). Потребуется лишь перенастроить таймеры и источник внешнего прерывания для обработки сигнала с пульта ДУ и описать подключение ножек в отдельном файле pins.h.

Чуть менее функционален вариант на ATmega16 (исходный код). Его также можно собрать и под ATmega32 без правки исходников, изменив соответственно переменную MCU в Makefile.
Просьба обновить первое сообщение в ветке форума. Ввиду того, что проект перехал с закрывшегося googlecode на github, практически все старые ссылки оказались битыми.

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

Достоинства:
- поддержка графических дисплеев LS020 из телефонов Siemens *65 (мною вариант проверялся только в эмуляторе, по поводу схемы подключения интересуйтесь у форумчан или по файлу ls020.h.

Недостатки:
- нет режима обучения пульту (только отображение кодов нажимаемых кнопок, которые можно записать на бумажку и потом руками внести в EEPROM);
- нет поддержки термодатчиков для управления вентиляторами.

Также есть "дешёвый" вариант на ATmega8 (исходный код), поддерживающий только символьные дисплеи 16x2.

Достоинства:
- доступные дисплей и контроллер.
Недостатки:
- только моно режим отображения спектра

Имеется ещё один вариант на ATmega8 (исходный код), с жёстко фиксированным сочетанием железа - дисплей 16x2, аудиопроцессор TDA7313, без поддержки тюнера.

Достоинства по сравнению с предыдущим вариантом:
- возможность смены языка (русский - английский) на лету
- "заточенность" под одну печатную плату

Имеющиеся схемы и проекты для всех вариантов можно найти на GitHub: m8, m8-lcd, m16, m32.

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

Обновлённые прошивки на 21.03.2016 прикреплены к сообщению 2700954. Информация в шапке темы также актуальна на эту дату.
Последний раз редактировалось aen Пт авг 05, 2016 09:54:20, всего редактировалось 3 раз(а).
Причина: 22.03.2016 года внес изменения в данный пост по просьбе автора.

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

Пн дек 30, 2013 22:58:52

WiseLord - браво. Не могу не отметить комплексное и свежее решение. Пожалуй лучшее на данный момент на AVR. Однако экран не самый оптимистичный по цене. (Тимофей Носов).

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

Пн дек 30, 2013 23:37:08

По сути этот проект был у меня "оцифровкой" ранее сделанного усилителя на TDA7293 / LM1036. Высота корпуса около 9см позволила поставить такой дисплей (плата дисплея намного шире высоты самого дисплея)
У меня в закромах есть ещё один аналогичный усилитель, но корпус я у него пониже. Его я планирую "оцифровать" в ближайшее время, и туда поместится только что-то поменьше, вроде WH1602. Так что, в ближайшее время (в течение этой зимы, думаю) должна появиться аналогичная более простая конструкция (со спектроанализатором) уже на более привычных HD44780-based знакосинтезирующих дисплеях. Благо, самое сложное - математика (разные преобразования Фурье) уже отработана, а перевести схему на другой дисплей много проще.

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

Ср янв 01, 2014 15:06:06

WiseLord
возможно ли прошивку изменить под PT2313L (аналог TDA7313) ?

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

Ср янв 01, 2014 17:03:24

Думаю, да.
У меня только нет этой микросхемы, поэтому протестировать не смогу. Но поменять коды команд, по идее, не сложно.

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

Ср янв 01, 2014 18:23:21

Это хорошо. А мне проще было достать PT2313L, сейчас собран блок на ней.Тему закину в закладки, когда индикатор появится, то напомню о себе :))

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

Чт янв 02, 2014 00:02:48

Добрый вечер. Отличная работа. Статья понравилась. На данный момент собрано управление отсюда http://radiokot.ru/circuit/audio/amplifier/31/ только по третьей версии . Ваша привлекла спектроанализатором который мне нравится. После праздников попробую повторить если найду дисплей тот что хочу. С надеждой жду развития девайса.

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

Чт янв 02, 2014 04:40:56

Ссылка, в начале статьи, не действительна.

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

Чт янв 02, 2014 18:54:38

http://radiokot.ru/circuit/audio/filter/05/ Имелась в виду эта ссылка, статью пока поправить не могу (на модерации)

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

Чт янв 02, 2014 20:02:26

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

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

Чт янв 02, 2014 20:45:17

Красивые шрифты высотой 16/24 мне рисовать было просто лень, я и с 8x6 шрифтом помучился. Поэтому я просто смасштабировал в 2-3 раза имеющиеся высотой 8. Хотелось побыстрее получить рабочую схему, не отвлекаясь особо на дизайн. Спектроанализатор кнопкой на пульте переключается в другой режим (вместо двух спектров обоих каналов - один смешанный).
На разъёме управления вентилятором оставлены пара неиспользуемых ног контроллера, как раз на случай подключения чего-нибудь вроде датчика температуры.

Худо-бедно снятый видеоролик работы устройства можно посмотреть на YouTube. Там же в моём профиле ещё пара роликов на разных этапах разработки.

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

Пт янв 03, 2014 02:13:00

Очень понравилось устройство. Как увидел и прочитал статью, захотелось собрать.
А можно будет вместо энкодера PEC-12 применить валкодер на базе шагового двигателя?
Такой как в этой конструкции: http://radiokot.ru/circuit/audio/amplifier/31/
Там автор что-то в прошивке "подкручивал" специально, чтобы нормально работали и контактные и бесконтактные энкодеры.

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

Пт янв 03, 2014 10:53:47

Бегло погуглил такую замену валкодера. Насколько я понимаю, он выдаёт похожие импульсы, поэтому его, наверное, всё же можно подключить. Разве что понадобится отключить по этим входам микроконтроллера внутренние резисторы подтяжки. Да и импульсов на оборот у него 200 - в 10 раз больше, чем у механического - придётся в коде делить импульсы. Так что, наверное, доработка программы всё же понадобится, но, не имея на руках такого девайса, судить сложно.

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

Сб янв 04, 2014 23:36:46

просмотрев видео появилось небольшое предложение: надписи немного посдвигать от краем к центру будет смотреться красивее

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

Вс янв 05, 2014 23:56:16

Описанный в статье усилитель отдал брату, так что сейчас для доводки программы буду собирать новый комплект управления/темброблока.

Сегодня на рынке купил дисплей WG12864B, весь вечер промучился с ним, да так что-то и не завёл. Подозреваю бракованный экземпляр. Тот факт, что в нём питание перепутано, учёл сразу, так что спалить не мог. И то, что в нём, как пишут в интернетах, CS1/CS2 сигналы другой полярности, нежели в A версии, тоже учитывал. Посему вопрос к котам, которые работали с такими дисплеями: никто не сталкивался с тем, что после подачи питания горит лишь одна строка и дисплей никак не реагирует на команды/данные?

Изображение

Проштудировав даташиты на дисплеи, сделал для себя небольшую табличку (выше - графические, ниже - знакосинтезирующие):
Изображение

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

В сообщениях выше звучали просьбы/пожелания вроде поддержки разных дисплеев и микросхем темброблока. И глядя на эту табличку, я подумал, что теоретически можно написать программу так, чтобы "автодетектировать" это оборудование. Тут я, правда, немного лукавлю. На самом деле я имею в виду следующее:

В схеме (и печатной плате) предусмотреть на порту B (к нему подключается линия данных дисплея) возможность подключения подтягивающих резисторов ~1кОм на к земле.

Далее, при включении питания, перед инициализацией дисплеев и всего прочего переводить порт B в режим входов с встроенной подтяжкой к питанию и считывать состояние входа. Поскольку по даташиту встроенные pull-up резисторы имеют номинал 20-50кОм, то при наличии внешнего резистора на земле из порта будет читаться 0, при отсутствии - 1.

Ну а дальше - уже как программу напишешь. Например, при 0 на PB0 можно инициализировать дисплей как графический, при 1 - как текстовый, 0 или 1 на PB1 может отвечать за полярность CS1/CS2, на PB2 - за TDA7436/TDA7313, например. Так что одна и та же прошивка может работать с разным оборудованием, в зависимости от наличия этих резисторов. А на обычную работу они влиять, по идее, не должны.

Другой вопрос, поместится ли такая программа в flash. Особенно, если большие (16 или 24 пиксела высотой) шрифты рисовать, а не масштабировать из 8-пиксельных. Хотя тут можно и ATmega32 взять, они с ATmega16 не особо различаются.

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

Вт янв 07, 2014 08:05:20

WiseLord
Да, было бы очень удобно, если такой вариант прошивки написали.

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

Сб янв 11, 2014 11:22:08

если кому не трудно, выложите скрин с фузами под пони прог, а то в програмировании не особо силен.
собрал сейчас устройство, прошил мегу, поставил вот это lfuse:w:0xff:m -U hfuse:w:0xd1:m. включаю ни кого, очень слабо на матрице светится подсветка, регулеровка фокуса ни к чему ни привела, что может быть и что должно быть на матрице при первом включении?

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

Сб янв 11, 2014 20:10:03

При первом включении должны отображаться часы на слабой яркости (определяемой суммарным сопротивлением R10 и R17. Идти они не будут, так как в часах реального времени DS1307 не сброшен один бит, который автоматически сбросится при начале настройки часов, и они пойдут. Если нажать одну из кнопок (подключенную к PD0 микроконтроллера), откроется транзистор Q1, яркость повысится и система выйдет из режима ожидания, в котором будут работать и все остальные кнопки, помимо PD0. Там и часы можно настроить (длительное нажатие на кнопку PD5).

По поводу fuse-битов - галочки должны стоять (бит включен = 0) на SPIEN, EESAVE, BOOTSZ0 и BOOTSZ1. Остальное - галочки сняты (бит выключен = 1).

Для проверки дисплея попробуйте зашить hex-файл (приложен к посту). Это я последние пару дней переписывал библиотеку для дисплея и рисовал красивые гладкие шрифты + текущая версия библиотеки более корректна в плане таймингов. В прошивке для спектроанализатора используется более простой первоначальный вариант жёстко заданным таймингом 10 мкс на команду дисплею (для моего дисплея хватало с двухкратным запасом, но нет гарантии, что попадётся более медленный дисплей). В новой библиотеке команда посылается дисплею только после проверки флага его готовности.

В ближайшее время подключу новую библиотеку к основному проекту и выложу новые прошивки.

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

Сб янв 11, 2014 21:34:16

что-то непонятки вобще!!!!!! зашиваю вашу тестовую прошивку, все отлично, побежали циферки и буковки), а те прошивки которые из архива к схеме, не хотят, в чем дело??? :( :(

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

Сб янв 11, 2014 23:24:09

Как я и думал, дело может быть в таймингах дисплея. В старой прошивке они жёстко заданы (10мкс), и ваш экземпляр дисплея может не успевать отрабатывать.

P.S. Попробуйте прошивку из вложения. Здесь я перенёс систему опроса статуса дисплея на новый лад (пока только её, без новых шрифтов).
Последний раз редактировалось AlekseyEnergo Вс янв 12, 2014 01:27:48, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.7правил форума. Подредактировал. Предупредил!
Ответить