Jump to content


Photo
- - - - -

MIDI Dj Controller ZVEZDA


  • Please log in to reply
85 replies to this topic

#1 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 December 2010 - 14:15

Сборка железа подходит к концу!!! Передняя панель немного не доделана.

Attached Files


Edited by Chubaka, 17 January 2011 - 10:15.


#2 60 Works

60 Works

    MIDIbox Newbie

  • Members
  • Pip
  • 4 posts

Posted 19 December 2010 - 20:55

Looks great!

#3 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 20 December 2010 - 05:52

есть вопросик:
Я хочу вместо механического энкодера для джогов сделать оптический.
Какое максимальное разрешение (pulses) за оборот я могу сделать если вешать я его буду на din рейку?

Edited by Chubaka, 20 December 2010 - 06:14.


#4 Janis1279

Janis1279

    MIDIbox Addict

  • Members
  • PipPip
  • 245 posts
  • LocationRiga, Latvia

Posted 21 December 2010 - 22:00

Может поможет поиск, например : "optical encoder " в страницах форума или WIKI
http://picasaweb.goo.../Scratchtroller#

#5 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 11 January 2011 - 12:24

чёт у меня какой то бред с програмьём получается.
исходник ain64_din128_dout128_v2c
пытаюсь прописать энкодеры:
1.вставляю в main.c следующее
void ENC_NotifyChange(unsigned char encoder, char incrementer) __wparam
{
MIOS_MIDI_TxBufferPut(0xb0); // CC at MIDI Channel #1
MIOS_MIDI_TxBufferPut(0x10 + encoder); // CC# is 0x10 (16) for first encoder
MIOS_MIDI_TxBufferPut((0x40 + incrementer) & 0x7f);
// this "40 +/- speed" format is used by NI software and some others
}
2.прописываю в mios_enc_table.inc
MIOS_ENC_ENTRY( 4, 6, MIOS_ENC_MODE_NON_DETENTED)
MIOS_ENC_ENTRY( 8, 6, MIOS_ENC_MODE_NON_DETENTED)
MIOS_ENC_ENTRY( 9, 6, MIOS_ENC_MODE_DETENTED2)

3.в common.mk
дописываю к строке - MIOS_WRAPPER_DEFINES e.g.: -DSTACK_HEAD=0x37f -DSTACK_IRQ_HEAD=0x33f -DDONT_INCLUDE_MIOS_ENC_TABLE

4.make

В результате кодеры работают только они посылают СС16,17,18 а такие у меня уже есть на AIN переменных резисторах.

и ещё где можно найти какую нибудь ain64_din128_dout128_v2c для примера чтоб можно было поглядеть как менять mode(toggle/onoff/ononly) для кнопок и настроить светодиоды допустим для VU - метра.

з.ы. я обсолютный ноль в програмье

#6 Janis1279

Janis1279

    MIDIbox Addict

  • Members
  • PipPip
  • 245 posts
  • LocationRiga, Latvia

Posted 11 January 2011 - 23:47

чёт у меня какой то бред с програмьём получается.
исходник ain64_din128_dout128_v2c
пытаюсь прописать энкодеры:
1.вставляю в main.c следующее
void ENC_NotifyChange(unsigned char encoder, char incrementer) __wparam
{
MIOS_MIDI_TxBufferPut(0xb0); // CC at MIDI Channel #1
MIOS_MIDI_TxBufferPut(0x10 + encoder); // CC# is 0x10 (16) for first encoder
MIOS_MIDI_TxBufferPut((0x40 + incrementer) & 0x7f);
// this "40 +/- speed" format is used by NI software and some others
}
2.прописываю в mios_enc_table.inc
MIOS_ENC_ENTRY( 4, 6, MIOS_ENC_MODE_NON_DETENTED)
MIOS_ENC_ENTRY( 8, 6, MIOS_ENC_MODE_NON_DETENTED)
MIOS_ENC_ENTRY( 9, 6, MIOS_ENC_MODE_DETENTED2)

