Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
А что ещё можно придумать? Вроде как всё задуманное устройство делает, даже больше того.
У меня, в целом, идеи закончились. Разве что по мелочам допиливать, возможные баги исправлять.
Может быть, на варианте с ATmega32 стоит ещё будильник реализовать и таймер отключения через заданное время.
А так.. особых стоящих идей уже и нет.
Этот проект у меня развивался постепенно как результат освоения AVR, которые я начал изучать где-то год назад, до этого с микроконтроллерами дела не имев. Пожалуй, пора переходить на что-то серьёзнее, вроде stm32.
У меня, в целом, идеи закончились. Разве что по мелочам допиливать, возможные баги исправлять.
Может быть, на варианте с ATmega32 стоит ещё будильник реализовать и таймер отключения через заданное время.
А так.. особых стоящих идей уже и нет.
Этот проект у меня развивался постепенно как результат освоения AVR, которые я начал изучать где-то год назад, до этого с микроконтроллерами дела не имев. Пожалуй, пора переходить на что-то серьёзнее, вроде stm32.
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Уважаемый WiseLord, такой вопрос, можно ли на не используемых выводах ext1 и ext2, реализовать дополнительные sda и scl?, Спасибо 
Кстати, насчет будильника и таймера, отличная идея!
Кстати, насчет будильника и таймера, отличная идея!
-
skaarjik
- Первый раз сказал Мяу!
- Сообщения: 34
- Зарегистрирован: Чт дек 23, 2010 15:40:06
- Откуда: Беларусь, Гродно
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Будильник и таймер выключения - полезные функции.
Интересует возможность добавления в Ваше устройство контроля температуры обоих каналов усилителя. Возможно ли реализовать данную функцию без существенного влияния на производительность и логику работы устройства. Насколько я понимаю, 1-wire медленный и чувствительный к задержкам протокол. Не понятно в какой момент и с какой частотой лучше опрашивать датчики. Может есть смысл использовать датчики с i2c? Очень хочу собрать Ваш контроллер, но конструкция системы охлаждения моего усилителя подразумевает активное охлаждение вентилятором, хочется, чтобы он работал не постоянно.
Интересует возможность добавления в Ваше устройство контроля температуры обоих каналов усилителя. Возможно ли реализовать данную функцию без существенного влияния на производительность и логику работы устройства. Насколько я понимаю, 1-wire медленный и чувствительный к задержкам протокол. Не понятно в какой момент и с какой частотой лучше опрашивать датчики. Может есть смысл использовать датчики с i2c? Очень хочу собрать Ваш контроллер, но конструкция системы охлаждения моего усилителя подразумевает активное охлаждение вентилятором, хочется, чтобы он работал не постоянно.
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
конструкция системы охлаждения моего усилителя подразумевает активное охлаждение вентилятором, хочется, чтобы он работал не постоянно.
Можно сделать на термисторе.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Э... а собственно, зачем?jaxkz писал(а):ожно ли на не используемых выводах ext1 и ext2, реализовать дополнительные sda и scl?
В принципе, можно. Я уже делал несколько вещей с DS18B20, и, в принципе, в курсе тонкостей работы с 1-wire. Конечно, если делать что-то тупо в стиле _delay_ms(750) (750мс - время замера температуры) - так, конечно, каши не сваришь. Но у меня есть уже наработки в замера температуры этими датчиками в фоне, когда за временные задержки отвечает аппаратный таймер. Так что добавить функционал этот в вариант с ATmega32 с кадровым буфером (только графические дисплеи 128x64) вполне можно. Вот только свободных ножек у контроллера-то нету. Разве что те три, что задействуются для LM7001 в одном из четырёх вариантов тюнера.skaarjik писал(а):Возможно ли реализовать данную функцию без существенного влияния на производительность и логику работы устройства.
-
skaarjik
- Первый раз сказал Мяу!
- Сообщения: 34
- Зарегистрирован: Чт дек 23, 2010 15:40:06
- Откуда: Беларусь, Гродно
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
наработки в замерах температуры этими датчиками в фоне, когда за временные задержки отвечает аппаратный таймер
Это было бы замечательно. Дисплей у меня будет на ks0108 128X64. Скажите, заработает ли код на atmega64 или нужно будет переименовывать некоторые регистры? У atmega64 больше ножек и у меня она есть в наличии.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Как я уже говорил - у контроллера уже нету свободных ножек. А так-то добавить не проблема.
-
skaarjik
- Первый раз сказал Мяу!
- Сообщения: 34
- Зарегистрирован: Чт дек 23, 2010 15:40:06
- Откуда: Беларусь, Гродно
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Извините, может я конечно чего-то не понимаю, но если собрать проект под Atmega64? В ней больше портов. Можно добавить контроль температуры, и останутся ножки для других пользовательских нужд.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Можете попробовать - исходники доступны. Тем более, я вчера переписал код так, что сейчас можно подключать всё к любым ногам контроллера. Вся конфигурация вынесена в файл pins.h, а сам МК задаётся в Makefile. Только шина I2C должна остаться на аппаратной шине МК.
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Э... а собственно, зачем?
Просто у меня усилитель заводской, на 4 канала, и было бы отлично управлять каналами, двумя отдельными аудио процессорами (завалялось 7 шт TDA7439). Но если это невозможно, то увы...
-
skaarjik
- Первый раз сказал Мяу!
- Сообщения: 34
- Зарегистрирован: Чт дек 23, 2010 15:40:06
- Откуда: Беларусь, Гродно
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Можете попробовать - исходники доступны
Попробовал. Вот архив с кодом и моделью для Proteus. Вроде работает. Почему-то, по сравнению с моделью на atmega32, приходится дольше держать кнопки чтобы они отработали. Не знаю в чем дело.
Я был бы очень Вам признателен, если бы Вы добавили в этот вариант свои наработки по 1-wire.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Ок, посмотрю.skaarjik писал(а):Я был бы очень Вам признателен, если бы Вы добавили в этот вариант свои наработки по 1-wire.
Как я понимаю, идея должна быть следующей - при температуре одного датчика выше некоего порога соответствующий порт ставим в 1, меньше - в 0. То же и для другого датчика.
Ну и стоит обеспечить какой-нибудь гистерезис, градусов в 10, чтобы туда-сюда часто не щёлкало. Так?
Может, ATmega64 дольше обсчитывается в протеусе. Там внизу шкала типа "реального" для МК времени есть, можно оценить.skaarjik писал(а):приходится дольше держать кнопки чтобы они отработали
Можно просто взять TDA7313 - у неё 4 выхода.jaxkz писал(а):у меня усилитель заводской, на 4 канала, и было бы отлично управлять каналами, двумя отдельными аудио процессорами
Но если всё же нужно на TDA7439 делать, то подключать их надо к одной шине, но не напрямую, а через ключи на полевиках. Соответственно, подключаем ключами к шине одну микросхему - шлём в неё нужные данные - отключаем от шины. И аналогично - для другой микросхемы.
А вообще, есть готовые двунаправленные мультиплексоры, как раз для подобных целей.
Но тут много логики работы переписывать надо.
- Александр76
- Потрогал лапой паяльник
- Сообщения: 392
- Зарегистрирован: Вс янв 25, 2009 23:17:22
- Откуда: 76RUS
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
ув.WiseLord,если будете делать с двумя термодатчиками,сделайте пожалуйста вариант с одним тоже
-
skaarjik
- Первый раз сказал Мяу!
- Сообщения: 34
- Зарегистрирован: Чт дек 23, 2010 15:40:06
- Откуда: Беларусь, Гродно
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Ок, посмотрю.
Спасибо! Да, при некотором значении температуры любого из датчиков, включается вентилятор, охлаждает на 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
Да, я это тоже всё уже заметил.
А по поводу задержки - просто для 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 с кадровым буфером) стоит даже написать новую статью, так как старая не учитывает многие новые возможности по сравнению с изначальным вариантом.
А по поводу задержки - просто для 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
Супер, я думал это не возможно, анализатор не тормозит!
Поправьте пожалуйста rc5Init() для atmega64.
Символы переноса наставил Programmers Notepad из WinAVR или Notepad++, я пока не понял. Поправил в архиве на Unix-формат на всякий случай
Спасибо! Ждем продолжения.
Поправьте пожалуйста rc5Init() для atmega64.
кошмар-кошмар
Символы переноса наставил Programmers Notepad из WinAVR или Notepad++, я пока не понял. Поправил в архиве на Unix-формат на всякий случай
Спасибо! Ждем продолжения.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
А что там не так с rc5Init()?
Кстати, Вы ATmega64 на железе пробуете или как я, только в виде модели Proteus?
Кстати, Вы ATmega64 на железе пробуете или как я, только в виде модели Proteus?
-
skaarjik
- Первый раз сказал Мяу!
- Сообщения: 34
- Зарегистрирован: Чт дек 23, 2010 15:40:06
- Откуда: Беларусь, Гродно
Re: Темброблок/спектранализатор на ATmega16, TDA7439 и SG128
Пока только в виде модели Proteus, жду заказанного дисплея.
Учитывая, что INT1 занят i2c, для atmega64, если подключить RC5 к INT4, должно быть так:
Поправьте если не прав.
А что там не так с 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
Да, похоже, Вы правы.
Прерываний INTx в ATmega64 побольше, и настраиваются они уже другими регистрами.
P.S. Ну что ж, похоже для ATmega64 всё работает. По крайней мере в Proteus.
Вход в режим редактирования температурного порога срабатывания - через одновременное длительное нажатие кнопок 1 и 3.
Над возможными ложными показаниями температуры надо ещё подумать будет. Но, в принципе, уже можно собирать в железе и тестировать.
P.P.S. Ну и для ATmega32 тоже эту функцию доделал. Температурный контроль присутствует для всех вариантов прошивки, кроме варианта с тюнером LM7001, который использует те же ножки для управления.
Прерываний 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
Извиняюсь, последняя выложенная прошивка (для ATmega32) не будет работать без термодатчиков и подтягивающего резистора на линии 1-wire (линия в нуле ошибочно воспринимается как наличие датчика и МК бесконечно ждёт ответа), так что вот исправление этого бага, где включается встроенный в МК резистор. Обнаружилось дома на реальном железе без этого резистора.
- Вложения
-
- ampcontrol_fb.7z
- (130.29 КБ) 333 скачивания