Автор Тема: Микроконтроллер - как перспектива примочкостроения  (Прочитано 25172 раз)

0 Пользователей и 1 Гость просматривают эту тему.

ivana

  • Сообщений: 3
  • GtLab.Net forever!
    • Просмотр профиля
    • E-mail
Это
Цитировать
легко как два пальца
и на словах и в коде и в железе. В СПб
Цитировать
нет ни тюнеров, ни драм машин, ни толкового бит крашера
?
Надо Турку сказать - пусть расширит ассортимент, озолотится :) Насчет бит-крашера не знаю что это вообще такое, но тюнер с метрономом даже мне написать очень просто, в оговоркой на возможную сложность индикационного табла  ::) Кстати, простейшая задачка моргания светодиодом с изменяемой частотой, с которой начинает большинство свой путь в мучение МК - это уже готовый метроном.

research

  • Гость
метроном - да. А драмку, попробуй нормальных барабасов и  крэшей впихни в 64к кристалл, и чтобы звучало заметно лучше Zoom. Не так-то просто, когда дело доходит до практики.

Под практикой подразумевается вещь, которой можно пользоваться, а не макет.
« Последнее редактирование: Декабря 02, 2011, 04:27:43 pm от research »

ivana

  • Сообщений: 3
  • GtLab.Net forever!
    • Просмотр профиля
    • E-mail
Не, про нормальные семплы и их склейки - отдельный разговор :)
Хотя, идея сделать метроном звучащий не щелчками а коротким семплом витает в воздухе. Например, записать крик какой-нибудь теннисистки при ударе и этим вскриком метрономить  ::) Думаю, заниматься будет гораздо интереснее  ;D

VAT

  • Сообщений: 1453
    • Просмотр профиля
    • E-mail
Rst7,
 зашел на чип-дип, поискал что там есть под малые корпуса. 32битные это уже ног эдак 48, а зачем такие излишества? 
адекватно моей задаче выходит ATTINY24A,
цена в $6 правда несколько расстроила..

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Цитировать
цена в $6 правда несколько расстроила..

Так Вам шашечки (8 бит с знакомыми тремя буквами AVR за шесть баксов) или ехать (LPC1114FBD48 с корпусом о 48 ног в MT-System за 50 рублей в розницу)?
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

VAT

  • Сообщений: 1453
    • Просмотр профиля
    • E-mail
Rst7:
мне - результат. Я не уверен что он будет проще и быстрей если разрядность будет 32 бита.
-киньте в личку, плиз, где это можно купить
При моей данной конкретной задаче скорость и разрядность дело распоследнее (а-ля сигнализация).
 Из важных параметров: наличие АЦП с опорой - отслеживать батарейку, 4-7 входных, 2-4 выходных ног, питание батарейное 3В, потребление минимальное, желательно чтоб батарейки (типа большой литиевой таблетки, наверное 200-500мАч) хватило на полгода-год при опросе входов раз в полсекунды.

PS:
Зачастую от процессора требуют решения ненужных задач. Например из опыта 10летней давности:
Некое устройство с 12бит АЦП которое требует калибровки.
Вариант 1 (ТЗ)- снятие данных с АЦП микроконтроллером, передача этих данных в РС вторым микроконтроллером (первый типа сильно загружен сканированием нескольких каналов с усреднением и передачей данных по компорту), расчет коэффициентов в РС (поскольку требуется 16-разрядное деление!. Поправочные коэффициенты затем спускаются сверху вниз, храняться и используются вторым микроконтроллером. Заняты делом 3 процессора.
вариант 2 - на единственный микроконтроллер приходит команда "калиброваться" - и он тупо прибавляя по 1чке подгоняет свои коэффициенты под входной образцовый сигнал. 16-ти разрядное деление просто не нужно. Ну и еще куча + по ТТХ, включая совместимость со сторонним софтом.
А на выход прошел вариант №1((

« Последнее редактирование: Декабря 06, 2011, 02:14:44 am от VAT »

Peratron

  • Сообщений: 13579
  • GTLab - forever!
    • Просмотр профиля
    • E-mail
Цитировать
-киньте в личку, плиз, где это можно купить
А чем чипфайнд не угодил?!  :-?
Схемотехническая мантра: титцешенкохоровицехилл. Повторять до просветления...

VAT

  • Сообщений: 1453
    • Просмотр профиля
    • E-mail
Peratron, спасибо.
я ж давно не у дел - больше 10 лет.( - откуда мне знать где искать.
Отдельно спасибо за Ардуино. Читал я в своё время спецификации и USB1.1 и PCI/32бит ))) Некоторые думают что это типа эволюция компорта и шины ISA.) Эх туда бы в 1999й эту Ардуину..   

