Страница 1 из 3

Пользовательский блок ( Помощь )

Добавлено: 27 май 2017, 18:31
Uapaha74
Всем доброго времени ! 

Начал пытаться делать пользовательский блок по видео уроку [spoiler=Спойлер]_uVideoPlayer({'url':'https://www.youtube.com/watch?v=tYRF1fH ... 14Bv1DeDFH');[/spoiler]Блок FFT (от «fast Fourier transform», что значит «быстрое преобразование Фурье» )
Я с ардуино, знаком минимально, но блок такой край как нужен. 
Сил а по большей части знаний, хватило дойти до: Изображение
И тут для меня  оказался тупик :(Да и не у верен я, что предыдущие вкладки были заполнены правильно  (Declare,Setup,Loop) 

Знатоки гляньте есть ли надежна на жизнь этого блока !?, подскажите что да как .

 блок fft-_Фурье_(CODE).ubi ( или то что получилось )

Пример применения БПФ на данных от АЦП и отправка результата посредством println()

Подробное описание Arduino:Библиотеки/FFT

Пользовательский блок ( Помощь )

Добавлено: 27 май 2017, 19:01
Dev1
Для проверки кода очень полезен Notepad ++ там есть подсветка синтаксиса.

Вот пример с вашего кода из секции loop в блокноте:


Тут сразу видно что не хватает - }

Добавлено (27.05.2017, 19:01)
---------------------------------------------
Цикл while

Пользовательский блок ( Помощь )

Добавлено: 27 май 2017, 23:18
Uapaha74
Dev1 писал(а):Тут сразу видно что не хватает - }
Да   так  и есть но вот как заполнить эту вкладку ? -Изображение
Чем ? что туда писать ? ( простите за скудоумие Для меня это Эверест ! ))

Пользовательский блок ( Помощь )

Добавлено: 28 май 2017, 00:26
Dev1
Uapaha74 писал(а):Чем ? что туда писать ?
Ничего не писать. Это для отдельных функций, которые вызываете в void loop.  В примере нету отдельных функций.

Пользовательский блок ( Помощь )

Добавлено: 28 май 2017, 15:50
Uapaha74
Dev1, Как мне тогда прикрепить эту функцию "(fft_log_out);// отсылаем данные" к выходу "log" пользовательского блока 
Изображение

Пользовательский блок ( Помощь )

Добавлено: 29 май 2017, 08:03
rw6cm
Uapaha74, Можно поинтересоваться, как вы на практике хотите использовать этот блок?
Что на него подавать - что с него получать, и для каких целей?

п\с Всегда старался обходить стороной теоретиков,
сегодня с утреца на свежую голову решил восполнить пробел...
То хоть какое то имел представление - теперь сплошное месиво )))

Пользовательский блок ( Помощь )

Добавлено: 29 май 2017, 12:03
Dev1
Вчера не смог посмотреть что это за зверь. Ща открыл вики мой мозг меня послал... Открыл как пишут простое объяснение...
не осилил...

Добавлено (29.05.2017, 08:48)
---------------------------------------------
Uapaha74, сдается мне что 
[*] fft_window(); // функция-окно, повышающая частотное разрешение
[*] fft_reorder(); // реорганизовываем данные перед запуском БПФ
[*] fft_run(); // обрабатываем данные в БПФ
[*] fft_mag_log(); // извлекаем данные, обработанные БПФ
[*] sei();
обязательный кусок кода для вычисления. Хотя они тоже могут варьироваться...
Uapaha74 писал(а):Как мне тогда прикрепить эту функцию "(fft_log_out);
я думаю можно как значение переменной использовать, только байт нужно задавать (fft_log_out[byte]).
Может попробую этого зверя поковырять сегодня...

Добавлено (29.05.2017, 12:03)
---------------------------------------------
Мде... Библиотека морально устарела, ошибок куча. Оказывается, в IDE уже все сделали, в управлении библиотеками ставим ArduinoFFT, она компилируется в 1.8.2 без ошибок.

Пользовательский блок ( Помощь )

Добавлено: 29 май 2017, 18:21
Uapaha74
rw6cm, конечно можно.
На вход А0 и GND Кидается микрофон ( В моем случае, для теста, берется сигнал с наушника. )
rw6cm писал(а):что с него получать
1)Линейный спектр: 20герц, 25герц, 30 , 35, 40 ,...........20 000герц ( градация условна )
2) Логарифмический спектр низких частот от 20герц до 100 герц ( Насколько я понял его, он рассчитывает максимально громкую частоту по отношению к другим )  
что мне в принципе и нужно.
rw6cm писал(а):и для каких целей
Измерение звукового  спектра для настройки аудио систем . ( частное использование )

Dev1,  
Dev1 писал(а):Открыл как пишут простое объяснение...не осилил...
 Я сам закипел, Но край как нужно .
Dev1 писал(а):она компилируется в 1.8.2 без ошибок.
В IDE 1.8.1 тоже запускается без проблем , единственное что  примеры нужно брать с сайта, из первого поста , т.к. один из примеров, идущий с библиотекой, выдает ошибку .