3.в common.mk
дописываю к строке - MIOS_WRAPPER_DEFINES e.g.: -DSTACK_HEAD=0x37f -DSTACK_IRQ_HEAD=0x33f -DDONT_INCLUDE_MIOS_ENC_TABLE

4.make

В результате кодеры работают только они посылают СС16,17,18 а такие у меня уже есть на AIN переменных резисторах.

и ещё где можно найти какую нибудь ain64_din128_dout128_v2c для примера чтоб можно было поглядеть как менять mode(toggle/onoff/ononly) для кнопок и настроить светодиоды допустим для VU - метра.

з.ы. я обсолютный ноль в програмье

Как я для себя представляю:
1. "CC# is 0x10 (16) " и есть CC16 из таблицы 3 :
http://www.midi.org/...imessages.php#3
4. Режим toggle для кнопок существует и в MB64 и в MB64e, Поверхностно пролистивая фаилы обнаружил упоминания режима toggle в : midibox64e_v2_2d\src\mb64e_buttons.inc\...
;; get fourth byte - which selects the button mode - and branch depending on value
call MB64E_BANK_Read
andlw 0x03
JUMPTABLE_2BYTES_UNSECURE
rgoto MB64E_BUTTON_OnOff
rgoto MB64E_BUTTON_OnOnly
rgoto MB64E_BUTTON_Toggle
rgoto MB64E_BUTTON_OnOff

MB64e поддерживает также и переменные резисторы :
из setup_midibox16e.asm файла :

; Although MIDIbox64E has been designed for rotary encoders, it can also handle with
; up to 64 pots/faders or up to 8 motorfaders.

, и судя по описанию к MB64e, в принципе может управлять большим количеством цифровых входов - до 128.

Cветодиоды для VU - метра настроены в MBSid v2, например.

#7 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 12 January 2011 - 11:27

Спасибо Janis1279
По поводу проблемы с кодерами я понял.
Я так понимаю вы предлагаете мне вместо ain64_din128_dout128_v2c, использовать МВ64Е?
Правильно ли я понял что МВ64Е подойдет под моё железо с: AIN = 24,DOUT = 128, DIN = 76?
и чем всё таки лучше МВ64Е, чем ain64_din128_dout128_v2c(я много искал по форуму но так и не смог найти ответа на этот вопрос)

Edited by Chubaka, 12 January 2011 - 12:09.


#8 Janis1279

Janis1279

    MIDIbox Addict

  • Members
  • PipPip
  • 245 posts
  • LocationRiga, Latvia

Posted 12 January 2011 - 13:28

Что относится к DOUT=128 я не уверен, но со входами всё должно получится. Привожу цитату из описания к MB64e :

In priniciple 128 digital inputs are available, every button allocates one input, every rotary encoder allocates 2 inputs. The rotary encoder(s) control 128 virtual pots of a bank, regardless how many physical encoders are connected. The application is very flexible, a lot of different configurations are supported, so don't hesitate to take a look into the main.asm file in order to get an impression about the possibilities.

Надо пытаться спросить у тех, кто уже собирал свои DJ контроллеры, спросить в англицком форуме, там более менее отвечают на вопросы.




#9 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 12 January 2011 - 15:58

Да по поводу 128 digital inputs я уже читал, но мне очень нужно 128 DOUT выходов.
Что касается англоязычного форума, то я уже пытался задавать вопросы с моим корявым английским и воспринимать тех.информацию с переводчиком. Половину из моих вопросов они не поняли, и учитывая то что я в програмирование нечего не понимаю половину из их ответов не понял я :rolleyes:
так что буду я всётаки работать с ain64_din128_dout128_v2c, тем более что spongebob обещал помочь, но пока куда то он исчез.

p.s. большое спасибо за подсказку с кодерами, попробовал изменить и всё получилось :frantics:

Edited by Chubaka, 12 January 2011 - 16:06.


#10 Janis1279

Janis1279

    MIDIbox Addict

  • Members
  • PipPip
  • 245 posts
  • LocationRiga, Latvia

Posted 12 January 2011 - 21:00

Основное внимание в английском форуме уделено самостоятельному программированию на базе MB64e. А также совет почитать больше о проекте Protodeck.
http://www.midibox.o...ch&id=Protodeck+

#11 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 16 January 2011 - 11:36

никуда я не исчез
я контролирую :)
по поводу OnOff и Toggle: это можно настроить в софте (трактор, если я не ошибаюсь)

VU-метр: какие команды посылает трактор? В MPROC_NotifyReceivedEvnt пишем обработчик.
Делим диапазон 0-127 на промежутки (по количеству светодиодов + 1). Допутим их будет 5. 0-x1-x2-x3-x4-127
Далее просто :
evnt2>x1 ? MIOS_DOUT_PinSet (n1,1) : MIOS_DOUT_PinSet(n1,0);
evnt2>x2 ? MIOS_DOUT_PinSet (n2,1) : MIOS_DOUT_PinSet(n2,0);
evnt2>x3 ? MIOS_DOUT_PinSet (n3,1) : MIOS_DOUT_PinSet(n3,0);
evnt2>x4 ? MIOS_DOUT_PinSet (n4,1) : MIOS_DOUT_PinSet(n4,0);

ну что-то типа того...

#12 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 17 January 2011 - 10:23

Привет spongebob

по поводу OnOff и Toggle: это можно настроить в софте (трактор, если я не ошибаюсь)

Да можно, и всё работает кроме одной кнопочки shift, которая в тракторе включает modifer.Не очень удобно всё время держать эту клавишу для использования вторичных функций.

VU-метр: какие команды посылает трактор?

я поправил таблицу там должно быть понятно, незнаю как объяснить техническим языком)))

// vu-metr for deck a
evnt2>19 ? MIOS_DOUT_PinSet (76,1) : MIOS_DOUT_PinSet(76,0);
evnt2>31 ? MIOS_DOUT_PinSet (77,1) : MIOS_DOUT_PinSet(77,0);
evnt2>43 ? MIOS_DOUT_PinSet (78,1) : MIOS_DOUT_PinSet(78,0);
evnt2>55 ? MIOS_DOUT_PinSet (79,1) : MIOS_DOUT_PinSet(79,0);
evnt2>67 ? MIOS_DOUT_PinSet (80,1) : MIOS_DOUT_PinSet(80,0);
evnt2>79 ? MIOS_DOUT_PinSet (81,1) : MIOS_DOUT_PinSet(81,0);
evnt2>91 ? MIOS_DOUT_PinSet (82,1) : MIOS_DOUT_PinSet(82,0);
evnt2>103 ? MIOS_DOUT_PinSet (83,1) : MIOS_DOUT_PinSet(83,0);
evnt2>115 ? MIOS_DOUT_PinSet (84,1) : MIOS_DOUT_PinSet(84,0);
evnt2>127 ? MIOS_DOUT_PinSet (85,1) : MIOS_DOUT_PinSet(85,0);

по моей таблице так должно быть?))) А где указывать что все эти pin с 76 по 85 это нота E5?

Edited by Chubaka, 17 January 2011 - 11:26.


#13 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 17 January 2011 - 13:54

Ну ты эту конструкцию заключи в условие:

if evnt1 == (номер ноты E5) {
// vu-metr for deck a
}

if evnt1 == (номер ноты F5) {
// vu-metr for deck b
}

if evnt1 == (номер ноты F#5) {
// track progress deck b
}

if evnt1 == (номер ноты G5) {
// track progress deck b
}

и т.д. по всем нотам
по тем нотам, где на одну ноту один светодиод - лучше сделать массив, где номер ноты это индекс массива, а значение - номер пина светодиода

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


