считывание аудио сигнала

leonid
Offline
Зарегистрирован: 12.04.2012

Добрый день, помогите разобраться...хочу померить с помощью АЦП ардуино аудио сигнал с ноутбука. Мерил осциллографом, амплитуда до 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);
};
}

 

leonid
Offline
Зарегистрирован: 12.04.2012

что никто не в курсе????

maksim
Offline
Зарегистрирован: 12.02.2012

Так как у вас настроена очень маленькая скорость сериал-соединения, опрос АЦП происходит редко, попрубуйте сначала записать данные в массив, а потом его оттуда считать:

#define AUDIOPIN 5 // Аудиовход
int val[128];

void setup() {
  ADCSRA &=0xFE;//настройка АЦП, частота 250 кГц
  ADCSRA |=0x06;
  Serial.begin(300);
}

void loop() {
  for (int i = 0; i < 128; i++){ 
    val[i] = analogRead(AUDIOPIN);
   delayMicroseconds(10); // интервал опроса АЦП
  }
  for (int i = 0; i < 128; i++){ 
    Serial.println(val[i]);
  }
}

 

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

Ардуино ловит из синуса только +, тоесть от 0 д 5В Тоесть амплитуда звука 2В - увидит до 1В

Leshiy
Offline
Зарегистрирован: 19.07.2014

Подниму.

Подача на вход дуины синусоидального сигнала без вольтодобавки (исскуственной средней точки) приводит к тому, что отрицательная полуволна срезается.

Вопрос такой: а не вредно ему на вход подавать сигнал в таком виде? Стоит сигнал предварительно подготавливать, срезая отрицательную полуволну, или можно спокойно вдувать в порт сигнал размахом до 2 Вольт?

На Ах вход дуины подавать сигнал верхний, нижний, или пофигу?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Повесьте на вход делитель ( не слишком низкоомный, допустим килоом по 10 - 47), а сигнал подавйте через конденсатор.

Leshiy
Offline
Зарегистрирован: 19.07.2014

Эммм, спасибо за совет. Но всё же, что по моему вопросу?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

До 5 Вольт от пика до пика. Поставьте делитель на входе если надо.

Leshiy
Offline
Зарегистрирован: 19.07.2014

Да, да, это я уже понял. Вы вопрос прочитали?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

уже всё рассказали же....

1 - последовательно два резистора по 10 kOm, на + и - , в среднюю точку через электролит 10 mkF ( - к средней точке ) подаём аудио, со средней точки на вход АЦП, пишем в массив быстро и потом медленно выводим в Сериал.... покажет значения от 1.5 до 3.5 - т.е. амплитуда 2.0

 

2 - если сигнал подавать просто на АЦП, то надо поставить диод параллельно входу АЦП анодом к земле - он срежет отрицательное напряжение аудиосигнала ( защитит ардуину )

3 - чтобы подать отрицательную часть синусоиды надо сигнал инвертировать и см. п. 2

 

для оцифровки аудио ( качество наифуёвейшее ) - см. п. 1

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

в п. 1 и 2 - покажет значения от 0.0 до 1.0 - т.е. амплитуда 2.0  / 2 = 1.0

Leshiy
Offline
Зарегистрирован: 19.07.2014

Я спрашивал не о делителе и не о способе удаления отрицательной полуволны (если посмотреть на первую осциллограмму, то станет понятно, что мне известны способы среза полуволны), а о вреде, который может нанести сигнал с отрицательной составляющей, ардуине. Я даже осциллограммы приложил, чтобы было проще дать ответ.

Вопрос ещё раз - нужно ли (НЕ КАК) удалять отрицательную полуволну при подаче сигнала на вход ардуино, или достаточно резистора по входу в 1-2 кОм, чтобы ограничить обратный ток?

И уж если буквоедствовать, то диод должен быть не только установлен, но и предварительно смещён, иначе от -300 до -600! милливольт таки будут попадать на вход ардуины.

