Very Hot Topic (More than 50 Replies) Микроконтроллер - как перспектива примочкостроения (Прочитано 128721 раз)
Rst7
Гуру
*****
Вне Форума


Мимо проходил...

Сообщений: 1619
Местоположение: Харків-city
Зарегистрирован: 22.03.2010
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #320 - 24.11.2011 :: 13:51:22
Post Tools
Цитата:
Нужно записать в его ROM массив данных из wav файла для дальнейших манипуляций с этим массивом. Как это сделать?


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

Способ написания служебной программки, которая из входного бинарного файла изготовит файл в виде исходника (то ли это будет .asm-файл, то ли .c - не важно) можно применять, он универсален, но громоздок.
  

(Вложенный файл удалён)

"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен
Наверх
WWW  
IP записан
 
Rus
Разбирающийся
****
Вне Форума



Сообщений: 1017
Местоположение: Ukraine, Odessa
Зарегистрирован: 22.02.2007
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #321 - 25.11.2011 :: 16:54:55
Post Tools
Уважаемые знатоки цифровых технологий, помогите пожалуйста отладить алгоритм свертки, не могу найти ошибку. Сделал в c++builder приложение, которое открывает две вавки и делает свертку.
Вот картинка: http://imageshack.us/photo/my-images/189/convz.jpg/
Сверху входной сигнал (синус, 1кГц, 1.17 сек), ниже импульс (0.25 сек.) и внизу результат.
Сначала все идет как надо (сравнивал с аудиоредактором) - переходный процессик и начинается установившийся режим.
Но дальше не могу понять, откуда берется скачок амплитуды и вообще непойми что в конце. Помогите разобраться Круглые глаза

Вот текст проги:
Код
Select All
//---------------------------------------------------------------------------
#include <stdio.h>
#include <vcl.h>
#pragma hdrstop

#include "sound.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


short format_tag, channels, block_align, bits_per_sample,*sound_buffer;
BYTE id[4];
DWORD size, format_length, sample_rate, avg_bytes_sec, data_size ;
FILE *fp;

short iformat_tag, ichannels, iblock_align, ibits_per_sample,*isound_buffer;
BYTE iid[4];
DWORD isize, iformat_length, isample_rate, iavg_bytes_sec, idata_size ;
FILE *ifp;
unsigned int i,j,k;

float *rsound_buffer;


TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Label17->Visible=0;
Label18->Visible=0;
Label19->Visible=0;
Label20->Visible=0;
Label21->Visible=0;
Label22->Visible=0;
Label23->Visible=0;
Button2->Enabled=0;

