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

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

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


koka5555
Потрогал лапой паяльник
Сообщения: 344
Зарегистрирован: Вт окт 22, 2013 23:09:06

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

Сообщение koka5555 »

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

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

Сообщение WiseLord »

Перенастроить дату. При изменении года/месяца/числа день недели пересчитается уже по-новому. Просто в меню настройки времени увеличить и снова уменьшить один из этих параметров.
Аватара пользователя
Altair
Сверлит текстолит когтями
Сообщения: 1276
Зарегистрирован: Вс мар 01, 2009 17:49:41
Откуда: Россия

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

Сообщение Altair »

Привет всем! Подскажите, на какой печатке собирается последний вариант на ATmega32?
Ваше везение — в ваших руках: водите чёрную кошку на поводке.
Молчание не всегда означает согласие.
hornet64
Родился
Сообщения: 10
Зарегистрирован: Пт мар 13, 2015 20:11:07

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

Сообщение hornet64 »

Wiselord, на местном радиорынке наткнулся на такой радиомодуль
3667.jpg
(94.27 КБ) 709 скачиваний

Продавец уверяет, что это полный клон tea5767 выпросил у него PDF (правда на китайском языке но протокол и таблицы вроде на английском) Визуально схема подключения полностью аналогична, вплоть до номиналов деталей . Если это не сложно, гляньте на описание, возможно ли его использовать в вашем проекте.
datasheet.pdf
(247.92 КБ) 162 скачивания
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Да, судя по описанию протокола в этом даташите, это аналог TEA5767.
Frogfot
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

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

Сообщение Frogfot »

2WiseLord: Планируется ли поддержка ЖК индикаторов на базе T6963? Просто у меня есть WG160128A на данном чипе. Или как вариант - подсказать, где конкретно в проекте осуществляется вывод на дисплей, я просто перепишу прогу под данный контроллер (если народу не интересно - можно в личку). Вроде T6963 будет пошустрее чем KS108?
Хорошему коту и в декабре - март :)
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Всё отрисовывается в виртуальный кадровый буфер на 128x64 точек. Только для этого буфера требуется 1кБайт ОЗУ.

Отрисовка разных экранов происходит в display.{c,h}, При этом вызываются функции из gdfb.{c, h}, которые, в свою очередь, сводятся к функции gdDrawPixel(x, y, color) рисования точки. Эта функция разная для разных дисплеев.

Таймер TIMER0 (ks0108c, sc7920.c) организует сканирование этого буфера и вывод информации уже в железку.

Для добавления нового дисплея <name> нужно:
1. Чтобы он был размером 128x64.
2. Написать для него свой обработчик прерывания ISR (TIMER0_OVF_vect), в котором на каждое очередное прерывание в дисплей бы посылался очередной байт из буфера.
3. Добавить функции: <name>Init(), <name>Clear(), <name>SetBrightness(), <name>DrawPixel() по аналогии с имеющимися, и организовать их выбор в gdfb.c

Ввиду использования в программе кадрового буфера скорость работы дисплея некритична. Таймер настроен на выработку прерываний 20 000 раз в секунду, что для дисплея размером 128x64 требует посылки 1024 байт данных плюс несколько байт адресации, что обеспечивает скорость обновления около 18..19 кадров в секунду. Главное, чтобы дисплей за 50мкс успевал обрабатывать команды.
Frogfot
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

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

Сообщение Frogfot »

2 WiseLord: благодарю за исчерпывающий ответ.

Получается, для индикатора 160*128 имеющейся у меня М32 на кадровый буфер ОЗУ маловато будет.
Можно ли обойтись без буфера - получится ли отрисовка на лету?

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

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

Сообщение WiseLord »

Для АЦП используется тот же таймер, настроенный на 20кГц. Только преобразование выполняется каждый второй раз, т.е. с частотой 10кГц.

Всё происходит в adc.c, основная функция - getSpData().

Сначала получаем 64 выборки для левого канала, делаем для них преобразование Фурье, сохраняем результат в первые 32 байта массива buf[]. Аналогично - для правого, сохраняя результат в последние 32 байта buf[]. Получается для каждого канала 32 выборки на диапазон 0..5кГц, т.е. ~156Гц на столбец.

