C

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

7 сообщений в этой теме

Глянуть бы скетч.

Отправлено с моего LG-d802 через Tapatalk

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем Q-ti
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

#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;
}

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

0
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был востановлен.   Очистить редактор

Загрузка...

  • Похожие публикации

    • Автор: snake1122a
      Интересуюсь есть ли альтернативы шилдам NRF24L01 и MX-05V/MX-FS-03V для RF обмена?
      Насколько я понял, NRF24L01 работает по пайпам/каналам, только одна пара может общаться одновременно. Что не подходит: если устройств много, третье устройство никак не может узнать, что два других в это время общаются и может "влезть" в чужой разговор.
      В MX-05V/MX-FS-03V , как я понял, для организации приема потребуется постоянное программное прослушивание, в принципе это вариант, но хотелось бы узнать нет ли еще вариантов такого рода.
       
    • Автор: snake1122a
      Хочу создать некое устройство на ардуино pro mini, работающее 24/7 и интересует вопрос надежности. Известны ли данные насчет того, как часто этот контроллер может повисать по программным и аппаратным причинам? Подумалось, а почему бы не поставить рядом простой примитивный таймер, который бы сбрасывал его, например, каждые 5 минут (если это не влияет на основную функциональность разработки или есть возможность это координировать)?
    • Автор: Не баг а фича (Не баг а фича)
      Очень странный семисегментник ba56-11srwa q. Я полный профан в этом деле, только вчера приобрел ардуино. Помогите его подключить.

    • Автор: snake1122a
      Собираю контроллер на ардуино (pro mini). Хотелось бы в дополнение к основным функциям добавить функцию измерения собственного напряжения питания (подающегося на вывод встроенного в ардуино стабилизатора напряжения питания). То есть если питание автономное, можно будет прослеживать состояние и динамику разряда батареи и, соответственно, как-то прогнозировать сколько еще можно "протянуть".
      Некоторые контроллеры имеют специальные "засекреченные" регистры -- может, у ардуино тоже есть такой?
      Самым простым решением кажется подключить питающее напряжение через какой-нибудь там резистор на один из аналоговых выводов и просто его мерять. Что смущает -- на самом деле эти выводы меряют не абсолютное напряжение, а напряжение в диапазоне от 0 (минимум) до "напряжения питания" (максимум) выдавая результат от 0 до 255. И здесь вопрос - что считается "напряжением питания". Если это уже стабилизированное напряжение 5В (что скорее всего и должно быть), то все нормально, только надо поставить делитель, так как измеряемое нерегулированное напряжение будет больше максимума (стабилизированного напряжения). Ну а если "напряжение питания" это нерегулированное напряжение, то результат всегда будет максимум, то есть 255.
      Или, может, такого типа вопрос решается совсем другим способом, например, через специализированный элемент (есть свободный аналоговый вывод, также используется SPI)
    • 3
      Автор: Гость drey.a.s
      Помогите со скетчем для инкубатора имеется ардуино уно lcd keypad shiled датчик 
      dht22 блок на 4 реле часы ds1302 планируется измерение температуры коррекция работы нагревателя через реле вывод температуры на дисплей измерение влажности коррекция через реле вывод на дисплей переворот лотка по времени через реле вентиляция по времени через реле отображение времяни инкубации дни часы и авварийный сигнал при превышении температуры если можно с коментариями в скетче
      Сам я нуб в программировании пытался копировать и вставлять скейтч с интернета а он даже не проходит проверку в среде ардуино пишет ошибку
  • Сообщения

    • Не знаю, по теме ли, но может быть поможет кому... У меня вот три одинаковых случая было с ATtiny2313. Шил я их с помощью PonyProg2000, через самодельный программатор на COM-порте. Проблема возникла такая - игрался я значит с этим камешком, что-то шил туда, совал в схему (ISP-разъемов я не делаю, просто таскаю камень из панельки в панельку), тестил, отлаживал, снова шил - в общем, вы в курсе ...  Фьюзы не трогал... И вдруг, при очередном подключении микрухи к программатору и попытке его прошить Поня выкидывает окошко - "Error (-24) - unknown device!", и все! И это при том, что будучи сунут в схему камень-то пашет!!! А с Поней почему-то общаться не хочет... Снаяала я тоже подумал, что фьюзы забились - доктора разработал, собрал, оттестил на рабочих МК (и даже статью про него в "Радиоконструкторе" опубликовал ); но прогнал через доктора болящих и... ни-че-го! Опять долбанная (-24)!!! Тогда, окончательно психанув (столько времени на "Доктора" потратил!), я крикнул "клизму им!", и в сообщении об ошибке нажал не как всегда "Cancel" (типа, отказаться от затеи), а "Ignore" (типа, наплевать, что МК не отвечает, и залить в него прошивку через ж##у)... И - о чудо! - новая прошивка залилась в микруху, и она абсолютно нормально заработала! То же и при попытке прочитать МК или его фьюзы - Поня ругается, мол камень не отзывается, не вижу его; а я ей - "Ignore" - типа, все равно пытайся! И микр нормально прочитался, и все фьюзы его тоже!.. Вот такая вот "трю стори"...  А если прикинуть, что же привело микруху к такой необщительности, то я думаю, что виной всему статическое напряжение на наших руках (хотя, котэ я не держу )... Не зря же про него так навязчиво пишут практически во всех дата-шитах!.. Минздрав, как говорится, предупреждал!..
    • Роман, ну, есть же люди - мастера в своём секторе деятельности, а рядышком никак...
      Рассказывал напарник про его коллегу, аспиранта, который три года делал блок питания, но дальше овощного ящика и диодного моста не ушёл.
    • Асхат, Настройка передатчика это искусство.Тут включается всё и опыт и знание и смекалка,само собой и умение пользования кип.
    • Богдан, А потом займись его изучением как его эксплуатировать и проводить измерения
    • Играюсь, в основном, с "мелкотой" - ATtiny2313 и ATtiny13, т.к. для неболших поделок в дом и в автомобиль их функциональности вполне хватает - зачем же тогда переплачивать за "навороченные" меги? А единственным вменяемым выбором для "малышей" является "Тетя Ася". MicroPascal, конечно же, прекрасен, но его аппетиты по отношению ко Flash-памяти ставят крест на всех его достоинствах; да и библиотек к нему пока что маловато... А Сю я не люблю с самого начала за душевнобольной синтаксис - от обилия черточек натурально болят глаза... А вот в новомодных Ардуинах нужды пока что не испытываю - во-первых, и Тинек хватает; а во-вторых жду, когда гуманисты наконец-то создадут Pascal-образную среду для этих девайсов... К Сям я, как видите, не толерантен - модератор, можете банить!
    • Это как в вождении авто,помимо знания смысла дорожных знаков и правил надо еще и уметь водить машину и знать устройство и принцип работы всех узов автомобиля.Что бы смог отремонтировать.
      А ты хочешь знать только что обозначают дорожные знаки и толку с этого?
      Так и в радиотехнике,мало знать условные графические обозначения,надо ещё знать устройство и принцип работы всех деталей, узлов и каскадов.И два дня будет мало чтоб узнать. https://vk.com/doc146041070_429173772
    • Посмотрел, да, в отличие от NRF24L01 у RXQ2-433 есть broadcast плюс вроде бы можно использовать один адрес для множества конечных устройств. Можно было бы всех посадить на один адрес, а адресацию организовать программно. В таком случае любое устройство могло бы инициировать передачу, первоначально прослушав, нет ли активного обмена данных между другими устройствами. Короче, надо вначале разобраться, что на самом деле мне нужно. Возможно, поллинг был бы все же наиболее определенным процессом. Кстати, судя по всему эти RXQ2-433 не так легко найти?