Основная проблема в том, что для приведения сигнала к виду как на осц. 1 требуется допобвязка, 2 диода, два резистора и один конденсатор на канал. Каналов пять, следовательно в сумме проект обзаводится дополнительными 25 деталями. Ничего так плата за формирование сигнала.

Leshiy
Offline
Зарегистрирован: 19.07.2014

В принципе можно тупо раскачать входной сигнал до +300мВ минимум и поставить в цепь диод, анодом на сигнал, катодом на вход ардуино, но как-то несолидно.

Leshiy
Offline
Зарегистрирован: 19.07.2014

В экспериментах я подавал сигнал амплитудой 4В с генератора на А вход ардуино через резистор в 1к и, вроде, дуина жива. После резистора получал сигнал как на осц. 1. Всё можно оставить и так, но меня терзают смутные сомнения.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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 )

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Leshiy пишет:

В экспериментах я подавал сигнал амплитудой 4В с генератора на А вход ардуино через резистор в 1к и, вроде, дуина жива. После резистора получал сигнал как на осц. 1. Всё можно оставить и так, но меня терзают смутные сомнения.

резистор 1 k  последовательно со входным сопротивлением пина в 10 MOm и синусоида 4 V

- на первом резисторе сядет -0.000199 V, на входе пина -1.9998 V ( не спасёт резистор, диод получше будет )

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Leshiy пишет:

В принципе можно тупо раскачать входной сигнал до +300мВ минимум и поставить в цепь диод, анодом на сигнал, катодом на вход ардуино, но как-то несолидно.

Я никак не пойму что вам нужно: записать сигнал или исказить его с помощью нелинейных элементов?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

наверное, узнать при каком -U на пине он отвалится ?

Leshiy
Offline
Зарегистрирован: 19.07.2014

trembo пишет:

Leshiy пишет:

В принципе можно тупо раскачать входной сигнал до +300мВ минимум и поставить в цепь диод, анодом на сигнал, катодом на вход ардуино, но как-то несолидно.

Я никак не пойму что вам нужно: записать сигнал или исказить его с помощью нелинейных элементов?

Это многое о вас говорит.

Leshiy
Offline
Зарегистрирован: 19.07.2014

SU-27-16 пишет:

Leshiy пишет:

В экспериментах я подавал сигнал амплитудой 4В с генератора на А вход ардуино через резистор в 1к и, вроде, дуина жива. После резистора получал сигнал как на осц. 1. Всё можно оставить и так, но меня терзают смутные сомнения.

резистор 1 k  последовательно со входным сопротивлением пина в 10 MOm и синусоида 4 V

- на первом резисторе сядет -0.000199 V, на входе пина -1.9998 V ( не спасёт резистор, диод получше будет )

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

А вообще и вправду, всё ведь есть, пойди, Леший, да посмотри.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Ничего личного кроме иронии

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

дык, вот и эксперементируйте, никто не против ( но и не изучал такого )....

выложите здесь результаты, любителям заштатных режимов - пригодится :)

Leshiy
Offline
Зарегистрирован: 19.07.2014

Дык вооот. Пришли 3 леонарды, теперь можно и спалить чтонить, не опасаясь остаться без игрушки.

Заодно и проверю, какой дым китайцы в микросхемы заправляют.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Leshiy пишет:

Дык вооот. Пришли 3 леонарды, теперь можно и спалить чтонить, не опасаясь остаться без игрушки.

Заодно и проверю, какой дым китайцы в микросхемы заправляют.

....скорее всего палёный, без лицензии :)

Leshiy
Offline
Зарегистрирован: 19.07.2014

Так, обошлось без паления. В целом сигнал отрицательной полярности можно подавать на вход МК без каких-либо особых проблем, единственное требование - ограничить обратный ток на уровне 1-2 мА, что, при 5В питании, достигается установкой на вход МК резистора в ~10кОм.

В моём случае я решил так: перед МК всё равно стоят буферные ОУ, следовательно их достаточно включить по схеме двуполярного питания, запитывая их при этом от однополярного источника. В силу этого отрицательные полуволны отлично срезаются. Выходы ОУ можно подключать ко входам МК напрямую, по причине равенства питающих напряжений и отсутствия на выходе ОУ постояной составляющей.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