Пользовательский блок ( Помощь )

Добавлено: 30 май 2017, 12:26
AVGN

Пользовательский блок ( Помощь )

Добавлено: 30 май 2017, 18:42
Uapaha74
Примерно такое решение я и хотел бы видеть в пользовательском блоке.

Пользовательский блок ( Помощь )

Добавлено: 30 май 2017, 19:40
AVGN
Uapaha74 писал(а):Пример применения БПФ на данных от АЦП и отправка результата посредством println()
Не компилируется, выдает ошибки. Из этого примера невозможно сделать блок.

Пользовательский блок ( Помощь )

Добавлено: 31 май 2017, 17:23
Uapaha74
AVGN, Вот еще пример на этой же библиотеки. <a class="link" href="http://u.to/ukn3Dw" title="http://wikihandbk.com/wiki/Arduino:%D0% ... 8B/fft_adc" rel="nofollow" target="_blank">Применение БПФ на данных от АЦП и отправка результата посредством write()
AVGN писал(а):Не компилируется, выдает ошибки. Из этого примера невозможно сделать блок.
Не компилируется  блок в среде FLPROG , или же в  Arduino ID сам пример?

Библиотека fft_3

Пользовательский блок ( Помощь )

Добавлено: 01 июн 2017, 15:25
rw6cm
Uapaha74 писал(а):1)Линейный спектр: 20герц, 25герц, 30 , 35, 40 ,...........20 000герц 
2) Логарифмический спектр низких частот от 20герц до 100 герц
Честно говоря берут сомнения, что АЦП ардуины с этим справится.
В качестве "цветомузыки" возможно это и пойдет,
но в качестве анализатора данные будут очень относительные.
Будет время для интереса попробую.

Пользовательский блок ( Помощь )

Добавлено: 02 июн 2017, 20:05
Uapaha74
rw6cm писал(а):Будет время для интереса попробую.
Буду очень благодарен!

Пользовательский блок ( Помощь )

Добавлено: 10 июл 2017, 10:11
pan
может кто подсказать по использованию программного i2c ? пните в нужном направлении )

Пользовательский блок ( Помощь )

Добавлено: 10 июл 2017, 14:33
Sancho
pan,
Библиотека Write.h
Простые команды: запись
одного

Wire.beginTransmission(address);
Wire.write( byte ); // адрес регистра
Wire.write( byte ); // значение
Wire.endTransmission();

несколько
Wire.beginTransmission(address);
Wire.write(first byte);
Wire.write(byte);
Wire.write(byte);
Wire.write(byte);
Wire.endTransmission();

чтение одного

Wire.beginTransmission(address);
Wire.write( byte ); // адрес регистра

Wire.endTransmission();
Wire.requestFrom(address, (uint8_t) 1);
rezultat = Wire.read();

несколько, в примере 3

Wire.beginTransmission(address);
Wire.write( first byte );  // адрес первого регистра 
Wire.endTransmission();
Wire.requestFrom(address, (uint8_t) 3);
rez_1 = Wire.read();
rez_2 = Wire.read();
rez_3 = Wire.read();

Добавлено (10.07.2017, 14:33)
---------------------------------------------
Необходимо учитывать семибитную систему адресации, где правый, младший разряд в восьмибитном слове - это служебный символ запись/чтение.
То, как определяет сканер FLPRog, можно вставлять напрямую и ничем не заморачиваться.

Пользовательский блок ( Помощь )

Добавлено: 10 июл 2017, 14:44
pan
как будет выглядеть аналогия железного i2c  Wire.requestFrom(X,Y,); ?

Добавлено (10.07.2017, 14:44)
---------------------------------------------
блин проглядел. сори

Пользовательский блок ( Помощь )

Добавлено: 10 июл 2017, 14:48
Sancho
Не совсем понял вопрос.
I2c в ардуино на А4,А5 аналогична в работе serial0, также в setup Wire.begin(); как и Serial.begin(115200);
Глубже не копал...

Пользовательский блок ( Помощь )

Добавлено: 10 июл 2017, 14:51
pan
Sancho, для особо одаренных( я про себя) , как пины назначить

Пользовательский блок ( Помощь )

Добавлено: 10 июл 2017, 14:55
Sancho
При "изготовлении" пользовательских блоков указанные выше "наборы" лучше определять в функции и потом делать к ним обращения с аргументами. Не запутаешься.

Добавлено (10.07.2017, 14:54)
---------------------------------------------
Например, название
uint ReadRegister(uint8_t address , uint8_t offset)

внутри
Wire.beginTransmission(address);
Wire.write(offset);
Wire.endTransmission();
Wire.requestFrom(address, (uint8_t) 1);
return Wire.read();

Добавлено (10.07.2017, 14:55)
---------------------------------------------
Пины на ардуинке я не пробовал переназначать, не было необходимости.
По умолчанию А4 А5. Сори, исправил