Собтвенно, вот что родил мой мозг , чур, яйцами не кидаться :
Вкратце чего делает: ждем сигнал с микрофона, при его появлении измеряем его длительность. На короткие сигналы не реагируем. При превышении порога длительности начинаем управлять мосфетом, т.е. активатором. (в данном конкретном случае я светодиодом мигал) Если на момент окончания цикла качания сигнал с микрофона присутствует, продолжаем качать. Если нет- снова ждем длительного сигнала.
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
int i;
int t;
t = 0;
DDRC = 0xff; // все порты C сконфигурировать как выходы
DDRD = 0x00; // все порты D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех портах D,
while(1) { // Бесконечный цикл
// ПРОВЕРЯЕМ НАЛИЧИЕ СИГНАЛА
while (t < 10)
{ // Бесконечный цикл
if
(!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
t = t + 1; // если 0, тогда значение x увеличиваем на 1
else
t = 0; // в противном случае х будет обнулен
_delay_ms(200); // ждем
}
// ВКЛЮЧАЕМ ИСПОЛНЯЮЩЕЕ УСТРОЙСТВО
t = 0; // обнуляем значение переменной t
start:
for (i = 1; i <= 10; i++) // цикл 10 раз
{
PORTC |= _BV(PC1); // подаем питание
_delay_ms(200); // ждем
PORTC &= ~_BV(PC1); // выключаем питание
_delay_ms(200); // ждем
}
if
(!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
goto start; // перейти к метке start
}
}
О чем я хочу вас попросить:
1. наверняка прогу можно упростить и уместить в несколько строк?
2. как бы укладывать МК спать, чтобы он по сигналу с микрофона просыпался?
3. как включить компаратор на АТмеге8, я читал, но ничего не понял?
Спасибо.
1. ОЛЕГ - 28 Февраля, 2009 - 04:27:39 - перейти к сообщению
2. VCOM - 01 Марта, 2009 - 10:48:28 - перейти к сообщению
Эм... а схему подключения микрофона можно?
3. Белый Волк - 01 Марта, 2009 - 11:39:13 - перейти к сообщению
1. Для задания переменной значения при её объявлении
2. Для инициализации нескольких переменных одного типа
3. Пункт 1 не исключает 2.
4. Для увеличения/уменьшения значения переменной на единицу применяют унарный плюс/минус
5. Имеет значение место написания унарных операций. Если оператор ++ написан до переменной, то, в составе другого оператора, сначала произойдёт увеличение переменной на единицу, а потом действие оператора.
После исполнения отрезка кода, j будет иметь значение 0, а i - значение 3
6. Для изменения значения переменной
На первом шаге значение i будет 1+2=3, на втором 3*4=12.
7. Объявление переменных возможно в любом месте программы, включая for()
8. Применение описанного для if()
9. Для цикла for()
Здесь сначала создаются i, j, k. Перед каждым шагом проверка условий и, если оба верны, выполняется тело цикла, после чего выполняются команды i++ и j--. Подобная конструкция удобна для прохождения одномерного массива от начала и конца к центру.
CODE:
int t=0;
int t=0;
2. Для инициализации нескольких переменных одного типа
CODE:
int i, j, k;
int i, j, k;
3. Пункт 1 не исключает 2.
CODE:
int i=0, j=1, k=i+j;
int i=0, j=1, k=i+j;
4. Для увеличения/уменьшения значения переменной на единицу применяют унарный плюс/минус
CODE:
t++;
t--;
t++;
t--;
5. Имеет значение место написания унарных операций. Если оператор ++ написан до переменной, то, в составе другого оператора, сначала произойдёт увеличение переменной на единицу, а потом действие оператора.
CODE:
int i=0, j=1, k=2;
j = i++;
i = ++k;
int i=0, j=1, k=2;
j = i++;
i = ++k;
После исполнения отрезка кода, j будет иметь значение 0, а i - значение 3
6. Для изменения значения переменной
CODE:
int i=1, j=4;
i += 2;
i *=j;
int i=1, j=4;
i += 2;
i *=j;
На первом шаге значение i будет 1+2=3, на втором 3*4=12.
7. Объявление переменных возможно в любом месте программы, включая for()
CODE:
for (int i = 0; i <= 20; i++)
for (int i = 0; i <= 20; i++)
8. Применение описанного для if()
CODE:
int i = 0, j = 1, k = i+j;
if (1) i++, j--, k *= 2;
int i = 0, j = 1, k = i+j;
if (1) i++, j--, k *= 2;
9. Для цикла for()
CODE:
int i = 0, j = 1, k = i+j;
for (int i=0, j=10; i<j && j != k ; i++, j--);
int i = 0, j = 1, k = i+j;
for (int i=0, j=10; i<j && j != k ; i++, j--);
Здесь сначала создаются i, j, k. Перед каждым шагом проверка условий и, если оба верны, выполняется тело цикла, после чего выполняются команды i++ и j--. Подобная конструкция удобна для прохождения одномерного массива от начала и конца к центру.
4. ОЛЕГ - 02 Марта, 2009 - 01:01:56 - перейти к сообщению
VCOM, конечно. Схема включения микрофона взята с робозона, та, которая стереофоническая и с компаратором. Только я оставил один микрофон, убрал аналоговый выход, убрал светодиод и выкинул половину проходных конденсаторов со входа микрофона (студийное качество звука мне не интересно ).
Белый Волк, спасибо Вам большое! Все действительно можно написать гораздо проще, что я и сделал.
Белый Волк, спасибо Вам большое! Все действительно можно написать гораздо проще, что я и сделал.
5. VCOM - 02 Марта, 2009 - 12:54:21 - перейти к сообщению
А можно ссылку на зонаробу то эту?
6. ОЛЕГ - 03 Марта, 2009 - 23:39:01 - перейти к сообщению
Да легко, VCOM. Вот:
http://robozone.su/2008/05/31/sd...sor-na-baze.html
Оставил только один канал и цифровой выход. Остальное выкинул.
Вернусь с командировки, со славного города Кирова (да здравствует халявный вайфай в гостиницах! ), надо будет на соплях все это хозяйство собрать, да посмотреть, будет ли оно вообще работать.
Я решил таки использовать внешний компаратор, т.к. по внутреннему в АТмеге я вообще ничего не понял. Вернее, понял все, но написать это программой, чтобы заработало, я так и не смог (вместо микрофона тыкал в ножку МК проводком с "+" ). А тем более, связать это с измерением длительности сигнала...
Есть и другая загвоздка: насколько я помню, низкоуровневый аудиосигнал, получаемый с предусилителя (сигнал LINE), имеет напругу всего около четверти вольта. А опорное напряжение на внутреннем компараторе составляет (если не ошибаюсь) 2.7В. Так что там по-любому задействовать обе ноги компаратора и сооружать ему делитель напряжения, с чем сравнивать, либо сигнал усиливать.
В общем, если та схема окажется жизнеспособной, я ее и возьму.
http://robozone.su/2008/05/31/sd...sor-na-baze.html
Оставил только один канал и цифровой выход. Остальное выкинул.
Вернусь с командировки, со славного города Кирова (да здравствует халявный вайфай в гостиницах! ), надо будет на соплях все это хозяйство собрать, да посмотреть, будет ли оно вообще работать.
Я решил таки использовать внешний компаратор, т.к. по внутреннему в АТмеге я вообще ничего не понял. Вернее, понял все, но написать это программой, чтобы заработало, я так и не смог (вместо микрофона тыкал в ножку МК проводком с "+" ). А тем более, связать это с измерением длительности сигнала...
Есть и другая загвоздка: насколько я помню, низкоуровневый аудиосигнал, получаемый с предусилителя (сигнал LINE), имеет напругу всего около четверти вольта. А опорное напряжение на внутреннем компараторе составляет (если не ошибаюсь) 2.7В. Так что там по-любому задействовать обе ноги компаратора и сооружать ему делитель напряжения, с чем сравнивать, либо сигнал усиливать.
В общем, если та схема окажется жизнеспособной, я ее и возьму.
7. ОЛЕГ - 08 Марта, 2009 - 04:31:53 - перейти к сообщению
Схема с робозона не пашет. Собрал один- в один.
VCOM, может, у Вас какие мысли есть?
VCOM, может, у Вас какие мысли есть?
8. VCOM - 08 Марта, 2009 - 17:28:02 - перейти к сообщению
На 5 ноге лм386 какая напруга? Когда тихо и когда грит ктонить...
9. ОЛЕГ - 08 Марта, 2009 - 23:14:35 - перейти к сообщению
VCOM, спасибо, что откликнулись.
При 6В питания на 5 ноге лм386 когда тихо 2,6В, а когда громко (дую в микрофон) скачет от 2.4 до 2.8 вольт. Просто меняются значения в произвольном порядке. Меряю обычным мультиметром аля за 500 рэ.
Странно.
При 6В питания на 5 ноге лм386 когда тихо 2,6В, а когда громко (дую в микрофон) скачет от 2.4 до 2.8 вольт. Просто меняются значения в произвольном порядке. Меряю обычным мультиметром аля за 500 рэ.
Странно.
10. VCOM - 09 Марта, 2009 - 18:52:24 - перейти к сообщению
А на 2 и 3 ноге lm393 скока?
11. ОЛЕГ - 09 Марта, 2009 - 21:19:47 - перейти к сообщению
На 2 ноге измерить проблематично, потому что там емкость стоит. Показания начинаются с 2,4 вольт и постепенно уменьшаются, а когда дую в микрофон падают до 1,5 где-то. Перестаю дуть- опять подскакивают до прежнего значения.
На 3 ноге стоит 3,5 вольта. Это то значение, при котором есть хоть какой-то намек на нормальную работу.
Проблема, собственно, заключается в чем- приблуда либо не реагирует вовсе, либо начинает произвольно генерить сигналы в полной тишине. Питание от крена с конденсатором, массы с МК соединил.
На 3 ноге стоит 3,5 вольта. Это то значение, при котором есть хоть какой-то намек на нормальную работу.
Проблема, собственно, заключается в чем- приблуда либо не реагирует вовсе, либо начинает произвольно генерить сигналы в полной тишине. Питание от крена с конденсатором, массы с МК соединил.
12. VCOM - 10 Марта, 2009 - 10:48:08 - перейти к сообщению
а если от 2й ноги lm393 убрать RC цепочку (чтоб в воздухе балталась) скока будет??
13. ОЛЕГ - 10 Марта, 2009 - 23:44:22 - перейти к сообщению
Убрал, получилось 0,3 вольта. Светик при этом моргает, как будто микрофон реагирует.
VCOM, что показывает Ваша математическая модель моей аудиоприблуды?
VCOM, что показывает Ваша математическая модель моей аудиоприблуды?
14. VCOM - 11 Марта, 2009 - 09:29:44 - перейти к сообщению
А чо я могу сказать. Компаратор работает. Надо усилок настраивать...
15. ОЛЕГ - 11 Марта, 2009 - 14:33:24 - перейти к сообщению
Ага, я так и думал... Сапсибо, VCOM.
Там этих усилков до дури. Все такие одинаковые, но все такие разные...
Сегодня поеду прикуплю другой какой- нибудь...
Там этих усилков до дури. Все такие одинаковые, но все такие разные...
Сегодня поеду прикуплю другой какой- нибудь...