если ничё не спалилось - значит цель испытаний не достигнута :( 

....жалко леонарды - но истина дороже :)-

Leshiy
Offline
Зарегистрирован: 19.07.2014

SU-27-16 пишет:

если ничё не спалилось - значит цель испытаний не достигнута :( 

....жалко леонарды - но истина дороже :)-

Ага, спаял и смело включай - всё лишнее выгорит!

А что мене туда подать? Напряжение какое? -5В, -12В?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

смерть-то к МК на каком -U и при каком резисторе приходит ? :) из #24 - не видно... там только ваше решение.....

Leshiy
Offline
Зарегистрирован: 19.07.2014

Лана, добуду аккум, подам обратное 5 В. Без резистора. Посмотрим.

"Уходит заказывать ещё ардуинов".

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Leshiy пишет:

Лана, добуду аккум, подам обратное 5 В. Без резистора. Посмотрим.

"Уходит заказывать ещё ардуинов".

из розетки 220..... при каком резисторе не сдохнет ?

ГринПис вам этого не простит ! хватит насиловать 328 и др. :) !!!!!!!!!!!!!!!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Leshiy пишет:

Лана, добуду аккум, подам обратное 5 В. Без резистора. Посмотрим.

"Уходит заказывать ещё ардуинов".

НЕ НАНО НА ЭТО СМОТРЕТЬ ! 

Leshiy
Offline
Зарегистрирован: 19.07.2014

Ндеее, симуляторы отстой. Протеус брешет как сцабака, мультисим ещё туды-сюды, но уже веры нет особой... Блин, всё в железе надо тестировать, куды крестьянину податься?

Вообще мыслимое дело, при Uвх.=20В, Uпит=5В показывать амплитуду выходного сигнала в 20В? Или, типа, шутка такая, ОУ сгорел и терь на выход шпарит сигнал со входа?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

не может ардуина показать с пина АЦП больше чем 1023..... 

1023 ============ 5/1024*1023= 4.995117..... какие 20 V ? 

Leshiy
Offline
Зарегистрирован: 19.07.2014

SU-27-16 пишет:

не может ардуина показать с пина АЦП больше чем 1023..... 

1023 ============ 5/1024*1023= 4.995117..... какие 20 V ? 

Обычные. Рассчитал параметры входного каскада на оу, проверил в железе - неправильно! При U=-250мВ на неинвертирующем входе оу (lm358n) и однополярном питании 5В, оу идёт в разнос и по выходу прёт дичь.

Дай, думаю, в протеусе покручу,. Ну и покрутил, в виртуале подавал -6В на вход, на выходе сигнал идеален, потом, раз пошла такая пьянка, запиндюрил на вход +20В и получил на выходе те же +20В... Откуда они взялись при питании 5В тока создателям протеуса известно. Мультисим же показал и дичь на выходе, и ограничения по питанию, как в жизни. Типа всё ваще круто, но... Но если взять и заменить 358n на 358d, то, блин, мультисим тоже начинает показывать идеальный сигнал на выходе, при -6 на входе, и +20 на выходе при +20 на входе. А питание то тожа 5В.

Короче симуляторы ацтой.

 

Leshiy
Offline
Зарегистрирован: 19.07.2014

Похоже, в итоге, приду к диоду, то есть к тому, с чего начинал. Надо было сразу так делать и не компостировать себе мозг.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

:) ничего не бывает ЗРЯ :)

Leshiy
Offline
Зарегистрирован: 19.07.2014

Верно. В этот раз я, хоть и поверхностно, но изучил принципы работы ОУ. Пригодится.

А насчёт перегрузочной способности аналоговых входов ардуино, при подаче на них отрицательного напряжения, могу сказать следующее - если на вход поставить резистор 10 кОм, то импульсные -3В на входе он держит годами без проблем. Проверено в боевых условиях.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

-3 V - фигня, там стоят диоды по входу защитные... и без резистора жить будет :)

Leshiy
Offline
Зарегистрирован: 19.07.2014

