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

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

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


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

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

Сообщение WiseLord »

А что ещё можно придумать? Вроде как всё задуманное устройство делает, даже больше того.

У меня, в целом, идеи закончились. Разве что по мелочам допиливать, возможные баги исправлять.

Может быть, на варианте с ATmega32 стоит ещё будильник реализовать и таймер отключения через заданное время.

А так.. особых стоящих идей уже и нет.

Этот проект у меня развивался постепенно как результат освоения AVR, которые я начал изучать где-то год назад, до этого с микроконтроллерами дела не имев. Пожалуй, пора переходить на что-то серьёзнее, вроде stm32.
Аватара пользователя
jaxkz
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 18, 2014 07:42:07

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

Сообщение jaxkz »

Уважаемый WiseLord, такой вопрос, можно ли на не используемых выводах ext1 и ext2, реализовать дополнительные sda и scl?, Спасибо :))

Кстати, насчет будильника и таймера, отличная идея!
skaarjik
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 15:40:06
Откуда: Беларусь, Гродно

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

Сообщение skaarjik »

Будильник и таймер выключения - полезные функции.
Интересует возможность добавления в Ваше устройство контроля температуры обоих каналов усилителя. Возможно ли реализовать данную функцию без существенного влияния на производительность и логику работы устройства. Насколько я понимаю, 1-wire медленный и чувствительный к задержкам протокол. Не понятно в какой момент и с какой частотой лучше опрашивать датчики. Может есть смысл использовать датчики с i2c? Очень хочу собрать Ваш контроллер, но конструкция системы охлаждения моего усилителя подразумевает активное охлаждение вентилятором, хочется, чтобы он работал не постоянно.
Аватара пользователя
jaxkz
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 18, 2014 07:42:07

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

Сообщение jaxkz »

конструкция системы охлаждения моего усилителя подразумевает активное охлаждение вентилятором, хочется, чтобы он работал не постоянно.

Можно сделать на термисторе.
Спойлерhttp://схема-авто.рф/%D1%82%D0%B5%D1%80%D0%BC%D0%BE%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80-%D0%B4%D0%BB%D1%8F-%D0%B2%D0%B5%D0%BD%D1%82%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D0%B0.html
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

jaxkz писал(а):ожно ли на не используемых выводах ext1 и ext2, реализовать дополнительные sda и scl?
Э... а собственно, зачем?
skaarjik писал(а):Возможно ли реализовать данную функцию без существенного влияния на производительность и логику работы устройства.
В принципе, можно. Я уже делал несколько вещей с DS18B20, и, в принципе, в курсе тонкостей работы с 1-wire. Конечно, если делать что-то тупо в стиле _delay_ms(750) (750мс - время замера температуры) - так, конечно, каши не сваришь. Но у меня есть уже наработки в замера температуры этими датчиками в фоне, когда за временные задержки отвечает аппаратный таймер. Так что добавить функционал этот в вариант с ATmega32 с кадровым буфером (только графические дисплеи 128x64) вполне можно. Вот только свободных ножек у контроллера-то нету. Разве что те три, что задействуются для LM7001 в одном из четырёх вариантов тюнера.
skaarjik
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 15:40:06
Откуда: Беларусь, Гродно

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

Сообщение skaarjik »

наработки в замерах температуры этими датчиками в фоне, когда за временные задержки отвечает аппаратный таймер

Это было бы замечательно. Дисплей у меня будет на ks0108 128X64. Скажите, заработает ли код на atmega64 или нужно будет переименовывать некоторые регистры? У atmega64 больше ножек и у меня она есть в наличии.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Как я уже говорил - у контроллера уже нету свободных ножек. А так-то добавить не проблема.
skaarjik
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 15:40:06
Откуда: Беларусь, Гродно

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

Сообщение skaarjik »

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

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

Сообщение WiseLord »

Можете попробовать - исходники доступны. Тем более, я вчера переписал код так, что сейчас можно подключать всё к любым ногам контроллера. Вся конфигурация вынесена в файл pins.h, а сам МК задаётся в Makefile. Только шина I2C должна остаться на аппаратной шине МК.
Аватара пользователя
jaxkz
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 18, 2014 07:42:07

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

Сообщение jaxkz »

Э... а собственно, зачем?
:)) :)) :))
Просто у меня усилитель заводской, на 4 канала, и было бы отлично управлять каналами, двумя отдельными аудио процессорами (завалялось 7 шт TDA7439). Но если это невозможно, то увы... :))
skaarjik
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 15:40:06
Откуда: Беларусь, Гродно

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

Сообщение skaarjik »

Можете попробовать - исходники доступны

Попробовал. Вот архив с кодом и моделью для Proteus. Вроде работает. Почему-то, по сравнению с моделью на atmega32, приходится дольше держать кнопки чтобы они отработали. Не знаю в чем дело.

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

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

Сообщение WiseLord »

skaarjik писал(а):Я был бы очень Вам признателен, если бы Вы добавили в этот вариант свои наработки по 1-wire.
Ок, посмотрю.

Как я понимаю, идея должна быть следующей - при температуре одного датчика выше некоего порога соответствующий порт ставим в 1, меньше - в 0. То же и для другого датчика.

