Индикатор аудио сигнала на ATMEGA
-
Danielxata
- Родился
- Сообщения: 13
- Зарегистрирован: Ср дек 23, 2009 13:34:02
- Откуда: Gomel
Индикатор аудио сигнала на ATMEGA
Всем котам доброго времени суток!
Собираю себе усилитель, данные вывожу на цветной дисплей от китайского телефона, и вот застопорился на индикаторе уровня входного сигнала, в виде цветной линейки, чет похожее как в советских магнитофонах.
Как делаю я: входной сигнал от звуковой карты усиливаю (lm358), затем подаю на вход ацп, читаю ацп и в зависимости от процитанных данных рисую цветную линейку, на нужное количество цветных прямоугольников. Нулем у меня считается половина питающего напряжения, то есть 512 из 1023 значений ацп. Так в чем проблема, вроде как все работает, но как-то не то, в основном эта линейка живет своей жизнью и очень редко попадает в такт входного сигнала, такое ощущение что пропускает или не успевает... мега32 на 20 мГц
Может кто подскажет как правильно реализовать чтение и вывод? или может фильтр какой собирать нужно?
Собираю себе усилитель, данные вывожу на цветной дисплей от китайского телефона, и вот застопорился на индикаторе уровня входного сигнала, в виде цветной линейки, чет похожее как в советских магнитофонах.
Как делаю я: входной сигнал от звуковой карты усиливаю (lm358), затем подаю на вход ацп, читаю ацп и в зависимости от процитанных данных рисую цветную линейку, на нужное количество цветных прямоугольников. Нулем у меня считается половина питающего напряжения, то есть 512 из 1023 значений ацп. Так в чем проблема, вроде как все работает, но как-то не то, в основном эта линейка живет своей жизнью и очень редко попадает в такт входного сигнала, такое ощущение что пропускает или не успевает... мега32 на 20 мГц
Может кто подскажет как правильно реализовать чтение и вывод? или может фильтр какой собирать нужно?
Последний раз редактировалось Danielxata Пт апр 27, 2012 16:40:22, всего редактировалось 1 раз.
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Индикатор аудио сигнала на ATMEGA
А если подавать на вход напряжение от 0 до опорного, линейка верно его отображает? Не успевать она не может, 20MHz более чем достаточно для такого применения. Как настроен АЦП меги?
-
Danielxata
- Родился
- Сообщения: 13
- Зарегистрирован: Ср дек 23, 2009 13:34:02
- Откуда: Gomel
Re: Индикатор аудио сигнала на ATMEGA
В том то и дело что все верно показывает, проц работает от 4 вольт, 2 вольта - это ноль полос на линейке, и если подавать напряжение от 2 до 4 вольт и 0 до 2 вольт, шкала показывает уровень верно, вот когда бас идет, раза два например покажет высокий уровень, а на третий раз как-будто убрали сигнал, просто "катится" на "ноль" шкала...
могу видео скинуть как работает в реале
ацп работает на 1мГц от AVCC, мне так удобнее, можно стабилизировать наприжение через AREF, так работает мой БП, причем давно и без проблем
могу видео скинуть как работает в реале
ацп работает на 1мГц от AVCC, мне так удобнее, можно стабилизировать наприжение через AREF, так работает мой БП, причем давно и без проблем
- Финский
- Открыл глаза
- Сообщения: 59
- Зарегистрирован: Сб авг 28, 2010 13:29:43
- Откуда: Докучаевск, Донецк
- Контактная информация:
Re: Индикатор аудио сигнала на ATMEGA
Без схемы и кода - гадание на кофейной гуще.
[color=#800000]Техноманьяк и IT-шаман. Танцы с бубном на дому.[/color]
-
Danielxata
- Родился
- Сообщения: 13
- Зарегистрирован: Ср дек 23, 2009 13:34:02
- Откуда: Gomel
-
Danielxata
- Родился
- Сообщения: 13
- Зарегистрирован: Ср дек 23, 2009 13:34:02
- Откуда: Gomel
Re: Индикатор аудио сигнала на ATMEGA
Пишу на Си в 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 значения ацп
код? да ниче в нем сложного, кратко: читаю ацп, если значение больше 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 значения ацп
Re: Индикатор аудио сигнала на ATMEGA
Включите прерывание от АЦП (ИМХО full изврат в цикле ожидать преобразование АЦП, хоть 100 МГц такта на ядро не спасёт ситуацию), пусть прерывание автоматически забирает результат, запускает следующее преобразование. Далее простая функция из диапазона 0... 1023 делает 0... 511 (от средних 511, 512 значений считается 0-лём, отклонение от 511 или 512 в большую/меньшую стороны должно давать прирост уровня на выходе, (понимаете о чём я?)). Далее результат такого преобразования суммируете в 32-х битный сумматор и каждые, например 40 мс (25 кадров в секунду) сумматор делите на число суммирований (суммирования понятно что нужно считать). От полученного результата (сумматор делить на счетчик суммирований) желательно извлечь корень. Таким образом вы получите нелинейную шкалу что-то вроде дБ. Корень(511) = 22,60530911091463044583785059216 уровня. Для Вашего дисплейчика 22 квадратика это более чем достаточно. Только не используейте функцию корня из CVAVR
(это просто ППЦ а не математика), в википедии написан простой алгоритм извлечения корня, вот его и используйте - максимально быстро и компактно.
Удачи.
Удачи.
Боишся - не делай. Делаешь - не бойся.
-
Danielxata
- Родился
- Сообщения: 13
- Зарегистрирован: Ср дек 23, 2009 13:34:02
- Откуда: Gomel
Re: Индикатор аудио сигнала на ATMEGA
То есть суммируем результаты ацп, а перед выводом находим среднее значение, извлекаем корень, получаем число и согласно его рисуем нужное количество квадратиков, я правильно понял? Остальное все понятно
Спасибо!
Спасибо!
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Индикатор аудио сигнала на ATMEGA
Тут еще может срабатывает то, что интерфейс мк-дисплей не моментален, есть задержка при вкачивании инфы в дисплей.
Docendo discimus
Re: Индикатор аудио сигнала на ATMEGA
Не сочтите за попытку поднять тему в первые ряды раздела МК, но... что получилось у автора?
Боишся - не делай. Делаешь - не бойся.