Ну тем более. Всё становится проще - входное сопротивление огромно, значит развязывающий каскад убирается полностью, и так особого влияния на сигнал не окажет. В итоге схема сокращается до источника сигнала, МК и исполняющей схемы.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

не знаю, вы же задачу свою не рассказали...

Leshiy
Offline
Зарегистрирован: 19.07.2014

SU-27-16 пишет:

не знаю, вы же задачу свою не рассказали...

А интересно? Я как то не думал.

В общем всё просто: есть источник "вечного" аудиосигнала с амплитудой 0,7В (выход линейный). Задача: при пропадании аудиосигнала на заданное время оповещать об этом, выбирать резервный источник сигнала и подключать его к выходу.

Вариант самый простой - подача сигнала напрямую на входы микроконтроллера, сложнее - через буферную развязку на ОУ (вот тут и выплыли проблемы с отрицательной полярностью), самый "сложный" - компаратор на ОУ, но этот вариант был отброшен, потому что подобное вполне решается программно, без необходимости городить схему.

В итоге остановился пока на прямой подаче сигнала на МК, программном сравнении его с опорным уровнем и, по результататм сравнения, выдаче высокого уровня по Dx, который, через ULN2003, подключает к общей аудиошине тот, или другой источник сигнала. Плюс зажигает индикаторный светодиод.

Вот и весь "проект" пока. В дальнейшем он, скорее всего, обрастёт "Малиной", двустрочным дисплеем и возможностью задания времени между детектированием тишины и срабатыванием коммутатора.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

выпрямитель ( 4 диода ), кондёр, усилитель на транзисторе - и на пин

Leshiy
Offline
Зарегистрирован: 19.07.2014

Излишнее усложнение, на мой взгляд. 0.7В более чем достаточно для АЦП МК. Ну а то, что будет анализироваться только положительная полуволна - да и пусть, там заполнение хорошее.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

тогда получится усложнение кода и МК будет больше нагружен

Leshiy
Offline
Зарегистрирован: 19.07.2014

SU-27-16 пишет:

тогда получится усложнение кода и МК будет больше нагружен

Да? Это чем нагружен? Сравнением двух чисел, опорного и прибежавшего с adc? Так у него работа такая, пусть сравнивает.

А насчёт кода... Тут не понял, усложнение по сравнению с чем?

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

выпрямление, сглаживание, на пин, потенциометр на +/- средний вывод на пин - и пусть компаратор сравнивает эти напруги на уровне железа... код - обработка прерывания от компаратора....

 

а АЦП нужно постоянно опрашивать.... 

Leshiy
Offline
Зарегистрирован: 19.07.2014

SU-27-16 пишет:

выпрямление, сглаживание, на пин, потенциометр на +/- средний вывод на пин - и пусть компаратор сравнивает эти напруги на уровне железа... код - обработка прерывания от компаратора....

 

а АЦП нужно постоянно опрашивать.... 

Угу. Потенциометр. На пин. ПОТЕНЦИОМЕТР! НА! ПИН! По-моему вот прямо сейчас вы несёте откровеннейшую чушь.

Выпрямлять, интегрировать, усиливать, сравнивать, потенциометр - весь этот бессмысленный обвес только для того, чтобы МК не нагружать. Он РАБОТАТЬ должен. Считать, ламочками моргать, включать-выключать нагрузку и прочая. Это его задача, это то, для чего он был создан. А вы предлагаете увеличить количество компонент, а следовательно повысить вероятность возникновения ошибки, только ради того, чтобы МК ничего этого не делал. Вот мысля-то гениальная, а?

Leshiy
Offline
Зарегистрирован: 19.07.2014

В настоящий момент 1 луп == 87 миллисекунд. В лупе обрабатываются данные с пяти входов, по 128 выборок на каждый вход за один заход, то есть 128*5=640 выборок за луп (Бивис, секи чо он написал! За луп! Хе-хе-хе-хе). За секунду (округлённо) 6400 выборок по всем входам. В общем, за 1 секунду, состояние каждого входа анализируется 10 раз. Более чем достаточно для решения поставленной передо мной задачи. Так что установку допобвеса считаю лишним.

