Jump to content
Sign in to follow this  
Guest MagicianT

Делаем спектроаналайзер из ардуино.

Recommended Posts

Приглашаем на вебинар «Новинки и уникальные решения Molex. На что обратить внимание и почему»

15 апреля приглашаем на вебинар, который будет интересен разработчикам и инженерам-схемотехникам, интересующимся тенденциями рынка, новыми перспективными решениями для соединений «провод-провод», «провод-плата», «плата-плата». Для инженеров КИПиА и IT будут освещены уникальные решения Molex для «удлинения» интерфейсов HDMI, DisplayPort и USB даже в условиях сильного зашумления, а также семейство бесконтактных датчиков Contrinex. Помимо этого, будет уделено внимание дальнейшему развитию направления антенн, где Molex имеет ряд интересных и уникальных решений.

Подробнее

Частота дискретизации 20480  возможно её уменьшить ?

Как реализовать вывод на lcd в цифрах , частоты с максимальной амплитудой ?

Share this post


Link to post
Share on other sites
Guest MagicianT

Библиотека тестировалась на ардуино Уно, 16 МГц,  для других тактовых частот там формулу подправить маленько надо будет. Дискретизация любая, какую таймер потянет, кажется до 488 Гц можно уменьшать.

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

  for ( int i = 0; i < FFT_SIZE/dlina; i++)
   { if ( (data[i]) > peak ){
        peak = data[i];
        nbr = i;
       }

Там же в библиотеке есть код скетча

Share this post


Link to post
Share on other sites
                     

Выбираем преобразователь для портативных устройств

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

Читать статью

А как же быть мне нужна частота дискретизации 240 как быть ?

Edited by Q-ti

Share this post


Link to post
Share on other sites
Guest MagicianT

Так, давайте по порядку. Здесь топик спектроаналайзера, в нём частота выборки определяется здесь

#define  SMP_RATE                20480       // Sampling Rate, in Hz
#define  SMP_TMR1 ((16000000UL/SMP_RATE) -1) // Sampling Period of Timer1

и здесь

void adc_init()
{ 
  ADMUX    = 0xC5;        // PIN 5 Analog. REF Internal. Bias = 0.55V
  ADCSRA = ((1<< ADEN)|   // 1 = ADC Enable
      (0<< ADSC)|         // ADC Start Conversion 
      (1<<ADATE)|         // 1 = ADC Auto Trigger Enable
      (0<< ADIF)|         // ADC Interrupt Flag
      (0<< ADIE)|         // ADC Interrupt Enable
      (1<<ADPS2)|
      (0<<ADPS1)|         // ADC Prescaler : 1 MHz.
      (0<<ADPS0));  
  ADCSRB = ((1<<ADTS2)|   // Sets Auto Trigger source - Timer/Counter1 Compare Match B
      (0<<ADTS1)|
      (1<<ADTS0));
  /* Set up TIMER 1 - ADC sampler */
  TIMSK0 = 0x00;
  TIMSK1 = 0x00;
  TIMSK2 = 0x00; 

  TCCR1A = 0;
  TCCR1B = 0;
  TCCR1C = 0;

  TCCR1A =  ((1<<WGM11) | (1<<WGM10));       // Mode 15, Fast PWM
  TCCR1B =  ((1<<WGM13) | (1<<WGM12));       // Mode 15, Fast PWM

  TCCR1B |=  (1<<CS10);                      // clk/1 prescaling.
  OCR1A  = SMP_TMR1;
  OCR1B  = SMP_TMR1;

  TCNT1  = 0;
  TIFR1   |= (1<<OCF1B); 
  TIMSK1  |= (1<<OCIE1B);
}

Для низких частот преселектор таймера изменить надо, это вы сами делайте или открывайте другой топик по конфигурации таймеров на АтМеге. Регистр TCCR1C, CS10-CS11-CS12.

В примере (скетче) библиотеки всё проще

void sampling() {
  ADCSRA = 0x85;   // turn on adc, freq  = 1/32,   500 kHz/ 13.5 =~ 36 kHz sampling rate
  ADMUX = 0x40;    //Bit 5 – ADLAR: NO ADC Left Adjust Result
  ADCSRA |= (1<<ADSC);

  while(!(ADCSRA & 0x10));
  int sum2b;
  for(int i = 0; i < FFT_SIZE; i++ ) {
    while(!(ADCSRA & 0x10));
    ADCSRA |= (1<<ADSC);
    sum2b =  ADCL; 
    sum2b += (ADCH << 8);   
    f_r[i] = sum2b - sdvig;
  }  
  ADCSRA = 0x00;
}

Вопрос в том, надо в реальном времени выборки - сэмплирование делать, или можно периодически, второй вариант намного проще

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By Uhbif
      Насколько устойчивы жки к вибрации, можно ли их применять в военной технике связи. Конкретный пример, есть индикатор BCB0802-02 фирмы Blaze у него в даташите есть такой параметр DRIVE MODE: 1/16 DUTY, 1/5 BIAS. Как это понять? может кто то сталкивался.
      Вопрос по жки.doc
    • By Merlok Life
      Хочу сделать монстр-машинку с двигателем rs550 с металлическим корпусом на ардуино.
      Подскажите как управлять мотором через ардуино нано? 
       
    • By Геннадий Быков
      Уважаемые электронщики и им сочувствующие!
      Хочу на даче собрать макет морского маяка в человеческий рост. Но для этого необходима схема управляющая светодиодами. Основное, схема должна иметь независимое питание(Солнечная панель) и быть слаботочной (5-9 вольт). Как вижу я. Маяк ориентировочно высотой 1,50-1,80 м. В маяке, с низу до верха 6 окошек (по одному 5мм светодиоду). И на верху сам маяк из 8-ми 0,5 ваттных светодиодов установленных по кругу. С наступлением темноты, включаются диоды на "1 этаже" и раз в 5-10 минут происходит действие. Диоды поэтажно (снизу вверх) начинают загораться (как будто кто-то поднимается вверх по ступеням) и после загорания самого верхнего окна, через пару секунд, включается маяк. Поочередно по кругу (эффект метеора), со скоростью 2-3 сек на круг, делает оборотов 10 и выключается. Потом в обратной последовательности гасятся окошки (светодиоды) сверху в низ и остаются два нижних, периодически и независимо включающиеся и выключающиеся (эффект присутствия). И вновь через 5-10 минут вышеописанное действие. Буду очень признателен любым советам, ссылкам, помощью. Немного умею паять, немного знаю Ардуино. Готов в разумных пределах спонсировать, разработку и сборку.
    • Guest ренат
      By Guest ренат
      Всем здрасти))))
      прошу помощи в написании программы
      мои знания программирования на ардуино основаны на примерах и школьного курса )))
      так вот есть программы 
      int LedPin = 8;             // Подключаем светодиод к порту 13
      int ButPin = 2;             // Подключаем кнопку к выходу 10
      int flag = 0;                // флаг состояния
      int LedPinTime = 100;
      void setup()
      {
        pinMode(LedPin, OUTPUT);   // Инициализируем порт "ledPin" как выходной
      }  
      void loop()
      {
        if(digitalRead(ButPin) == HIGH && flag == 0)      
          {                                              
            digitalWrite(LedPin, !digitalRead(LedPin));
            flag = 1;
          }
        
        if(digitalRead(ButPin) == LOW && flag == 1)
          {
            flag = 0;
          }  
      }
      собрал из кусков, работает )))))
      но не то что мне нужно 
      Мне нужно чтобы при нажатие одной кнопки(без фиксации) светодиод загорался на три секунды ( и не важно держишь ты кнопку или кратковременно нажал, он через три секунды потухнет) 
      помогите кто может))) я в благодарность могу и на телефон денег кинуть )))) спасибо
    • By pingyini
      Всем доброго времени суток. Решил я сделать "умную" электронную сигарету на arduino. Концепция заключается в кнопочном управлении мощностью посредством ШИМ, наличии экрана, и некоторыми защитами в виде ограничения максимального времени нажатия и уход камня в сон (режим пониженного энергопотребления) после N секунд простоя.
      Вводные: по нажатию кнопки запускается ШИМ и управляет полевиком, но в целях защиты я хочу ограничить время выполнения кода до 7 секунд(что бы при случайном зажатии кнопки в кармане не получить травматическую ампутацию конечностей)

      Проблема пришла откуда не ждали - обработка нажатой основной кнопки срабатывает как попало. Нажимая кнопку обработчик может сработать сразу и отработает как по маслу, а может и через 5 нажатий не сработать вовсе.  Проверял в живую на Arduino UNO, Pro Mini (328е Меги) и в Proteus'е. Симптомы одни и те же.  Проблема очевидно в коде но я в упор не вижу в чем может быть загвоздка. Уровень у меня "штота умею" поэтому не судите строго. 
       
      #define pwmPin 5 #define buttonStart 3 #define maxOnTime 7000 //максимальное время выполнения условия нажатой кнопки #define RED_LED 7 #define GREEN_LED 8 int power = 150; //boolean StartState; boolean StartStateFlag; //Флаг кнопки Старт unsigned long pressTime; void setup() { pinMode(pwmPin, OUTPUT); pinMode(buttonStart, INPUT); pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); Serial.begin(9600); //чисто для отладки } void loop() { if (digitalRead(buttonStart) && StartStateFlag && ((millis() - pressTime) <= maxOnTime)) { // (1) если кнопка старт нажата И была отпущена И нажата менее 7 секунд выполняем: analogWrite(pwmPin, power); //запуск ШИМ Serial.println("PWM_ON"); digitalWrite(GREEN_LED, HIGH); digitalWrite(RED_LED, LOW); } else { // (2) иначе StartStateFlag = false; // кнопка небыла отпущена analogWrite(pwmPin, 0); digitalWrite(GREEN_LED, LOW); Serial.println("PWM_OFF"); pressTime = millis(); } if (!digitalRead(buttonStart)) { //(3) если кнопка не нажата analogWrite(pwmPin, 0); //остановка ШИМ Serial.println("PWM_OFF"); digitalWrite(RED_LED, HIGH); StartStateFlag = true; //была отпущена и можно входить в условие с нажатой кнопкой (1) } } И файлы: сам скетч, .elf и .hex для шПротеуса и проект Протеус.
      P. S. ШИМ в Протеусе не работает в принципе, в железе все ОК 
      BUTTON_TEST.ino
      BUTTON_TEST.ino.eightanaloginputs.hex
      BUTTON_TEST.ino.elf
      BUTTON_TEST.ino.with_bootloader.eightanaloginputs.hex
      ButtonTest.pdsprj
  • Сообщения

    • Наоборот... От непоняток это право многократно возрастает, пока люди не удостоверятся в безопасности, для них, проводимых работ, в ясности и открытости задач и благородстве поставленных целей.  
    • у меня исключен трансформатор  уже. вместо транса ИИП на 36В приходит на диодный мост.
    • Тоже хотел подобное написать, но везде пишут разные цифры, 2019 вроде как рекордный по смертности (или по убыли населения, не поймёшь) без всяких пандемий, в первом квартале 2019 вроде как умерло поболее чем в 2020. Всё равно в матчасть нормально вникнуть не дадут, "внутренняя кухня" вообще не доступна "простым смертным", кроме пропоганды из СМИ достоверной информации нет, а вопросов много.  Вспоминаем свинячий с курячим (вроде ещё какой-то был, но уже глобально не бурлило) и готовимся к очередной "телевизионной инфекции", когда эта притихнет, уже поговаривают о какой-то заразе от летучих мышей....    Как-то очень глобально для полной туфты. Само собой: "кому война, а кому мать родна", "так ли страшен черт... ", но кмк на весь мир оно бы не рассеялось. 
    • Я такого не говорил.   Если чего-то непонятно, то это не дает право навешивать обвинения.
    • Наверное вы правы... 
    • Ответ принимается, но в случаи с COVID-19 убивает именно вирусная пневмония.
×
×
  • Create New...