Label7->Visible=0;
Label24->Visible=0;
Label25->Visible=0;
Label26->Visible=0;
Label27->Visible=0;
Label28->Visible=0;
Label29->Visible=0;
Button4->Enabled=0;
}
//----------Читаем описание формата входного файла---------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
fp = fopen("C:/16_44test.wav","rb");
if(fp)
{
fread(id,sizeof(BYTE),4,fp);
if((id[0]=82)|(id[1]=73)|(id[2]=70)|(id[3]=70))  //Check if RIFF
{
fread(&size,sizeof(DWORD),1,fp);
}
else ShowMessage("Not RIFF");
fread(id,sizeof(BYTE),4,fp);
if ((id[0]=87)|(id[1]=65)|(id[2]=86)|(id[3]=69)) //Check if WAVE
{
fread(id,sizeof(BYTE),4,fp); //Read "fmt"
fread(&format_length,sizeof(DWORD),1,fp);
fread(&format_tag,sizeof(short),1,fp);
Label18->Caption=IntToStr(format_tag);
fread(&channels,sizeof(short),1,fp);
Label19->Caption=IntToStr(channels);
fread(&sample_rate,sizeof(DWORD),1,fp);
Label20->Caption=IntToStr(sample_rate);
fread(&avg_bytes_sec,sizeof(DWORD),1,fp);
Label21->Caption=IntToStr(avg_bytes_sec);
fread(&block_align,sizeof(short),1,fp);
Label22->Caption=IntToStr(block_align);
fread(&bits_per_sample,sizeof(short),1,fp);
Label23->Caption=bits_per_sample;
fread(id,sizeof(BYTE),4,fp);   //Read DATA subchunk
fread(&data_size,sizeof(DWORD),1,fp); //Read DADA size
Label17->Caption=IntToStr(data_size);
Label17->Visible=1;
Label18->Visible=1;
Label19->Visible=1;
Label20->Visible=1;
Label21->Visible=1;
Label22->Visible=1;
Label23->Visible=1;
Button2->Enabled=1;
}
else
ShowMessage("It is NOT a Wave file!!");
}
else ShowMessage("Shit!!!\nCan't open =(");
}
//-----------Читаем блок данных входного файла, выводим на график-----------
void __fastcall TForm1::Button2Click(TObject *Sender)
{                                 //создаем входной массив
sound_buffer=(short*)calloc((data_size+idata_size)/2,sizeof(short));
for(i=0;i<=data_size/2;i++)       //заполняем его
{
fread(sound_buffer+i,sizeof(short),1,fp);
Chart1->Series[0]->AddXY(i,sound_buffer[i],clRed);
}
}
//--------Читаем описание формата файла импульса-----------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
ifp = fopen("C:/impulse.wav","rb");
if(ifp)
{
fread(iid,sizeof(BYTE),4,ifp);
if((iid[0]=82)|(iid[1]=73)|(iid[2]=70)|(iid[3]=70))  //Check if RIFF
{
fread(&size,sizeof(DWORD),1,ifp);
}
else ShowMessage("Not RIFF");

fread(iid,sizeof(BYTE),4,ifp);
if ((iid[0]=87)|(iid[1]=65)|(iid[2]=86)|(iid[3]=69)) //Check if WAVE
{
fread(iid,sizeof(BYTE),4,ifp); //Read "fmt"
fread(&iformat_length,sizeof(DWORD),1,ifp);
fread(&iformat_tag,sizeof(short),1,ifp);
Label24->Caption=IntToStr(iformat_tag);
fread(&ichannels,sizeof(short),1,ifp);
Label25->Caption=IntToStr(ichannels);
fread(&isample_rate,sizeof(DWORD),1,ifp);
Label26->Caption=IntToStr(isample_rate);
fread(&iavg_bytes_sec,sizeof(DWORD),1,ifp);
Label27->Caption=IntToStr(iavg_bytes_sec);
fread(&iblock_align,sizeof(short),1,ifp);
Label28->Caption=IntToStr(iblock_align);
fread(&ibits_per_sample,sizeof(short),1,ifp);
Label29->Caption=ibits_per_sample;
fread(iid,sizeof(BYTE),4,ifp);   //Read DATA subchunk
fread(&idata_size,sizeof(DWORD),1,ifp); //Read DADA size
Label7->Caption=IntToStr(idata_size);

Label7->Visible=1;
Label24->Visible=1;
Label25->Visible=1;
Label26->Visible=1;
Label27->Visible=1;
Label28->Visible=1;
Label29->Visible=1;
Button4->Enabled=1;
}
else
ShowMessage("It is NOT a Wave file!!");
}
else ShowMessage("Shit!!!\nCan't open =(");
}
//---------Читаем блок данных файла импульса, выводим на график--------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{                                     //создаем массив импульса
isound_buffer=(short*)calloc(idata_size/2,sizeof(short));
for(i=0;i<=idata_size/2;i++)
{
fread(isound_buffer+i,sizeof(short),1,ifp);
Chart2->Series[0]->AddXY(i,isound_buffer[i],clRed);
}
}
//------------Собственно свертка---------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{                                         //создаем выходной массив
rsound_buffer=(float*)calloc((idata_size+data_size)/2,sizeof(float));

k=idata_size/2;
for(j=0;j<=(idata_size+data_size)/2;j++) //семплы результата
{
for(i=0;i<=idata_size/2-k;i++)
rsound_buffer[j]+=isound_buffer[i]*sound_buffer[j-i];
if(k>0)k--;
Chart3->Series[0]->AddXY(j,rsound_buffer[j],clRed);
}
}
//---------------------------------------------------------------------------
 


ЗЫ Горизонтальные оси чартов не настраивал, это не особо важно - главное, форму сигнала видно.
  

(Вложенный файл удалён)
Наверх
IP записан
 
Rst7
Гуру
*****
Вне Форума


Мимо проходил...

Сообщений: 1619
Местоположение: Харків-city
Зарегистрирован: 22.03.2010
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #322 - 25.11.2011 :: 20:16:26
Post Tools
Цитата:
Вот текст проги:


Ну и как это читать? Неужели тяжело отформатировать исходный текст как положено?
  

(Вложенный файл удалён)

"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен
Наверх
WWW  
IP записан
 
Rus
Разбирающийся
****
Вне Форума