Ну и стоит обеспечить какой-нибудь гистерезис, градусов в 10, чтобы туда-сюда часто не щёлкало. Так?
skaarjik писал(а):приходится дольше держать кнопки чтобы они отработали
Может, ATmega64 дольше обсчитывается в протеусе. Там внизу шкала типа "реального" для МК времени есть, можно оценить.
jaxkz писал(а):у меня усилитель заводской, на 4 канала, и было бы отлично управлять каналами, двумя отдельными аудио процессорами
Можно просто взять TDA7313 - у неё 4 выхода.
Но если всё же нужно на TDA7439 делать, то подключать их надо к одной шине, но не напрямую, а через ключи на полевиках. Соответственно, подключаем ключами к шине одну микросхему - шлём в неё нужные данные - отключаем от шины. И аналогично - для другой микросхемы.
А вообще, есть готовые двунаправленные мультиплексоры, как раз для подобных целей.
Но тут много логики работы переписывать надо.
Аватара пользователя
Александр76
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Вс янв 25, 2009 23:17:22
Откуда: 76RUS

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

Сообщение Александр76 »

ув.WiseLord,если будете делать с двумя термодатчиками,сделайте пожалуйста вариант с одним тоже
skaarjik
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 15:40:06
Откуда: Беларусь, Гродно

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

Сообщение skaarjik »

Ок, посмотрю.

Спасибо! Да, при некотором значении температуры любого из датчиков, включается вентилятор, охлаждает на 5 градусов и выключается. Регулировка с помощью PWM наверное слишком круто будет. Возможно, следует сделать проверку на резкие изменения температуры, если есть вероятность проскакивания ошибочных значений.

Может, ATmega64 дольше обсчитывается в протеусе

Похоже, пишет, что симуляция идет не в реальном времени

PS. Не заметил сразу, что пин RC5 в версии с atmega32 привязан к прерыванию INT1. В atmega64 INT1 и INT0 совпадают с пинами i2c. Перенес RC5 на пин PE4 и прерывание INT4, надеюсь, что правильно перенсатроил регистры:

https://www.dropbox.com/s/rhj00tela3ptx ... 4.zip?dl=0
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Да, я это тоже всё уже заметил.
А по поводу задержки - просто для Timer2 у ATmega64, как оказалось, другие предделители - вот оно и получилось в 8 раз дольше.

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

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

Думаю, это получится и для ATmega32 реализовать, используя те же выходы EXT. Т.е. вариант спектроанализатора с LM7001 будет без этой фичи, остальные - уже с ней.

По поводу ошибочных значений - 1-wire протокол поддерживает контрольную сумму (ею является последний из 8 принимаемых байт). Пока с CRC ещё не имел дела, но стоит попробовать, чтобы при ошибке в контрольной сумме просто не обновлять переменную с температурой.

По поводу ШИМ - тоже, в целом не проблема. По аналогии с яркостью. Но оставим это на будущее.

Код того, что есть на данный момент: https://code.google.com/p/ampcontrol/so ... /?name=m64

Проект в Proteus во вложении.

P.S. Кстати, то, чем Вы открываете исходники, портит файлы - добавляет в конец каждой строки перенос в стиле Windows. Когда пытаюсь смотреть git diff в архиве - кошмар-кошмар.

P.P.S. Если всё это реализовать.. для нового проекта (вариант на ATmega32 с кадровым буфером) стоит даже написать новую статью, так как старая не учитывает многие новые возможности по сравнению с изначальным вариантом.
Вложения
ampcontrol_m64fb_ks0108.DSN.7z
(19.7 КБ) 284 скачивания
skaarjik
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 15:40:06
Откуда: Беларусь, Гродно

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

Сообщение skaarjik »

Супер, я думал это не возможно, анализатор не тормозит!
Поправьте пожалуйста rc5Init() для atmega64.

кошмар-кошмар

Символы переноса наставил Programmers Notepad из WinAVR или Notepad++, я пока не понял. Поправил в архиве на Unix-формат на всякий случай :)

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

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

Сообщение WiseLord »

А что там не так с rc5Init()?

Кстати, Вы ATmega64 на железе пробуете или как я, только в виде модели Proteus?
skaarjik
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 15:40:06
Откуда: Беларусь, Гродно

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

Сообщение skaarjik »

Пока только в виде модели Proteus, жду заказанного дисплея.
А что там не так с rc5Init()?

Учитывая, что INT1 занят i2c, для atmega64, если подключить RC5 к INT4, должно быть так:

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

EICRB |= (1<<ISC40);            /* Set INT4 to trigger on any edge */

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

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

Сообщение WiseLord »

Да, похоже, Вы правы.
Прерываний INTx в ATmega64 побольше, и настраиваются они уже другими регистрами.

P.S. Ну что ж, похоже для ATmega64 всё работает. По крайней мере в Proteus.

Вход в режим редактирования температурного порога срабатывания - через одновременное длительное нажатие кнопок 1 и 3.

Над возможными ложными показаниями температуры надо ещё подумать будет. Но, в принципе, уже можно собирать в железе и тестировать.

P.P.S. Ну и для ATmega32 тоже эту функцию доделал. Температурный контроль присутствует для всех вариантов прошивки, кроме варианта с тюнером LM7001, который использует те же ножки для управления.
Вложения
ampcontrol_m32fb_0878960.7z
(95.64 КБ) 271 скачивание
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Извиняюсь, последняя выложенная прошивка (для ATmega32) не будет работать без термодатчиков и подтягивающего резистора на линии 1-wire (линия в нуле ошибочно воспринимается как наличие датчика и МК бесконечно ждёт ответа), так что вот исправление этого бага, где включается встроенный в МК резистор. Обнаружилось дома на реальном железе без этого резистора.
Вложения
ampcontrol_fb.7z
(130.29 КБ) 333 скачивания
Ответить

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