Опять-же непонятно, как работать с прерываниями по 5 портам, этот вопрос надо провентилировать.

leshak
Offline
Зарегистрирован: 29.09.2011

Leshiy пишет:

SU-27-16 пишет:

выпрямление, сглаживание, на пин, потенциометр на +/- средний вывод на пин - и пусть компаратор сравнивает эти напруги на уровне железа... код - обработка прерывания от компаратора....

 

а АЦП нужно постоянно опрашивать.... 

Угу. Потенциометр. На пин. ПОТЕНЦИОМЕТР! НА! ПИН! По-моему вот прямо сейчас вы несёте откровеннейшую чушь.

А, помоему,  вы.

Leshiy пишет:

Выпрямлять, интегрировать, усиливать, сравнивать, потенциометр - весь этот бессмысленный обвес только для того, чтобы МК не нагружать. Он РАБОТАТЬ должен. Считать, ламочками моргать, включать-выключать нагрузку и прочая. Это его задача, это то, для чего он был создан. А вы предлагаете увеличить количество компонент, а следовательно повысить вероятность возникновения ошибки, только ради того, чтобы МК ничего этого не делал. Вот мысля-то гениальная, а?

Мысля - гениальная. Горды что додумались? Теперь попробуйте воспользоваться ее плодами: зачем в контроллере сделали всякие аппаратные прерывания, поддержку Serial и I2C и т.п., если "все можно в loop()?". Зачем все это впихивали в железо, если это не использовать (там где возможно?)

P.S. А "бессмысленный обвес" он скорее от вашего плохого знакомства с даташитом камня, а не от предложений SU-27-16

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

"...В общем всё просто: есть источник "вечного" аудиосигнала с амплитудой 0,7В (выход линейный). Задача: при пропадании аудиосигнала на заданное время оповещать об этом, выбирать резервный источник сигнала и подключать его к выходу. ..."

- где здесь сказано про ПЯТЬ источников "вечного" аудиосигнала ? 

22. Analog Comparator - его тоже для чего-то внедрили.... вот пусть и сравнивает постоянную составляющую аудиосигнала на пине AINn с пороговым значением, устанавливаемым ИМЕННО потенциометром ( 1 - + , 2 - - , 3 - на пин AINn ) и своими прерываниями сообщает результат сравнения...

при замере срезанной синусоиды по пяти каналам с частотой 10 Гц в каждом канале - рискуем получить каждую секунду пропадание 1...3 сигналов из пяти.... АЦП не будет ловить синусоиду в пике :( , из 10-ти замеров синусоиды - 3....5 замеров покажут отсутствие сигнала, каков же будет алгоритм обработки ? как у гибдд ? посмотри, мигалка работает ?! работает.... не работает... работает... не работает.....

моя плохо знает камень, согласен :( , но ВЫ просили варианты , а НЕ я - критику своего варианта :)-

если вам удобнее без обвеса - так и делайте....

leshak
Offline
Зарегистрирован: 29.09.2011

SU-27-16 пишет:

моя плохо знает камень, согласен :( , но ВЫ просили варианты , а НЕ я - критику своего варианта :)-

"Плохо знает камень", это было не вам. Там же четко сказанно, что лишний обвес - не от ваших предложений.

Как раз вы-то, явно знаете про существование ВСТРОЕННОГО компаратора и его способность генерировать прерывания (а еще есть и внутренние источники опорного, так что, возможно и резистор не потребуется).

А вот человек, явно вообразил себе внешний.... какую-то "кучу обвеса", и вместо того что-бы погуглить про что же вы говорили, бодро объявил ваше предложение "бредом".

Кстати, лично я не уверен что тут нужно аналоговый... возможно, можно просто делителем напряжения подогнать входящий сигнал так, что-бы и обычный attachInterrupt срабатывал. На цифровом пине.

Тогда, если все-таки потребуется мониторить сразу пять каналов, то можно будет воспользоваться  PIN CHANGE прерываниями (PCINT).