Сообщений: 1017
Местоположение: Ukraine, Odessa
Зарегистрирован: 22.02.2007
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #323 - 25.11.2011 :: 20:39:09
Post Tools
@ Rst7
Ну это рабочий вариант... Не совсем понял, как форматировать?
Со скачком амплитуды посредине разобрался - в последнем цикле по i заменил "<=" на просто "<". Теперь получается вот так: http://imageshack.us/photo/my-images/35/convx.jpg/
Осталось разобраться, почему появляется импульс в конце данных. Чую, где-то в циклах свертки собака зарылась...

Короче, заработала моя приблуда, ура! Сравнивал на слух с популярным Sony Acoustic Mirror, разницы не заметил. Следующим шагом будет обработка в реал-тайме с линейного входа, а потом в ARM ее Круглые глаза Только б не забросить это дело, пока дойду до этого)
« Последняя редакция: 25.11.2011 :: 22:36:31 от Rus »  

(Вложенный файл удалён)
Наверх
IP записан
 
VAT
Разбирающийся
****
Вне Форума



Сообщений: 1453
Местоположение: Moscow
Зарегистрирован: 27.09.2005
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #324 - 28.11.2011 :: 16:44:00
Post Tools
Народ, 10 лет назад я будучи разработчиком-железячником по случаю написал несколько программ на ассемблере для AVR 2313. Причем одной из прог напроч заняв  все ресурсы всех памятей. т.е. насобачился неплохо.
Вопрос такой.
десять лет паузы - все основательно забыто. Сейчас возможно потребуется несложные по сравнению с теми программами программульки написать.. Стоит "С" изучать или дуть по накатанному?   
« Последняя редакция: 28.11.2011 :: 16:45:28 от VAT »  

(Вложенный файл удалён)
Наверх
 
IP записан
 
Ivana
Участник


Re: Микроконтроллер - как перспектива примочкостроения
Ответ #325 - 28.11.2011 :: 17:27:46
Post Tools
Имхо молодого бойца - и дуть по накатанному и изучить С. Общее понимание ассемблера плюс архитектуры МК не будет лишним при использовании С, а иногда и до asm может потребоваться опускаться.
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
VAT
Разбирающийся
****
Вне Форума



Сообщений: 1453
Местоположение: Moscow
Зарегистрирован: 27.09.2005
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #326 - 28.11.2011 :: 18:03:56
Post Tools
ну а что дает собственно С при простых задачах? задача типа регистрировать события на портах и потом индицировать что там происходило. возможно с сохранением данных в епром на случай отключения питания.
 
« Последняя редакция: 28.11.2011 :: 18:07:02 от VAT »  

(Вложенный файл удалён)
Наверх
 
IP записан
 
Ivana
Участник


Re: Микроконтроллер - как перспектива примочкостроения
Ответ #327 - 28.11.2011 :: 18:14:14
Post Tools
Имхо - возможность мыслить в более человечески-ориентированных абстракциях: математика, типы, условные операторы и т.п. Вдобавок, компилятор берет на себя много рутинной работы - распределение ОЗУ, сохранение промежуточных переменных при путешествии по уровням контекста и вплоть до распределения переменных в 1-2-4 ячеек ОЗУ или регистров - в зависимости от разрядности МК. То есть, можно писать код забыв о структуре ядра - компилятор сделает все что надо, или портирует код с одного ядра на другое. Хотя по-хорошему о структуре ядра забывать не надо Улыбка Короче - С дает возможность программисту жить и думать в удобном мире стройных человеческих абстракций. Есть конечно плата за это - с компилятором надо уметь дружить, аккурано использовать различные опции оптимизации и знать соглашения о передаче параметров или использовании регистров и т.п. - для возможности создания симбиозов С-asm.
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
VAT
Разбирающийся
****
Вне Форума



Сообщений: 1453
Местоположение: Moscow
Зарегистрирован: 27.09.2005
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #328 - 29.11.2011 :: 16:04:36
Post Tools
Ivana, спасибо.
мне казалось, что программы для микроконтроллеров уж очень завязаны на архитектуру, на порты, в отличие от каких нибудь вордов и екселов, которые вряд ли кто рискнет писать на ассемблере)) Подпрограммы типа преобразований аски туда-сюда или 16-разрядной математики существуют..
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
_Gunpowder_
Младший паяльщик
**
Вне Форума



Сообщений: 109
Местоположение: Киев, Украина
Зарегистрирован: 08.08.2011
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #329 - 29.11.2011 :: 16:24:01
Post Tools
Rus, из картинки следует, что проблема явно в границах циклов. Вроде как файлы свернуты только один раз.