Беглый поиск по сайту дал по ATtiny24 -  45-70руб/шт
по LPC1114FBD48 - 100-150руб/шт
что в общем-то ощутимо если задача простая..
Честно говоря не огорчился.

Почему чип-дип торгует минимум в 2 раза дороже даже большими партиями? охренели?


Peratron

  • Сообщений: 13579
  • GTLab - forever!
    • Просмотр профиля
    • E-mail
В чип-дипии давно уже ловить нечего - а процессорную мелочь удобней всего брать на митьке. Там на цокольном этаже есть лавочка - кажется, называется "импортные микросхемы" и цены там реально невеликие. Она чипфайндом отыскивается - я так на неё и вышел.
Несмотря на завлекательные цены новые 32-разрядники обойдутся в совокупности дороже - и в том числе и по затрате ресурсов на освоение.
Для множества задач атмега8 является оптимальным по совокупности всех факторов.

Если что - пиши в личку...
Схемотехническая мантра: титцешенкохоровицехилл. Повторять до просветления...

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Цитировать
-киньте в личку, плиз, где это можно купить

Я же вроде пальцем тыкнул - компания MT-System.

http://www.mt-system.ru/

Являются официальным дистрибьютором NXP в России. Соответственно минимальные цены на продукцию.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Цитировать
Несмотря на завлекательные цены новые 32-разрядники обойдутся в совокупности дороже - и в том числе и по затрате ресурсов на освоение.

Ну-ка обоснуйте.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Jimmy_Page

  • Гость
Обсуждения тюнера были перенесены в [link=http://forum.gtlab.net/cgi-bin/yabb2/YaBB.pl?num=1327342899/0#0][splithere][/link]
« Последнее редактирование: Января 26, 2012, 04:18:19 pm от Jimmy_Page »

Rus

  • Сообщений: 1017
    • ICQ клиент - 305702633
    • Просмотр профиля
    • E-mail
Влезу снова со своей сверткой.
Известно (вроде как), что линейную свертку во временной области можно реализовать, перемножив Фурье-образы сигналов, а затем проделать оДПФ с результатом. Но у меня из этого получается какая-то фигня. При этом, точно могу сказать, что БПФ и оБПФ выполняются правильно. Может, там что-то еще какая операция нужна? Я просто почленно умножаю действительные и мнимые части результатов БПФ сигналов.

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Цитировать
Известно (вроде как), что линейную свертку во временной области можно реализовать, перемножив Фурье-образы сигналов, а затем проделать оДПФ с результатом. Но у меня из этого получается какая-то фигня.

Не фигня, а циклическая свертка.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Rst7

  • Сообщений: 1619
  • Мимо проходил...
    • Просмотр профиля
    • E-mail
Цитировать
Я просто почленно умножаю действительные и мнимые части результатов БПФ сигналов.

Ну только не почленно, а
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен

Rus

  • Сообщений: 1017
    • ICQ клиент - 305702633
    • Просмотр профиля
    • E-mail
Туплю что-то... это же формула с 5-го класса!
Может кто-то подсказать, как получить не циклическую, а линейную сверту из Фурье-образов? Книжки читал, но не нашел про этот аспект :(

Еще порылся в нете и добавил:
Вопрос решен :)
« Последнее редактирование: Февраля 16, 2012, 10:14:09 pm от Rus »

burjak

  • Сообщений: 186
  • фуз forever!
    • Просмотр профиля
    • E-mail
Цитировать
барабасов и  крэшей впихни в 64к кристалл
А в чем проблем использовать нормальную флешку на сколько нужно гиг?

Rus

  • Сообщений: 1017
    • ICQ клиент - 305702633
    • Просмотр профиля
    • E-mail
Вопрос скорее всего к Rst7, но если кто-то еще сможет помочь, буду очень признателен.
Имеется такой код, сделанный в Keil uVision для LPC1759, но я не понимаю, почему результаты свертки через  FFT получаются неправильные. Перепроверял 500 раз все. По аналогичному алгоритму делал прогу на C++ в Билдере и все работало,а тут... Раскладывается в спектр и собирается обратно правильно. Каждый блок продлен нулями до длины, превышающей их сумму минус 1, что необходимо для вычисления линейной свертки.
 Причем, если в импульсе (условно) установить только одну какую-то точку, а все остальные нули, то считается правильно. Если больше одной, отличной от нуля, начинается лажа.
Все реализовано на функциях из официальной либы от NXP - DSPLib.

Вот, собственно, код:

#include <system_lpc17xx.c>
#include <LPC17xx.H>
#include "arm_math.h"
#include "math_helper.h"

float32_t testInputA_f32[64] = 

0, 3211, 6392, 9511, 12539, 15446, 18204, 20787,                                      //один
23169, 25329, 27244, 28897, 30272, 31356, 32137, 32609,                          //входной блок
32767, 32609, 32137, 31356, 30272, 28897, 27244, 25329,
23169, 20787, 18204, 15446, 12539, 9511, 6392, 3211,
0, -3211, -6392, -9511, -12539, -15446, -18204, -20787,
-23169, -25329, -27244, -28897, -30272, -31356, -32137, -32609,
-32767, -32609, -32137, -31356, -30272, -28897, -27244, -25329,
-23169, -20787, -18204, -15446, -12539, -9511, -6392, -3211
}; 
                                                                                                                    