Основная причина использования кадрового буфера в том, что как KS0108, так и ST7920 хранят картинку внутри себя в формате 8 точек на байт (причём KS0108 - вертикально, что удобно для вывода шрифтов, а ST7920 - горизонтально). Чтобы нарисовать эту точку, необходимо вычитать из дисплея тот байт в его памяти, в котором эта точка находится, изменить в нём нужный бит, и вернуть этот байт назад в дисплей. Это занимает достаточно много времени (допустим, 10мкс на чтение и 50мкс на запись), так что для обновления всего экрана потребуется 128*64*60мкс ~ 0,5секунд. Это очень медленно. А если ещё учесть, что циклов записи может потребоваться несколько (адресация при чтении, адресация при записи, сама запись данных)...

Гораздо удобнее хранить весь кадровый буфер в ОЗУ, и весь цикл чтение-модификация-запись делать именно в ОЗУ, что очень быстро. А уже по таймеру (через те же каждые 50мкс, требуемые для цикла записи) происходит сканирование этого ОЗУ и отправление очередного байта (сразу байта(!), а не каждый из 8 бит поштучно) в дисплей.
Получается, что необходимо 128*(64/8)*50 ~ 0.05секунд, т.е. около 20 обновлений экрана в секунду.

Правда, в отношении T6963 есть свой нюанс. У него есть крайне полезные команды, позволяющие установить/сбросить бит в памяти, не затрагивая весь байт. То есть, вместо цикла чтение-модификация-запись нужна только одна запись. Так что, конкретно этот дисплей теоретически можно было бы реализовать и без кадрового буфера. А если у него длительность цикла записи не 50мкс, а много меньше, как Вы утверждаете, говоря, что он быстрее, то, возможно, что-то и можно было бы придумать с более-менее адекватными скоростями.

Правда, на любом отличном от 128x64 разрешении всё равно придётся переписывать весь display.c, устанавливая для этого разрешения другие координаты для каждого из отрисовываемых на экране элементов.

P.S. Проверил дома на своём 240x128 экранчике на t6963. 1000 раз целиком обновить содержимое экрана занимает 26 секунд, то есть полное обновление экрана требует 26мс. Попиксельное обновление потребует уже 208мс, что даёт около 4 кадров в секунду. Не очень как-то, на мой взгляд, плюс надо не забывать про то, что перед выводом точки ещё надо и посчитать её координаты.

P.P.S.
2 Frogfot:

Посидел с часик, портировал свою библиотеку для t6963c под формат, используемый в проекте. Но - без использования кадрового буфера.
Можете попробовать подключить, поиграться. На мой взгляд, без кадрового буфера всё-таки медленно работает, хотя тут может зависеть от конкретного экземпляра. Можно попробовать поиграть задержкой в функции отправки данных/команды. Но если сочтёте, что скорость устраивает - подкручивайте потом display.c в проекте под нужные координаты для вывода элементов.

Библиотеку (проверял на ATmega16) можно взять здесь, для подключения её к проекту достаточно скопировать содержимое каталога display, поправить пару строк в Makefile для выбранного экрана, настроить pins.h. Управляющих выводов у T6963 больше, чем у KS0108/ST7920, но это не страшно, ненужные можно просто подключить к земле-питанию. Нужны только WR, CD, FS, RST, остальные можно зафиксировать (CE = 0, RD = 1, RV = 0) и исключить из pins.h и кода.
Аватара пользователя
Altair
Сверлит текстолит когтями
Сообщения: 1276
Зарегистрирован: Вс мар 01, 2009 17:49:41
Откуда: Россия

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

Сообщение Altair »

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

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

Сообщение WiseLord »

Да, верно, здесь должен быть подтягивающий резистор 4.7кОм для термодатчика.
Аватара пользователя
Altair
Сверлит текстолит когтями
Сообщения: 1276
Зарегистрирован: Вс мар 01, 2009 17:49:41
Откуда: Россия

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

Сообщение Altair »

Спасибо, термодатчики работают!
Ваше везение — в ваших руках: водите чёрную кошку на поводке.
Молчание не всегда означает согласие.
Frogfot
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

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

Сообщение Frogfot »

2 WiseLord: ещё раз выражаю большую благодарность за столь подробный ответ на интересующие меня вопросы.