По коду я так и не понял какие используются диапазоны данных для свертки. Почему размеры данных и импульса постоянно делятся на 2  Озадачен

А вот здесь ты себя перехитрил. Тут заключена ошибка, приводящая к однократному выполнению свертки:

k=idata_size/2;
...
for(i=0;i<=idata_size/2-k;i++) {
..
if(k>0)k--;
}
« Последняя редакция: 29.11.2011 :: 16:33:43 от _Gunpowder_ »  

(Вложенный файл удалён)

Framus, Musicman -> CAE Wah -> diy-FuzzFace, diy-Scrambler -> diy-Mark, diy-Jubelee, diy-Orange, diy-Krank, diy-Uberschall -> Moogerfooger -> Carbon Copy -> diy-MOD'S 20W PP -> Senn e906, Audix i5
Наверх
 
IP записан
 
Rst7
Гуру
*****
Вне Форума


Мимо проходил...

Сообщений: 1619
Местоположение: Харків-city
Зарегистрирован: 22.03.2010
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #330 - 29.11.2011 :: 16:36:52
Post Tools
Цитата:
П.С. Кстати, очень показательно для гтлаба: 10 ответов - 0 пользы, одно умничанье и позы Дартаньянов.


Не надо подменять понятия. Как бы вот:

Цитата:
Короче, заработала моя приблуда, ура!
Последняя редакция: 26.11.2011 :: 00:36:31 от Rus


Но, положа руку на сердце, задавать вопрос в такой форме суть неуважение. Ибо:
а) Надо вычленить только нужный кусок - нафига нам тут разбираться в загрузке файлов и рисовании картинок, если свертка не пашет.
б) Отформатировать. Общепринятые правила форматирования исходных текстов вполне расскажет гугль.
  

(Вложенный файл удалён)

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


Re: Микроконтроллер - как перспектива примочкостроения
Ответ #331 - 29.11.2011 :: 17:41:58
Post Tools
VAT писал(а) 29.11.2011 :: 16:04:36:
мне казалось, что программы для микроконтроллеров уж очень завязаны на архитектуру, на порты

На периферию (порты, устройства и т.п.) - очень даже завязаны. Я говорил про архитектуру ядра. Один и тот же код на С компиляторы успешно засунут и в 8-миразрядный AVR без аппаратного умножения (если он туда влезет) и в 32-х разрядный мощный процессор - и тебе не надо будет думать что интеджер в 8 бит не влезет и надо использовать 2-х или 4-х байтовую математику с переносом. Или думать как засунуть блок сложных условных переходов в breq/brne/sbis/ или что ещё. Один и тот же код на С превратится в совершенно разные коды на asm в результате компиляции - в зависимости от возможностей МК и параметров оптимизации в установках компилятора. В этом смысле С в известной мере абстрагирует логику разработчика от особенностей платформы. Ну а работу с периферией придется шлифовать, ибо обращение к ней различается порой весьма сильно.

ЗЫ Михаил KMG выкладывал ссылку на свои коды для AVR - футвсвич с индикацией. Написано на С. Можно самому написать на asm? Можно. Но на С проще, если конечно ты не гений ассемблера с нулевыми знаниями в С. Влез этот код на нужный МК? Влез. Портируется на другие МК? Портируется, с учетом шлифовки обращения с периферией.

ЗЗЫ я вот сейчас как раз на asm начну детально думать как писать драйвер шагового движка - и думать над умножением лонгов и с плавающей запятой, делением, трехэтажными условиями и прочими прелестями - и все это на 8-битном AVR! Как говорит командир - хорошая практика набить руку на asm  Круглые глаза
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
VAT
Разбирающийся
****
Вне Форума



Сообщений: 1453
Местоположение: Moscow
Зарегистрирован: 27.09.2005
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #332 - 01.12.2011 :: 16:33:44
Post Tools
Спасибо,
на что обратить внимание стоит, что изменилось за 10 лет в этом направлении? AVR не устарел морально? какой сейчас наиболее популярный микроконтроллер о 16-20ног?  AVRstudio сильно улучшилась?
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
Rst7
Гуру
*****
Вне Форума


Мимо проходил...

Сообщений: 1619
Местоположение: Харків-city
Зарегистрирован: 22.03.2010
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #333 - 01.12.2011 :: 16:43:09
Post Tools
Цитата:
на что обратить внимание стоит, что изменилось за 10 лет в этом направлении?


