считывание аудио сигнала
- Войдите на сайт для отправки комментариев
Добрый день, помогите разобраться...хочу померить с помощью АЦП ардуино аудио сигнал с ноутбука. Мерил осциллографом, амплитуда до 2В...Подаю на аналоговый вход ардуино сигнал и смотрю, что в com порту максимальное значение что то около 120-130, что эквивалентно 0.5 В (опорное по умолчанию 5В). В чем может быть дело??????
Вот скетч:
#define AUDIOPIN 5 // Аудиовход
int val;
void setup() {
ADCSRA &=0xFE;//настройка АЦП, частота 250 кГц
ADCSRA |=0x06;
Serial.begin(300);
}
void loop() {
for (i=0; i < 128; i++){
val = analogRead(AUDIOPIN);
Serial.println(val);
};
}
что никто не в курсе????
Так как у вас настроена очень маленькая скорость сериал-соединения, опрос АЦП происходит редко, попрубуйте сначала записать данные в массив, а потом его оттуда считать:
01
#define AUDIOPIN 5 // Аудиовход
02
int
val[128];
03
04
void
setup() {
05
ADCSRA &=0xFE;
//настройка АЦП, частота 250 кГц
06
ADCSRA |=0x06;
07
Serial.begin(300);
08
}
09
10
void
loop() {
11
for
(
int
i = 0; i < 128; i++){
12
val[i] = analogRead(AUDIOPIN);
13
delayMicroseconds(10);
// интервал опроса АЦП
14
}
15
for
(
int
i = 0; i < 128; i++){
16
Serial.println(val[i]);
17
}
18
}
Ардуино ловит из синуса только +, тоесть от 0 д 5В Тоесть амплитуда звука 2В - увидит до 1В
Подниму.
Подача на вход дуины синусоидального сигнала без вольтодобавки (исскуственной средней точки) приводит к тому, что отрицательная полуволна срезается.
Вопрос такой: а не вредно ему на вход подавать сигнал в таком виде? Стоит сигнал предварительно подготавливать, срезая отрицательную полуволну, или можно спокойно вдувать в порт сигнал размахом до 2 Вольт?
На Ах вход дуины подавать сигнал верхний, нижний, или пофигу?
Повесьте на вход делитель ( не слишком низкоомный, допустим килоом по 10 - 47), а сигнал подавйте через конденсатор.
Эммм, спасибо за совет. Но всё же, что по моему вопросу?
До 5 Вольт от пика до пика. Поставьте делитель на входе если надо.
Да, да, это я уже понял. Вы вопрос прочитали?
уже всё рассказали же....
1 - последовательно два резистора по 10 kOm, на + и - , в среднюю точку через электролит 10 mkF ( - к средней точке ) подаём аудио, со средней точки на вход АЦП, пишем в массив быстро и потом медленно выводим в Сериал.... покажет значения от 1.5 до 3.5 - т.е. амплитуда 2.0
2 - если сигнал подавать просто на АЦП, то надо поставить диод параллельно входу АЦП анодом к земле - он срежет отрицательное напряжение аудиосигнала ( защитит ардуину )
3 - чтобы подать отрицательную часть синусоиды надо сигнал инвертировать и см. п. 2
для оцифровки аудио ( качество наифуёвейшее ) - см. п. 1
в п. 1 и 2 - покажет значения от 0.0 до 1.0 - т.е. амплитуда 2.0 / 2 = 1.0
Я спрашивал не о делителе и не о способе удаления отрицательной полуволны (если посмотреть на первую осциллограмму, то станет понятно, что мне известны способы среза полуволны), а о вреде, который может нанести сигнал с отрицательной составляющей, ардуине. Я даже осциллограммы приложил, чтобы было проще дать ответ.
Вопрос ещё раз - нужно ли (НЕ КАК) удалять отрицательную полуволну при подаче сигнала на вход ардуино, или достаточно резистора по входу в 1-2 кОм, чтобы ограничить обратный ток?
И уж если буквоедствовать, то диод должен быть не только установлен, но и предварительно смещён, иначе от -300 до -600! милливольт таки будут попадать на вход ардуины.
Основная проблема в том, что для приведения сигнала к виду как на осц. 1 требуется допобвязка, 2 диода, два резистора и один конденсатор на канал. Каналов пять, следовательно в сумме проект обзаводится дополнительными 25 деталями. Ничего так плата за формирование сигнала.
В принципе можно тупо раскачать входной сигнал до +300мВ минимум и поставить в цепь диод, анодом на сигнал, катодом на вход ардуино, но как-то несолидно.
В экспериментах я подавал сигнал амплитудой 4В с генератора на А вход ардуино через резистор в 1к и, вроде, дуина жива. После резистора получал сигнал как на осц. 1. Всё можно оставить и так, но меня терзают смутные сомнения.
Input Low-voltage ( -0.5V ... 0.3VCC ), Input High-voltage ( 0.7VCC ... VCC+0.5 )
Voltage on RESET with respect to Ground ( -0.5V to +13.0V )
В экспериментах я подавал сигнал амплитудой 4В с генератора на А вход ардуино через резистор в 1к и, вроде, дуина жива. После резистора получал сигнал как на осц. 1. Всё можно оставить и так, но меня терзают смутные сомнения.
резистор 1 k последовательно со входным сопротивлением пина в 10 MOm и синусоида 4 V
- на первом резисторе сядет -0.000199 V, на входе пина -1.9998 V ( не спасёт резистор, диод получше будет )
В принципе можно тупо раскачать входной сигнал до +300мВ минимум и поставить в цепь диод, анодом на сигнал, катодом на вход ардуино, но как-то несолидно.
Я никак не пойму что вам нужно: записать сигнал или исказить его с помощью нелинейных элементов?
наверное, узнать при каком -U на пине он отвалится ?
В принципе можно тупо раскачать входной сигнал до +300мВ минимум и поставить в цепь диод, анодом на сигнал, катодом на вход ардуино, но как-то несолидно.
Я никак не пойму что вам нужно: записать сигнал или исказить его с помощью нелинейных элементов?
Это многое о вас говорит.
В экспериментах я подавал сигнал амплитудой 4В с генератора на А вход ардуино через резистор в 1к и, вроде, дуина жива. После резистора получал сигнал как на осц. 1. Всё можно оставить и так, но меня терзают смутные сомнения.
резистор 1 k последовательно со входным сопротивлением пина в 10 MOm и синусоида 4 V
- на первом резисторе сядет -0.000199 V, на входе пина -1.9998 V ( не спасёт резистор, диод получше будет )
А учитывается то, что работа будет идти в заштатных режимах? Какое сопротивление входного каскада ардуино при однополярном питании и отрицательном напряжении на входе?
А вообще и вправду, всё ведь есть, пойди, Леший, да посмотри.
Ничего личного кроме иронии
дык, вот и эксперементируйте, никто не против ( но и не изучал такого )....
выложите здесь результаты, любителям заштатных режимов - пригодится :)
Дык вооот. Пришли 3 леонарды, теперь можно и спалить чтонить, не опасаясь остаться без игрушки.
Заодно и проверю, какой дым китайцы в микросхемы заправляют.
Дык вооот. Пришли 3 леонарды, теперь можно и спалить чтонить, не опасаясь остаться без игрушки.
Заодно и проверю, какой дым китайцы в микросхемы заправляют.
....скорее всего палёный, без лицензии :)
Так, обошлось без паления. В целом сигнал отрицательной полярности можно подавать на вход МК без каких-либо особых проблем, единственное требование - ограничить обратный ток на уровне 1-2 мА, что, при 5В питании, достигается установкой на вход МК резистора в ~10кОм.
В моём случае я решил так: перед МК всё равно стоят буферные ОУ, следовательно их достаточно включить по схеме двуполярного питания, запитывая их при этом от однополярного источника. В силу этого отрицательные полуволны отлично срезаются. Выходы ОУ можно подключать ко входам МК напрямую, по причине равенства питающих напряжений и отсутствия на выходе ОУ постояной составляющей.
если ничё не спалилось - значит цель испытаний не достигнута :(
....жалко леонарды - но истина дороже :)-
если ничё не спалилось - значит цель испытаний не достигнута :(
....жалко леонарды - но истина дороже :)-
Ага, спаял и смело включай - всё лишнее выгорит!
А что мене туда подать? Напряжение какое? -5В, -12В?
смерть-то к МК на каком -U и при каком резисторе приходит ? :) из #24 - не видно... там только ваше решение.....
Лана, добуду аккум, подам обратное 5 В. Без резистора. Посмотрим.
"Уходит заказывать ещё ардуинов".
Лана, добуду аккум, подам обратное 5 В. Без резистора. Посмотрим.
"Уходит заказывать ещё ардуинов".
из розетки 220..... при каком резисторе не сдохнет ?
ГринПис вам этого не простит ! хватит насиловать 328 и др. :) !!!!!!!!!!!!!!!
Лана, добуду аккум, подам обратное 5 В. Без резистора. Посмотрим.
"Уходит заказывать ещё ардуинов".
НЕ НАНО НА ЭТО СМОТРЕТЬ !
Ндеее, симуляторы отстой. Протеус брешет как сцабака, мультисим ещё туды-сюды, но уже веры нет особой... Блин, всё в железе надо тестировать, куды крестьянину податься?
Вообще мыслимое дело, при Uвх.=20В, Uпит=5В показывать амплитуду выходного сигнала в 20В? Или, типа, шутка такая, ОУ сгорел и терь на выход шпарит сигнал со входа?
не может ардуина показать с пина АЦП больше чем 1023.....
1023 ============ 5/1024*1023= 4.995117..... какие 20 V ?
не может ардуина показать с пина АЦП больше чем 1023.....
1023 ============ 5/1024*1023= 4.995117..... какие 20 V ?
Обычные. Рассчитал параметры входного каскада на оу, проверил в железе - неправильно! При U=-250мВ на неинвертирующем входе оу (lm358n) и однополярном питании 5В, оу идёт в разнос и по выходу прёт дичь.
Дай, думаю, в протеусе покручу,. Ну и покрутил, в виртуале подавал -6В на вход, на выходе сигнал идеален, потом, раз пошла такая пьянка, запиндюрил на вход +20В и получил на выходе те же +20В... Откуда они взялись при питании 5В тока создателям протеуса известно. Мультисим же показал и дичь на выходе, и ограничения по питанию, как в жизни. Типа всё ваще круто, но... Но если взять и заменить 358n на 358d, то, блин, мультисим тоже начинает показывать идеальный сигнал на выходе, при -6 на входе, и +20 на выходе при +20 на входе. А питание то тожа 5В.
Короче симуляторы ацтой.
Похоже, в итоге, приду к диоду, то есть к тому, с чего начинал. Надо было сразу так делать и не компостировать себе мозг.
:) ничего не бывает ЗРЯ :)
Верно. В этот раз я, хоть и поверхностно, но изучил принципы работы ОУ. Пригодится.
А насчёт перегрузочной способности аналоговых входов ардуино, при подаче на них отрицательного напряжения, могу сказать следующее - если на вход поставить резистор 10 кОм, то импульсные -3В на входе он держит годами без проблем. Проверено в боевых условиях.
-3 V - фигня, там стоят диоды по входу защитные... и без резистора жить будет :)
Ну тем более. Всё становится проще - входное сопротивление огромно, значит развязывающий каскад убирается полностью, и так особого влияния на сигнал не окажет. В итоге схема сокращается до источника сигнала, МК и исполняющей схемы.
не знаю, вы же задачу свою не рассказали...
не знаю, вы же задачу свою не рассказали...
А интересно? Я как то не думал.
В общем всё просто: есть источник "вечного" аудиосигнала с амплитудой 0,7В (выход линейный). Задача: при пропадании аудиосигнала на заданное время оповещать об этом, выбирать резервный источник сигнала и подключать его к выходу.
Вариант самый простой - подача сигнала напрямую на входы микроконтроллера, сложнее - через буферную развязку на ОУ (вот тут и выплыли проблемы с отрицательной полярностью), самый "сложный" - компаратор на ОУ, но этот вариант был отброшен, потому что подобное вполне решается программно, без необходимости городить схему.
В итоге остановился пока на прямой подаче сигнала на МК, программном сравнении его с опорным уровнем и, по результататм сравнения, выдаче высокого уровня по Dx, который, через ULN2003, подключает к общей аудиошине тот, или другой источник сигнала. Плюс зажигает индикаторный светодиод.
Вот и весь "проект" пока. В дальнейшем он, скорее всего, обрастёт "Малиной", двустрочным дисплеем и возможностью задания времени между детектированием тишины и срабатыванием коммутатора.
выпрямитель ( 4 диода ), кондёр, усилитель на транзисторе - и на пин
Излишнее усложнение, на мой взгляд. 0.7В более чем достаточно для АЦП МК. Ну а то, что будет анализироваться только положительная полуволна - да и пусть, там заполнение хорошее.
тогда получится усложнение кода и МК будет больше нагружен
тогда получится усложнение кода и МК будет больше нагружен
Да? Это чем нагружен? Сравнением двух чисел, опорного и прибежавшего с adc? Так у него работа такая, пусть сравнивает.
А насчёт кода... Тут не понял, усложнение по сравнению с чем?
выпрямление, сглаживание, на пин, потенциометр на +/- средний вывод на пин - и пусть компаратор сравнивает эти напруги на уровне железа... код - обработка прерывания от компаратора....
а АЦП нужно постоянно опрашивать....
выпрямление, сглаживание, на пин, потенциометр на +/- средний вывод на пин - и пусть компаратор сравнивает эти напруги на уровне железа... код - обработка прерывания от компаратора....
а АЦП нужно постоянно опрашивать....
Угу. Потенциометр. На пин. ПОТЕНЦИОМЕТР! НА! ПИН! По-моему вот прямо сейчас вы несёте откровеннейшую чушь.
Выпрямлять, интегрировать, усиливать, сравнивать, потенциометр - весь этот бессмысленный обвес только для того, чтобы МК не нагружать. Он РАБОТАТЬ должен. Считать, ламочками моргать, включать-выключать нагрузку и прочая. Это его задача, это то, для чего он был создан. А вы предлагаете увеличить количество компонент, а следовательно повысить вероятность возникновения ошибки, только ради того, чтобы МК ничего этого не делал. Вот мысля-то гениальная, а?
В настоящий момент 1 луп == 87 миллисекунд. В лупе обрабатываются данные с пяти входов, по 128 выборок на каждый вход за один заход, то есть 128*5=640 выборок за луп (Бивис, секи чо он написал! За луп! Хе-хе-хе-хе). За секунду (округлённо) 6400 выборок по всем входам. В общем, за 1 секунду, состояние каждого входа анализируется 10 раз. Более чем достаточно для решения поставленной передо мной задачи. Так что установку допобвеса считаю лишним.
Опять-же непонятно, как работать с прерываниями по 5 портам, этот вопрос надо провентилировать.
выпрямление, сглаживание, на пин, потенциометр на +/- средний вывод на пин - и пусть компаратор сравнивает эти напруги на уровне железа... код - обработка прерывания от компаратора....
а АЦП нужно постоянно опрашивать....
Угу. Потенциометр. На пин. ПОТЕНЦИОМЕТР! НА! ПИН! По-моему вот прямо сейчас вы несёте откровеннейшую чушь.
А, помоему, вы.
Выпрямлять, интегрировать, усиливать, сравнивать, потенциометр - весь этот бессмысленный обвес только для того, чтобы МК не нагружать. Он РАБОТАТЬ должен. Считать, ламочками моргать, включать-выключать нагрузку и прочая. Это его задача, это то, для чего он был создан. А вы предлагаете увеличить количество компонент, а следовательно повысить вероятность возникновения ошибки, только ради того, чтобы МК ничего этого не делал. Вот мысля-то гениальная, а?
Мысля - гениальная. Горды что додумались? Теперь попробуйте воспользоваться ее плодами: зачем в контроллере сделали всякие аппаратные прерывания, поддержку Serial и I2C и т.п., если "все можно в loop()?". Зачем все это впихивали в железо, если это не использовать (там где возможно?)
P.S. А "бессмысленный обвес" он скорее от вашего плохого знакомства с даташитом камня, а не от предложений SU-27-16
"...В общем всё просто: есть источник "вечного" аудиосигнала с амплитудой 0,7В (выход линейный). Задача: при пропадании аудиосигнала на заданное время оповещать об этом, выбирать резервный источник сигнала и подключать его к выходу. ..."
- где здесь сказано про ПЯТЬ источников "вечного" аудиосигнала ?
22. Analog Comparator - его тоже для чего-то внедрили.... вот пусть и сравнивает постоянную составляющую аудиосигнала на пине AINn с пороговым значением, устанавливаемым ИМЕННО потенциометром ( 1 - + , 2 - - , 3 - на пин AINn ) и своими прерываниями сообщает результат сравнения...
при замере срезанной синусоиды по пяти каналам с частотой 10 Гц в каждом канале - рискуем получить каждую секунду пропадание 1...3 сигналов из пяти.... АЦП не будет ловить синусоиду в пике :( , из 10-ти замеров синусоиды - 3....5 замеров покажут отсутствие сигнала, каков же будет алгоритм обработки ? как у гибдд ? посмотри, мигалка работает ?! работает.... не работает... работает... не работает.....
моя плохо знает камень, согласен :( , но ВЫ просили варианты , а НЕ я - критику своего варианта :)-
если вам удобнее без обвеса - так и делайте....
моя плохо знает камень, согласен :( , но ВЫ просили варианты , а НЕ я - критику своего варианта :)-
"Плохо знает камень", это было не вам. Там же четко сказанно, что лишний обвес - не от ваших предложений.
Как раз вы-то, явно знаете про существование ВСТРОЕННОГО компаратора и его способность генерировать прерывания (а еще есть и внутренние источники опорного, так что, возможно и резистор не потребуется).
А вот человек, явно вообразил себе внешний.... какую-то "кучу обвеса", и вместо того что-бы погуглить про что же вы говорили, бодро объявил ваше предложение "бредом".
Кстати, лично я не уверен что тут нужно аналоговый... возможно, можно просто делителем напряжения подогнать входящий сигнал так, что-бы и обычный attachInterrupt срабатывал. На цифровом пине.
Тогда, если все-таки потребуется мониторить сразу пять каналов, то можно будет воспользоваться PIN CHANGE прерываниями (PCINT).