Пока для меня слишком много информации, буду переваривать постепенно.

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

Пока у меня есть М32 и М16 (DIP40), ОУ прикуплю (~1$), индикатор WG12864A нашёл только серо-зелёный (~20$) (если бы бело-синий - так купил бы), буду паять макет и разбираться с исходниками и математикой - переписывать под WG160128 на T6963.
Хорошему коту и в декабре - март :)
Sergey212
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс янв 06, 2013 00:40:48

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

Сообщение Sergey212 »

Уважаемый WiseLord, у меня к сожалению не управляется TDA7318. Цифровая часть работает нормально. Использую прошивку в приложении. Подскажите пожалуйста нужно ли делать какие-то изменения в еепроме? Спасибо
Вложения
ampcontrol_m32_tda7318_ls020_lm7001.hex
(43.28 КБ) 461 скачивание
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Смотрим на eeprom.h, audioproc.h. Видим, что в eeprom в ячейку eepromAudioproc (по адресу 0x28) нужно внести значение 4 (AUDIOPROC_TDA7318).
А по поводу прошивки приложенной - зачем? Я пока читать hex-ы не умею, мне как-то исходники проще :).
Последний раз редактировалось WiseLord Сб май 30, 2015 07:49:57, всего редактировалось 1 раз.
Sergey212
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс янв 06, 2013 00:40:48

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

Сообщение Sergey212 »

WiseLord писал(а):А по поводу прошивки приложенной - зачем? .

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

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

Сообщение WiseLord »

Если речь идёт об LS020 (виноват, не заметил), то нигде ничего указывать не нужно, там был целый набор прошивок под разные аудиопроцессоры.

К сожалению, TDA7318 у меня никогда не было, и код для неё (и прочих TDA731x) базируется на проверенной лично мною TDA7313, поэтому теоретически могут быть некоторые нестыковки. Но - только в смысле количества входов, наличия тонкоррекции, и прочим. А так у них абсолютно одинаковый протокол, и управляются они, судя по даташиту, одинаково.

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

В любом случае, вариант с LS020 был написан просто ради интереса, и поддерживать его я не могу ввиду отсутствия такого дисплея. Вы же выбрали самый неоптимальный для меня вариант железа - LS020 (у меня такого нет), TDA7318 (аналогично, нет железки) LM7001 (подключаемые к ней тюнеры потенциально и неплохи, но ни стерео переключить, ни уровень сигнала от них в этом устройстве никак не замерить, так что этот вариант я тоже практически не тестировал).

Рекомендую всё же в случае ATmega32 использовать дисплей на базе KS0108 или STM7920, для которых и делались последние "навороты".
Sergey212
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс янв 06, 2013 00:40:48

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

Сообщение Sergey212 »

Уважаемый WiseLord, спасибо за быстрый ответ. LS020 выбрал потому что быстро его нашел, да и по размерам он подошел отлично. Сейчас попробую прошивку для TDA7313. Отпишусь. Еще раз спасибо.
Sergey212
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс янв 06, 2013 00:40:48

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

Сообщение Sergey212 »

WiseLord писал(а):Попробуйте зашить аналогичную прошивку для TDA7313. Если по-прежнему работать не будет, то дело в железе - либо неисправна микросхема, либо где-то в разводке проблемы.

Уважаемый WiseLord. С прошивкой для TDA7313 все работает отлично. Видимо что-то с прошивкой под TDA7318. Если найдете времечко может подправите. Заранее спасибо.


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

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

Сообщение WiseLord »

Ещё раз глянул на старые исходники, ничего такого там не вижу, что бы могло повлиять на звук на TDA7318. Но, на всякий случай, собрал из последней версии "старых" исходников эти две прошивки. Проверьте их.

Ну и, на всякий случай, попробуйте также взять последнюю прошивку для KS0108 (или ST7920) и прописать там в eeprom нужные Вам параметры тюнера и аудио. Да, работать LS020 с ней не будет, но мне было бы интересно узнать, как эта, последняя, прошивка работает с TDA7318 (по адресу 0x28 число 0x04).
Вложения
ampcontrol_m32_ls020_lm7001.7z
(17.02 КБ) 244 скачивания
Ответить

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