VU метр на ILI9481
- Войдите на сайт для отправки комментариев
Чт, 12/01/2017 - 05:33
Всем привет. Хочу выводить на ILI9481 (480*320) VU метр или анализатор. Пока написал простой скетч VU метра и есть подозрения, что с анализатором будут тормоза. Кто-то делал что-то подобное на этом экране. Поделитесь скетчем красивого VU метра и анализатора.
Чего анализировать? А ардуино какая?
Чего бы он ни анализировал, от экрана это никак не зависит.
Arduino Mega. Хочу сделать интересный VU метр для стерео усилителя. На ютюбе видел интересные графические решения, но кодом там не делятся.
На УНО как-то писал, и дисплей 240х320, могу выложить если интересно
Очень интересно. Мне еще интересен стандартный VU столбцом с пиковыми значениями. Я сделал свой, но очень резко изменения отрабатывает или меджу двух значений перемигивается при определенных уровнях.
Мой VU meter https://youtu.be/60dR3q-1IVw
Я хочу подобие этого https://youtu.be/vQxXD6dpaCo
https://youtu.be/r7Mm5jKa0qc
Хорошо сделано, но мне хотелось анализатор по 10-15 полос на канал и интересные варианты VU метра, где пиковые значения красиво изменяются. Да и вообще понять как лучше писать код, что бы тормозов не словить.
Из больше полос сделать меньше? Трудная задача.
По поводу оптимизации графики, могу из собственного опыта подсказать, что не надо перерисовывать весь экран каждый раз.
Недавно делал блок питания, посмотрите здесь http://forum.cxem.net/index.php?/topic/174170-%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B8-%D0%BD%D0%B0-%D0%B7%D0%B2%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%BC-%D1%83%D1%81%D0%B8%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B5/
Видите там 8 цифровых полей? Я пробовал сначала все их перерисовать, смотрелось просто отвратительно, мыргает экран, потом появляются поля цифр, одно за другим, а поскольку мега не 1ГГц, на это уходило чуть не пол секунды. Потом мне пришла идея не рисовать все цифры, а по одной в 0.1 секунды. Человек всё одно не способен заметить изменения 40 цифр каждую секунду. Визуально всё просто "летать" стало, очень быстро, и экран не мерцает.
Такая же идея применена в спекто-анализаторе из видео ролика, все полоски не рисуются одновреммено, а их там 250 или около того, можете посметреть адафрутовский бенчмарк и сколько времени бы заняло рисование 250 линий. При том , что ардуино Уно там ещё БПФ-512 делает, в реальном масштабе времени.
Рисуются поочереди "группами", на глаз всё сливается.
Короче пишите код, мы посмотрим и может чего подскажем
Это просто пробный набросок, очень много лишнего и буду переписывать по другому.
Выводит только изменения, без прорисовки всей графики.
Первое, что бросается в глаза - вы не правильно меряете. Индикатор VU должен показывать среднеквадратичное значение (RMS), аудио сигнал - переменка а не постоянный ток, и просто аналогРеад тут не работает. Тут как пример из скетча (Уно), дисплей 12864:
Идея в том, что на АЦП вход подается смещение - половина напряжение, и переменка расчитывается как корень квадратный из суммы квадратов. Смотрите в учебниках подробней. Потом добавлюется логарифмическая шкала.
Второе, задайте тактовую частоту, без неё я вообще не представляю как мерять или рисовать . В примере таймер инициирует измерения, и поскольку частота известна, к ней легко привязать обновлвние экрана введя простой счётчик.
Читаю и не пойму с 94 по 128. Что там происходит?
Там настраивается таймер на частоту 40 кГц, по теореме Котел'никова это минимальная частота для сэмплинга входного аудио сигнала до 20 кГц.
Потом настраивается АЦП работать по таймеру, быстро, конверсия аналог-цифра должна быть быстрее чем 25 микросек. И мерять на А5 - остальные заняты жадным до пинов экраном,
Все эти регистры расписаны в даташите на микропроцессор АТмега328. Погуглите , наверняка есть лекции на русском по настройке , или книжки. И меня тут с десяток книжек по ардуино завалялось, но все на английском.
Переписал скетч на мой индикатор, но если я вывожу на экран текст, то все начинает тормозить... И не очень пойму, для чего нужен rms_Level, если он к индикатору вообще не касается. Значит происходит вывод не среднеквадратичного значения?
rms_Level у меня логарифмическое и читается через сериал монитор, сейчас и не помню почему на экран я выводил среднеквадратичное -линейное а на его. Короче, простое RMS оно среднеквадратичное, то которое надо для измерения переменки, после sqrt оно и вычисляется.
Но проблема со шкалами, если для вольтметра скажем шкала нужна линейная, 10, 20, 30 В и так далее, то для VU она обычно логарифмическая, в дБ меряется. Я там и вычислял в дБ, но на экран вывел Вольты, наверно для красоты.
Я делаю именно VU в db.
Любое мелкое изменение парализует всю работу, добавил знак умножения или еще мелочи и все сразу глючит.
Это всё происки вражеских нейро-сетей.
Любое мелкое изменение парализует всю работу, добавил знак умножения или еще мелочи и все сразу глючит.
Это свидетельствует, что была выбрана изначально неверная структура программы.
И, в общем-то, я на это намекал уже в посте №2.