P.S. из чего делал лицевую панель? чем наносил надписи? как делал отверстия?

Edited by spongebob, 17 January 2011 - 14:01.


#14 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 17 January 2011 - 14:22

и т.д. по всем нотам
по тем нотам, где на одну ноту один светодиод - лучше сделать массив, где номер ноты это индекс массива, а значение - номер пина светодиода

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

знал бы я ещё как делается массив и переменная-тригер - цены бы мне небыло))))

Лицевую панель делел из черного оргстекла, сначало хотел из алюминия но дороговато вырезка стоит.

Рисовал в кореле (можно любую прогу с координатами, отдавал в рекламную шаражку (печати, штампы и.т.д.)у них, почти у всех щас есть лазеры маломощные. этим же лазером можно и гравировку делать, надписи сделанны именно так, и залиты краской.
Кнопки по тому же принципу, из матового оргстекла, склеены Дихлоретаном, ядовитая штука но клеет намертво.

#15 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 17 January 2011 - 15:03

дихлорэтана через мои руки прошло больше чем пива :) ни одну модель самолёта/автомобиля склеил в босоногом детстве :)
про резку лазером я сразу подумал, но не знал что им же можно сделать гравировку
кстати, откуда ты? и сколько у вас стоит метр прохода лазером?

теперь вернёмся к триггерам и массивам
в начале исходника после #include вставляем
//триггер
unsigned char shiftA_state;
unsigned char shiftB_state;
В DIN_NotifyToggle добавим обработчик
switch switch( evnt1 ) {
номер ноты shiftA:
if !pin_value {shiftA_state ? shiftA_state = 0 : shiftA_state = 1;}
отправляем миди-команду
break;
номер ноты shiftB:
if !pin_value {shiftB_state ? shiftB_state = 0 : shiftB_state = 1;}
отправляем миди-команду
break;
default:
обработка других кнопок
отправляем миди-команду
}

но можно сделать и проще (имхо)

//массив
const unsigned char led_map[76] = {номера пинов через запятую в соответствии с нотами};
но так как у тебя и так они подряд (судя по таблице), то можно обойтись и без массива
В MPROC_NotifyReceivedEvnt добавляем
if evnt1 < (номер ноты Е5) {
if( evnt0 == 0x80 || evnt2 == 0x00 ) {
MIOS_DOUT_PinSet(evnt1, 0); // Note Off
} else {
MIOS_DOUT_PinSet(evnt1, 1); // Note On
}
}


скинь свой исходник в текущем виде, попробую на досуге (читай на работе :)) заняться

#16 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 17 January 2011 - 15:23

по шифту хрень написал не смотри туда :)
исходники шли :)

#17 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 17 January 2011 - 16:49

Вот исходник. это в принципе "ain64_din128_dout128_v2c" но с уже прописанными кодерами, установленным количеством AIN входов и убранными строчками для дисплея из main.c

Из Оренбурга я.., незнаю сколько стоит метр но всё вместе (передняя панель с гравировкой, подложка под переднюю панель, кнопки с гровировкой, подложка под кнопки + ещё одна подложка под кнопки, круги для джогов 6 штук) обошлось мне в 5100р. Можно обойтись без подложек, дешевле, но так как я не нашел нужной толщины оргстекла пришлось склеивать...

Attached Files



#18 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 17 January 2011 - 18:02

а я из города-невест Иваново :)
как у вас в городе с радиодеталями? особенно с smd. у нас всего 2 магазина радиодеталей, в одном смд рядами по 5-10 шт., в другом номиналами, но по 100 шт. :(
я с нуля начал делать программу, но рабочий день закончился :) завтра допишу (надеюсь) и залью сюда
думаю разморозить свой проект (контроллер для ableton, хотя изначально была идея сделать подобие vestax vci-100): матрица кнопки+двухцветные диоды 8на8, 24 потенциометра + 16 кнопок с подсветкой. дизайн проекта похож на akai apc40.

