Индикатор аудио сигнала на ATMEGA

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Danielxata
Родился
Сообщения: 13
Зарегистрирован: Ср дек 23, 2009 13:34:02
Откуда: Gomel

Индикатор аудио сигнала на ATMEGA

Сообщение Danielxata »

Всем котам доброго времени суток!
Собираю себе усилитель, данные вывожу на цветной дисплей от китайского телефона, и вот застопорился на индикаторе уровня входного сигнала, в виде цветной линейки, чет похожее как в советских магнитофонах.
Как делаю я: входной сигнал от звуковой карты усиливаю (lm358), затем подаю на вход ацп, читаю ацп и в зависимости от процитанных данных рисую цветную линейку, на нужное количество цветных прямоугольников. Нулем у меня считается половина питающего напряжения, то есть 512 из 1023 значений ацп. Так в чем проблема, вроде как все работает, но как-то не то, в основном эта линейка живет своей жизнью и очень редко попадает в такт входного сигнала, такое ощущение что пропускает или не успевает... мега32 на 20 мГц
Может кто подскажет как правильно реализовать чтение и вывод? или может фильтр какой собирать нужно?
Последний раз редактировалось Danielxata Пт апр 27, 2012 16:40:22, всего редактировалось 1 раз.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Индикатор аудио сигнала на ATMEGA

Сообщение Engineer_Keen »

А если подавать на вход напряжение от 0 до опорного, линейка верно его отображает? Не успевать она не может, 20MHz более чем достаточно для такого применения. Как настроен АЦП меги?
Danielxata
Родился
Сообщения: 13
Зарегистрирован: Ср дек 23, 2009 13:34:02
Откуда: Gomel

Re: Индикатор аудио сигнала на ATMEGA

Сообщение Danielxata »

В том то и дело что все верно показывает, проц работает от 4 вольт, 2 вольта - это ноль полос на линейке, и если подавать напряжение от 2 до 4 вольт и 0 до 2 вольт, шкала показывает уровень верно, вот когда бас идет, раза два например покажет высокий уровень, а на третий раз как-будто убрали сигнал, просто "катится" на "ноль" шкала...
могу видео скинуть как работает в реале

ацп работает на 1мГц от AVCC, мне так удобнее, можно стабилизировать наприжение через AREF, так работает мой БП, причем давно и без проблем
Аватара пользователя
Финский
Открыл глаза
Сообщения: 59
Зарегистрирован: Сб авг 28, 2010 13:29:43
Откуда: Докучаевск, Донецк
Контактная информация:

Re: Индикатор аудио сигнала на ATMEGA

Сообщение Финский »

Без схемы и кода - гадание на кофейной гуще.
[color=#800000]Техноманьяк и IT-шаман. Танцы с бубном на дому.[/color]
Danielxata
Родился
Сообщения: 13
Зарегистрирован: Ср дек 23, 2009 13:34:02
Откуда: Gomel

Re: Индикатор аудио сигнала на ATMEGA

Сообщение Danielxata »

Danielxata
Родился
Сообщения: 13
Зарегистрирован: Ср дек 23, 2009 13:34:02
Откуда: Gomel

Re: Индикатор аудио сигнала на ATMEGA

Сообщение Danielxata »

Пишу на Си в CVAVR
код? да ниче в нем сложного, кратко: читаю ацп, если значение больше 512, например 520, вывожу один цветной кубик, чем больше значение - тем больше кубиков и так же, если меньше 512, тем больше кубиков, так сказать))

if(sp_time>=200) // 200 тиков от таймера на 1мГц
{
read_adc(1);
if(ADCW!=res) // сравниваем с предыдущем значением, если изменилось, то идем на подрограмму выбора цвета для кубиков линейки
{
sp_left_color(); // выбор нужных цветов линейки от значения ацп
res=ADCW;
}
sp_time=0;
}

всего 16 кубиков, одному соответствует 32 значения ацп
Аватара пользователя
john_rise
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн дек 17, 2007 13:15:43

Re: Индикатор аудио сигнала на ATMEGA

Сообщение john_rise »

Включите прерывание от АЦП (ИМХО full изврат в цикле ожидать преобразование АЦП, хоть 100 МГц такта на ядро не спасёт ситуацию), пусть прерывание автоматически забирает результат, запускает следующее преобразование. Далее простая функция из диапазона 0... 1023 делает 0... 511 (от средних 511, 512 значений считается 0-лём, отклонение от 511 или 512 в большую/меньшую стороны должно давать прирост уровня на выходе, (понимаете о чём я?)). Далее результат такого преобразования суммируете в 32-х битный сумматор и каждые, например 40 мс (25 кадров в секунду) сумматор делите на число суммирований (суммирования понятно что нужно считать). От полученного результата (сумматор делить на счетчик суммирований) желательно извлечь корень. Таким образом вы получите нелинейную шкалу что-то вроде дБ. Корень(511) = 22,60530911091463044583785059216 уровня. Для Вашего дисплейчика 22 квадратика это более чем достаточно. Только не используейте функцию корня из CVAVR :evil: (это просто ППЦ а не математика), в википедии написан простой алгоритм извлечения корня, вот его и используйте - максимально быстро и компактно.

Удачи.
Боишся - не делай. Делаешь - не бойся.
Danielxata
Родился
Сообщения: 13
Зарегистрирован: Ср дек 23, 2009 13:34:02
Откуда: Gomel

Re: Индикатор аудио сигнала на ATMEGA

Сообщение Danielxata »

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

Спасибо!
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Индикатор аудио сигнала на ATMEGA

Сообщение pyzhman »

Тут еще может срабатывает то, что интерфейс мк-дисплей не моментален, есть задержка при вкачивании инфы в дисплей.
Docendo discimus
Аватара пользователя
john_rise
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн дек 17, 2007 13:15:43

Re: Индикатор аудио сигнала на ATMEGA

Сообщение john_rise »

Не сочтите за попытку поднять тему в первые ряды раздела МК, но... что получилось у автора?
Боишся - не делай. Делаешь - не бойся.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»