На то, что рулят 32хбитные архитектуры. Цена ниже при намного большей производительности.
  

(Вложенный файл удалён)

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


Re: Микроконтроллер - как перспектива примочкостроения
Ответ #334 - 01.12.2011 :: 17:31:04
Post Tools
Цитата:
AVR не устарел морально?

Имхо для своих задач вполне подходит. Тот же вышеупомянутый футсвич на Cortex M3 делать имхо как-то... из пушки по воробьям, что ли Улыбка
Цитата:
AVRstudio сильно улучшилась?

Вышла новая, кажется 5-я версия. Где, по слухам, нет этих идиотских ошибок из-за кириллицы в именах каталогов и даже имени учетной записи пользователя (!), есть возможность ставить комментарии на выделенный кусок строк, процедуры и функции на С сворачиваются по "+" в одну строку и еще много того. что надо было сделать ещё в версии 1. Но я продолжаю работать на 4-й потому что 5-я ещё далеко не все модели МК поддерживает.
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
research
Участник


Re: Микроконтроллер - как перспектива примочкостроения
Ответ #335 - 02.12.2011 :: 09:58:21
Post Tools
Как я понимаю, начинать работу с кортексом как раз не грех с футсвича. На пониженной тактовой с низким энергопотреблением. Иначе так все и обомрет как ВАЗ 2105.

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

(Вложенный файл удалён)
Наверх
 
IP записан
 
Rst7
Гуру
*****
Вне Форума


Мимо проходил...

Сообщений: 1619
Местоположение: Харків-city
Зарегистрирован: 22.03.2010
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #336 - 02.12.2011 :: 14:21:28
Post Tools
Цитата:
Имхо для своих задач вполне подходит. Тот же вышеупомянутый футсвич на Cortex M3 делать имхо как-то... из пушки по воробьям, что ли


Только в корпусах 8 ног - совсем крайний случай. Все. Точка. Если надо больше ног - уже 32 бита.
  

(Вложенный файл удалён)

"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредствен
Наверх
WWW  
IP записан
 
Rst7
Гуру
*****
Вне Форума


Мимо проходил...

Сообщений: 1619
Местоположение: Харків-city
Зарегистрирован: 22.03.2010
Re: Микроконтроллер - как перспектива примочкостроения
Ответ #337 - 02.12.2011 :: 14:26:56
Post Tools
Кстати, вместо пропагандируемых (не только тут) ардуин вот хорошие стартеркиты

Большой кортекс:
http://www.embeddedartists.com/products/lpcxpresso/lpc1769_xpr.php
За 20 евро имеете плату с LPC1769 (и заодно Ethernet PHY на этой же плате уже стоит, снаружи надо только разъем с трансом подключить) + JTAG-Отладчик (который можно отпилить и потом использовать отдельно)

Маленький кортекс:
http://www.embeddedartists.com/products/lpcxpresso/lpc1114_xpr.php

То же, только под мелочь LPC1114 - как раз проц вместо восьмибитников.
  

(Вложенный файл удалён)

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


Re: Микроконтроллер - как перспектива примочкостроения
Ответ #338 - 02.12.2011 :: 14:54:24
Post Tools
Если уж на таком камне футсвичи писать, тогда туда же можно засунуть тюнер как минимум, драм-машинку, а потом и эмулятор Зума-505 го или ещё какого проца Круглые глаза

Кстати, метроном делается на раз-два вместе с индикацией текущей частоты. Тюнер тоже - безо всяких АЦП даже (хотя можно и с ними) - превращаем сигнал в меандр триггером и снимаем частоту по 0/1 на входной ноге, остается грамотно вывести показание на индикатор. И даже это всё, вместе с футсвичем, имхо можно засунуть в 8-миногую 8-мибитную Tiny-13 какую-нибудь (если хватит ног, ОЗУ и памяти программы Улыбка ) Круглые глаза
« Последняя редакция: 02.12.2011 :: 15:13:09 от »  

(Вложенный файл удалён)
Наверх
 
IP записан
 
research
Участник


Re: Микроконтроллер - как перспектива примочкостроения
Ответ #339 - 02.12.2011 :: 15:50:15
Post Tools
На словах это все легко как два пальца, а на деле нет ни тюнеров, ни драм машин, ни толкового бит крашера.
  

(Вложенный файл удалён)
Наверх
 
IP записан
 
 
  « Главная ‹ Раздел Наверх этой страницы