РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

ФОРУМ НА ЭЛВО

РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ
  • БЛОГИ
  • НОВОЕ
  • СХЕМЫ
  • РАЗНОЕ
  • ТЕОРИЯ
  • ТЕЛЕВИДЕО
  • СВЕТОДИОД
  • МЕДТЕХНИКА
  • БЫТТЕХНИКА
  • ИЗМЕРИТЕЛИ
  • СПРАВОЧНИК
  • ТЕХНОЛОГИИ
  • РЕМОНТ СХЕМ
  • МОБИЛЬНИКИ
  • КОМПЬЮТЕРЫ
  • НАЧИНАЮЩИМ
  • ЗАРЯДКИ И АКБ
  • СИГНАЛИЗАЦИИ
  • АУДИОТЕХНИКА
  • АВТОВЕЛОМОТО
  • БЛОКИ ПИТАНИЯ
  • РАДИОПРИЁМНИКИ
  • МЕТАЛЛОИСКАТЕЛИ
  • МИКРОКОНТРОЛЛЕР
  • РАДИОПЕРЕДАТЧИКИ


    • Страница 1 из 2
    • 1
    • 2
    • »
    Архив - только для чтения
    Запуск программы по звуковому сигналу
    Чт, 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). Я в АВР не спец, так что это только "информация к размышлению" smile Зеленым выделил свой код.
    Замер идет на ножке 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 В.
    {
    // выполняется подпрограмма
    }

    }
    }


    Сб, 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Мв

    Напряжение, а не ток. Не Мв, а мВ smile

    Цитата 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 ()
    Вот че вышло)
    Я попробовал скомпилировать выдает ошибку
    • Страница 1 из 2
    • 1
    • 2
    • »
    Поиск:

    Внимание! Форум переехал на Tehnodium.ru



    © 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA