Запуск программы по звуковому сигналу
Чт, 13.11.2014, 21:26 | Сообщение # 1
looksfilm
Постов: 328
ОК
Как реализовать включение программы мк автоматически когда, микрофон слышит музыку. Использовать условия скажем. Если ток на ножке привысил больше >200 то прогрмама начинает работать Если ток на ножке привысил больше >300 то идет 2 программа Если ток на ножке привысил больше >400 то идет 3 программа итд. Но не вариан, они все будут рывками переключаться, нужно запустить только 1 цикл. Как можно реализовать?Добавлено (13.11.2014, 22:26) --------------------------------------------- Короче не кто не знает?
Пт, 14.11.2014, 17:09 | Сообщение # 2
Витинари
Постов: 1503
Друзья
Рой в сторону АЦП. Надо будет собрать нечто на основе амперметра и периодически (раз в четверть секунды, например) замерять ток на входе. В зависимости от полученного значения и будет (через условные операторы) запускаться подпрограмма. Вот и все!
Сб, 29.11.2014, 04:47 | Сообщение # 3
looksfilm
Постов: 328
ОК
Мож кто то знает? Суть в чем нужно скажем на порт A 0 и A 1 Повесить микрофон, и когда ток скажем превысит на входе мк 200Мв запускается програма в контройлере.
Сб, 29.11.2014, 05:48 | Сообщение # 4
Витинари
Постов: 1503
Друзья
Цитата looksfilm (
)
Суть в чем нужно скажем на порт A 0 и A 1 Повесить микрофон, и когда ток скажем превысит на входе мк 200Мв запускается програма в контройлере.
Какой контроллер? По-прежнему тинька? Я уже советовал выше использовать АЦП. Фактически, тебе нужно собрать вольтметр, каждые секунду-полсекунды проверять показания, и по ним запускать подпрограммы.
Сб, 29.11.2014, 06:06 | Сообщение # 5
looksfilm
Постов: 328
ОК
Цитата NovemberDreamer (
)
Какой контроллер? По-прежнему тинька? Я уже советовал выше использовать АЦП. Фактически, тебе нужно собрать вольтметр, каждые секунду-полсекунды проверять показания, и по ним запускать подпрограммы.
Пример можно хоть какой то.
Сб, 29.11.2014, 06:23 | Сообщение # 6
Витинари
Постов: 1503
Друзья
Вот кусок кода для измерения напряжения (в оригинале была AtMega8). Я в АВР не спец, так что это только "информация к размышлению" Зеленым выделил свой код. Замер идет на ножке ADC0. Цитата
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile unsigned int display = 0; volatile unsigned long value; volatile unsigned int adc_counter; // Прерывание по окончанию преобразования АЦП ISR (ADC_vect) { value = value + (ADC*11/4); // Суммируем старое и новое значения АЦП, преобразуем adc_counter++; // Увеличиваем счетчик измерений } // Главная функция int main (void) { // Настройка АЦП ADCSRA |= (1 << ADEN) // Разрешение АЦП |(1 << ADSC) // Запуск преобразования |(1 << ADFR) // Непрерывный режим работы АЦП |(1 << ADPS2)|(1 << ADPS1) // Предделитель на 64 (частота АЦП 125kHz) |(1 << ADIE); // Разрешение прерывания от АЦП ADMUX |= (1 << REFS1)|(1 << REFS0); // Внутренний ИОН 2,56V, вход ADC0 sei(); // Глобально разрешаем прерывания // Главный цикл while(1) { if(adc_counter > 300) // Если количество измерений больше 300 { display = value/adc_counter; // Вычисляем среднее значение АЦП adc_counter = 0; // Обнуляем счетчик измерений value = 0; // Обнуляем буфер АЦП } _delay_ms(50); // запуск подпрограммы if(display >= 60) // значение вычислено примерно. Должно бы соответствовать 0,2 В. { // выполняется подпрограмма } } }
Цитата looksfilm (
)
Маэстро говорит так лучше.
Выписка из правил
Запрещено создавать следующие темы и сообщения на форуме: - дублирующие по тематике существующие; Не хулигань
Сб, 29.11.2014, 09:25 | Сообщение # 7
looksfilm
Постов: 328
ОК
У меги и тини код разный. например вот мега #include <avr/io.h> #include <util/delay.h> Вот тини #include <tiny13a.h> #include <delay.h>Добавлено (29.11.2014, 10:22) --------------------------------------------- Короче разобрался есть такие ноги у мк ADC 1 ADC 2 ADC 3 Вот на них идет сигнал, потом програмно замеряешь его и запускаешь нужный цикл.
Добавлено (29.11.2014, 10:25) --------------------------------------------- Как смоделировать аудио в Proteus "пишет неправельная амплитуда"
Сб, 29.11.2014, 11:19 | Сообщение # 8
Egour
Постов: 916
Друзья
Цитата looksfilm (
)
У меги и тини код разный
Я не особо разбираюсь в МК Atmel, но что-то мне подсказывает - код разный не у тини и мега, а различается код написанный в разных средах разработки. Цитата looksfilm (
)
когда ток скажем превысит на входе мк 200Мв
Напряжение, а не ток. Не Мв, а мВ Цитата looksfilm (
)
Как смоделировать аудио в Proteus "пишет неправельная амплитуда"
Если что, дробные значения нужно вводить через точку, а не через запятую. Запятых Протеус не понимает.
Сб, 29.11.2014, 11:54 | Сообщение # 9
looksfilm
Постов: 328
ОК
Чем можно скомпилировать из BASCOM-AWR в hex ??? Добавлено (29.11.2014, 12:53) --------------------------------------------- Все разобрался! Добавлено (29.11.2014, 12:54) --------------------------------------------- Вот че вышло) $regfile = "attiny13.dat" $crystal = 9600000 Config Adc = Single , Prescaler = Auto , Reference = Internal Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portb.3 = Output Start Adc Do If Getadc(2) >= 500 Then Portb.0 = 1 Waitms 200 Portb.0 = 0 Portb.1 = 1 Waitms 200 Portb.0 = 0 Portb.1 = 0 Else Portb.0 = 0 Portb.1 = 0 End If If Getadc(2) >= 700 Then Portb.2 = 1 Waitms 200 Portb.2 = 0 Portb.3 = 1 Waitms 200 Portb.2 = 0 Portb.3 = 0 Else Portb.2 = 0 Portb.3 = 0 End If Loop End
Сб, 29.11.2014, 16:23 | Сообщение # 10
caha2011
Постов: 766
Друзья
Цитата looksfilm (
)
Вот че вышло)
Я попробовал скомпилировать выдает ошибку