#19 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 18 January 2011 - 04:33

У нас 4 магазина, маленьких и там нечего нету)))
Я всё заказывал на elitan.ru, там цены более менее нормальные.

#20 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 18 January 2011 - 12:35

В локальные переменные добавить:
unsigned char shifta;
unsigned char shiftb;

Обработка лампочек:
void MPROC_NotifyReceivedEvnt(unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
unsigned char i;
if (evnt0==0x80) {evnt2=0;}
if (evnt1<0x57) {
	evnt2>0   ? MIOS_DOUT_PinSet (evnt1,1) : MIOS_DOUT_PinSet(evnt1,0);
}
else {
if (evnt1==0x58) { // VU A
	for(i=0;i<10;i++) {	evnt2>(127/10)*i  ? MIOS_DOUT_PinSet (76+i,1) : MIOS_DOUT_PinSet(76+i,0);	}
	}
if (evnt1==0x59) { // VU B
	for(i=0;i<10;i++) {	evnt2>(127/10)*i  ? MIOS_DOUT_PinSet (86+i,1) : MIOS_DOUT_PinSet(86+i,0);	}
	}
if (evnt1==0x5a) { // Track progress A
	for(i=0;i<16;i++) {	evnt2>(127/16)*i  ? MIOS_DOUT_PinSet (96+i,1) : MIOS_DOUT_PinSet(96+i,0);	}
	}
if (evnt1==0x5b) { // Track progress B
	for(i=0;i<16;i++) {	evnt2>(127/16)*i  ? MIOS_DOUT_PinSet (112+i,1) : MIOS_DOUT_PinSet(112+i,0);	}
	}
}
}

Обработка кнопочек: (кнопки Shift срабатывают по нажатию, а не отпусканию)
void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam
{
if (pin==6 && pin_value==0) {
	if (shifta==1) {shifta=0;} else {shifta=1;}
	pin_value = shifta;
	}
if (pin==46 && pin_value==0) {
	if (shiftb==1) {shiftb=0;} else {shiftb=1;}
	pin_value = shiftb;
	}

	MIOS_MIDI_BeginStream();
	MIOS_MIDI_TxBufferPut(0x90); // Note Event at channel #1
	MIOS_MIDI_TxBufferPut(pin);  // just forward the pin number (0..127)
	MIOS_MIDI_TxBufferPut(pin_value ? 0x00 : 0x7f); //
	MIOS_MIDI_EndStream();
}

Обработка крутилочек:
void ENC_NotifyChange(unsigned char encoder, char incrementer) __wparam
{
	MIOS_MIDI_BeginStream();
	MIOS_MIDI_TxBufferPut(0xb0); // CC at MIDI Channel #1
	MIOS_MIDI_TxBufferPut(0x10 + encoder + 24); // CC# is 0x10 (16) for first encoder
	MIOS_MIDI_TxBufferPut((0x40 + incrementer) & 0x7f);// this "40 +/- speed" format is used by NI software and some others
	MIOS_MIDI_EndStream();
}

void AIN_NotifyChange(unsigned char pin, unsigned int pin_value) __wparam
{
	MIOS_MIDI_BeginStream();
	MIOS_MIDI_TxBufferPut(0xb0); // CC at channel 1
	MIOS_MIDI_TxBufferPut(pin);  // pin number corresponds to CC number
	MIOS_MIDI_TxBufferPut(MIOS_AIN_Pin7bitGet(pin)); // don't send 10bit pin_value, but 7bit value
	MIOS_MIDI_EndStream();
}

У меня какие-то глюки с компиляцией. Ругается на энкодеры, ругается на опции компилятора...
У тебя компилируется нормально? Я просто давно не брал в руки шашек, может делаю что не так :)
Может Janis1279 чего подскажет?




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users