float32_t testInputB_f32[64] =   

0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0,               //"импульс"
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};                                                       

#define MAX_BLOCKSIZE      128
float32_t Ak[MAX_BLOCKSIZE];            //входные
float32_t Bk[MAX_BLOCKSIZE];            //буферы;
float32_t AxB[MAX_BLOCKSIZE * 2];      //выходной буфер;
float32_t conv[128];                         //референс

void up(void)
{
 LPC_GPIO1->FIODIR |= 1<<0; 
}

void down(void)
{
 LPC_GPIO1->FIODIR &= 0<<0; 
}
//-------------------------------------------------------------------------------------
int32_t main(void)
{
arm_cfft_radix4_instance_f32 cfft_instance;                  // объявляем аргументы функций
arm_cfft_radix4_instance_f32 cfft_instance_inv;        // прямого и обратного БПФ


arm_cfft_radix4_instance_f32 *cfft_instance_ptr =                      //создаем
(arm_cfft_radix4_instance_f32*) &cfft_instance;                     //указатели
                                                                                            //на аргументы
arm_cfft_radix4_instance_f32 *cfft_instance_inv_ptr =                //функций
(arm_cfft_radix4_instance_f32*) &cfft_instance_inv;                    //прямого и обратного БПФ



/* Заполняем входные буферы нулями*/
      arm_fill_f32(0.0,  Ak, MAX_BLOCKSIZE);
      arm_fill_f32(0.0,  Bk, MAX_BLOCKSIZE);

      /* Копируем данные в половину длины каждого буфера*/
      arm_copy_f32(testInputA_f32,  Ak, MAX_BLOCKSIZE/2);
      arm_copy_f32(testInputB_f32,  Bk, MAX_BLOCKSIZE/2);


arm_conv_f32(Ak, 64, Bk, 64, conv);       // для сравнения делаем свертку отдельной функцией
       
arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 0, 1); //          Инициализируем                                                                                           
                                                                                      //            прямое и обратное
arm_cfft_radix4_init_f32(cfft_instance_inv_ptr, 64, 1, 1); //   БПФ


arm_cfft_radix4_f32(cfft_instance_ptr, Bk);       // Делаем БПФ ядра
 
up();                    
                                                                                             
arm_cfft_radix4_f32(cfft_instance_ptr, Ak);      // Делаем БПФ данных        
                               
arm_cmplx_mult_cmplx_f32(Ak, Bk, AxB, MAX_BLOCKSIZE);  // Комплексно перемножаем результаты
      
      
arm_cfft_radix4_f32(cfft_instance_inv_ptr, AxB);  // Делаем обратное БПФ   
                                           
down();
              
}


[size=11]Any suggestions?[/size]

burjak

  • Сообщений: 186
  • фуз forever!
    • Просмотр профиля
    • E-mail
Библиотечными функциями не пользовался, так что по ним не скажу. Но для начала загоните в проц готовые образы сделанные на том же матлабе, потом на проце проделать комплексное умножение двух этих массивов, вернуть результат и сделать ifft в том же матлабе (или в вашей программе на билдере)
Потом идем дальше, на пример переносим бпф на проц, а ибпф остается на матлабе(проге)
Так будет проще найти ошибку, чем ждать пока кто-то раскопает ваш код и найдет ее там...

вот скрипт для матлаба:
X=fft([x zeros(1,length(y)-1)])
Y=fft([y zeros(1,length(x)-1)])
conv(x,y)=ifft(X.*Y)

Ну и не забывайте про round-off-error.
у Вас же в коде на проце целочисленная float32 арифметика? а в проге на c++ какая?
« Последнее редактирование: Февраля 26, 2012, 09:00:10 pm от burjak »

Rus

  • Сообщений: 1017
    • ICQ клиент - 305702633
    • Просмотр профиля
    • E-mail
@ burjak
Про ошибки округления это я в курсе, но там кардинально не соответствует. Спасибо за идею, попробую загнять fft образы с проги. С матлабом не оч дружу, если честно :-[
Да, и там и там float32. Но на проце он не приемлем по времени, так что в итоге планирую на int32 делать. Благо, там аналогичные функции для разных форматов есть.