Jump to content


Photo
- - - - -

MIDI Dj Controller ZVEZDA


  • Please log in to reply
85 replies to this topic

#21 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 18 January 2011 - 12:39

Отбой, всё компилируется намана... забыл ; поставить :)
#include <cmios.h>
#include <pic18fregs.h>
#include "main.h"
unsigned char shifta;
unsigned char shiftb;

MIOS_ENC_TABLE {
	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),
	MIOS_ENC_EOT
};

void Init(void) __wparam
{
  // set shift register update frequency
  MIOS_SRIO_UpdateFrqSet(1); // ms

  // we need to set at least one IO shift register pair
  MIOS_SRIO_NumberSet(NUMBER_OF_SRIO);

  // debouncing value for DINs
  MIOS_SRIO_DebounceSet(DIN_DEBOUNCE_VALUE);

  MIOS_SRIO_TS_SensitivitySet(DIN_TS_SENSITIVITY);

  // initialize the AIN driver
  MIOS_AIN_NumberSet(AIN_NUMBER_INPUTS);
#if AIN_MUXED_MODE
  MIOS_AIN_Muxed();
#else
  MIOS_AIN_UnMuxed();
#endif
  MIOS_AIN_DeadbandSet(AIN_DEADBAND);

  MIOS_ENC_SpeedSet(0, MIOS_ENC_SPEED_FAST, 2);
  MIOS_ENC_SpeedSet(1, MIOS_ENC_SPEED_FAST, 2);
  MIOS_ENC_SpeedSet(2, MIOS_ENC_SPEED_FAST, 2);

  shifta=0;
  shiftb=0;
}

Это начало, в предыдущем посте продолжение :)
Должно работать. 7 килобайт получился hex, должен влезть в пик.
Есть мелкие различия с твоей таблицей, но это поправишь уже в тракторе, когда будешь мапить кнопки-лампочки.
Удачи в дальнейшей сборке! Если что - обращайся ещё.

Edited by spongebob, 18 January 2011 - 12:42.


#22 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 18 January 2011 - 18:10

1.Лампочки, VU-метры и трек прогресс работают :drool:
Правда ты немного с номерами нот ошибся, но я поправил.

2.С кнопками происходит такая фигня:
нажимаеш шифт, посылается 7f, отпускаеш - 00; нажимаем второй раз - 00, отпускаем - 00, нажимем третий раз - 7f, отпускаем - 00, и так по кругу.
есть мысля, чисто логически, что pin6 и pin46 надо убрать из общего правила.
щас методом "научного тыка")) буду пытаться это исправить.

3.Энкодеры и крутилочки я сделал ещё раньше (ну кроме 10bit на темпо) там строчка одна у тебя неправильно:
.
MIOS_MIDI_TxBufferPut(0x18 + encoder); // CC# is 0x18 (24) for first encoder
.
:frantics:

прочитал первое сообщение и не посмотрел что есть вторая страница :rolleyes:

а я 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),
MIOS_ENC_EOT
в mios_enc_table.inc прям прописал и в в common.mk
допис к строке - MIOS_WRAPPER_DEFINES e.g.: -DSTACK_HEAD=0x37f -DSTACK_IRQ_HEAD=0x33f -DDONT_INCLUDE_MIOS_ENC_TABLE и вроде всё работает нормально.
или нельзя так :sad:

Edited by Chubaka, 18 January 2011 - 18:26.


#23 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 18 January 2011 - 18:19

10 bit на команду CC не получится, они тока 7 бит поддерживают (вроде бы)
с шифтом нарна намудрил чота :)
нужно проверять... но не сейчас :) сейчас пивной вечерок :)

#24 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 19 January 2011 - 08:11

Добавь в DIN_NotifyToggle в начале где-нибудь:
if ((pin==46 || pin==6) && pin_value==1) {
	return;
	}


#25 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 January 2011 - 11:31

С Праздником!!!

if ((pin==46 || pin==6) && pin_value==1) {
return;
}

спасибо, вечером после работы попробую

7 килобайт получился hex, должен влезть в пик


я так понимаю, что уже не получится сделать функции типа кнопки onoff\ononly\toggle, светодиод на середине регулятора tempo?
я ещё подумывал blink сделать кое с чем?

Edited by Chubaka, 19 January 2011 - 11:50.


#26 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 19 January 2011 - 12:43

я плохо понимаю что значит onoff ononly toggle :)
светодиод можно сделать, почему нет-то?
а вот с блинком как поступить я не знаю... нужно форум шерстить, кто-то делал

#27 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 19 January 2011 - 13:00

Индикация 0%. В AIN_NotifyChange добавляем:
if (pin==4) { (pin_value==64) ? MIOS_DOUT_PinSet (30,1) : MIOS_DOUT_PinSet(30,0); }
	if (pin==5) { (pin_value==64) ? MIOS_DOUT_PinSet (62,1) : MIOS_DOUT_PinSet(62,0); }

OnOff я полагаю: нажал-отпустил - включилось, нажал-отпустил - выключилось
Toggle: нажал - включилось, отпустил - выключилось
Это в тракторе настраивается, если я не ошибаюсь. Вот только зачем нужны были пляски с бубном вокруг Shift? :)

А OnOnly это что? :)

Edited by spongebob, 19 January 2011 - 13:01.


#28 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 19 January 2011 - 14:02

В локальные переменные:
unsigned char timer_tick;
unsigned char blink_led;

В Init:
timer_tick=0;
  blink_led=0;
  MIOS_TIMER_Init(0x03, 62500);

Добавить функцию тика по таймеру. Здесь для примера моргают 31 и 63 светодиоды.
void Tick(void) __wparam
{
  if (timer_tick=>10) {
	timer_tick=0;
	}
  if (timer_tick==0) {
	// сделать что-то раз в 500mS
	(blink_led==1) ? (blink_led=0) : (blink_led=1);
	MIOS_DOUT_PinSet(31,(blink_led && MIOS_DOUT_PinGet(31)));
	MIOS_DOUT_PinSet(63,(blink_led && MIOS_DOUT_PinGet(63)));
	}
  timer_tick++;
  
}
Уменьшая границу timer_tick, а так же играясь с параметрами MIOS_TIMER_Init добейся нужной паузы. Значение второго параметра MIOS_TIMER_Init не больше 65535.

#29 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 January 2011 - 14:52

OnOnly - нажал 7f, отпустил - нет команды, нажал 7f и.т.д
Я просто ещё и с VirtualDJ хочу его пробовать, что-то в тракторе хорошего что-то в виртуале, ещё не определился.

попробовал

if ((pin==46 || pin==6) && pin_value==1) {
return;
}

все работает :frantics: . spongebob ты шаман однако :hairy:

щас остальное пробовать буду :shifty:

Edited by Chubaka, 19 January 2011 - 14:53.


#30 Janis1279

Janis1279

    MIDIbox Addict

  • Members
  • PipPip
  • 245 posts
  • LocationRiga, Latvia

Posted 19 January 2011 - 14:52

Toggle: нажал - включилось, отпустил - выключилось
А OnOnly это что? :)

Как я представляю, речь идёт об этих режимах кнопок ( MB64 , MB 64e ) :
A special feature is implemented for the buttons: the behaviour of every button can be specified with the Snapshot Button before a event will be assigned to it:

Posted ImageSend learned value when button pressed, send zero when button released.

Posted ImageSend learned value only when button pressed, don't send a zero value when button released.

Posted ImageSend learned value with the first keypress, send zero value with the second keypress.

Edited by Janis1279, 19 January 2011 - 14:52.


#31 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 January 2011 - 14:58

Вот вот именно так.

#32 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 19 January 2011 - 15:19

Ага, понял
придумаем, не волнуйся :)
void Tick это не та функция :)
нада было void Timer

#33 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 19 January 2011 - 15:45

const unsigned char btn_mode[78]={
0,0,1,1,1,1,1,2,2,1,
2,2,1,2,1,0,0,1,1,0,
1,0,0,0,0,0,0,0,1,0,
4,4,1,0,1,1,0,0,2,2,
1,2,2,1,1,2,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,
1,0,4,4,2,1,1,1,1,1,
4,4,1,1,1,1,1,2};

unsigned char btn_state[78]={
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};

void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam
{
switch(btn_mode[pin]){
case 0: // OnOff
	break;
case 1: // Toggle
	if (pin_value==0) {
		(btn_state[pin]==1) ? (btn_state[pin]=0) : (btn_state[pin]=1);
		if (btn_state[pin]==0) {return;}
	} else {return;}
	break;
case 2: // OnOnly
	if (pin_value==1) {return;}
	break;
}

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();
}

Edited by spongebob, 19 January 2011 - 15:50.


#34 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 January 2011 - 16:14

В AIN_NotifyChange
поставил вот так (подглядел в Traktorizer, main.c)
if (pin==4) if (pin_value >=62 && pin_value <=66) { MIOS_DOUT_PinSet (30,1) ; }else{ MIOS_DOUT_PinSet(30,0); }
если ставить pin_value==64 то её вообще трудно поймать , промаргивает просто.
всё бы нечего тока вот я не пойму чето: светодиод этот срабатывает в самом начале движения, по монитору в mios studio это получается значение равно 7 или 8 (b0 04 07 и bo 04 08). при чём и в твоём варианте срабатывал при тех же значениях.

const unsigned char btn_mode[78]={
0,0,1,1,1,1,1,2,2,1,
2,2,1,2,1,0,0,1,1,0,
1,0,0,0,0,0,0,0,1,0,
4,4,1,0,1,1,0,0,2,2,
1,2,2,1,1,2,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,
1,0,4,4,2,1,1,1,1,1,
4,4,1,1,1,1,1,2};

unsigned char btn_state[78]={
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};

\

а это что, и куда сувать :blink:

#35 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 19 January 2011 - 16:21

массивы пихай в начало, где переменные

первый массив - это тип кнопки
второй - состояние (только для toggle)

про светодио не понял немного...

if ((pin==4) && (pin_value >=62 && pin_value <=66)) { MIOS_DOUT_PinSet (30,1);}
else {MIOS_DOUT_PinSet(30,0);}

Edited by spongebob, 19 January 2011 - 16:24.


#36 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 January 2011 - 16:26

понял куда))))
режим toggle и on only работают
режим onoff щас получается так: нажал - 7f, отпустил-нечего, нажал второй раз- ничего, отпустил - ничего, нажал 3 раз -7f
00 по второму нажатию не выдаёт

const unsigned char btn_mode[78]={
0,0,1,1,1,1,1,2,2,1,
2,2,1,2,1,0,0,1,1,0,
1,0,0,0,0,0,0,0,1,0,
4,4,1,0,1,1,0,0,2,2,
1,2,2,1,1,2,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,
1,0,4,4,2,1,1,1,1,1,
4,4,1,1,1,1,1,2};



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

#37 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 January 2011 - 16:30

про светодио не понял немного...

if ((pin==4) && (pin_value >=62 && pin_value <=66)) { MIOS_DOUT_PinSet (30,1);}
else {MIOS_DOUT_PinSet(30,0);}

ну по строчке он должен зажигаться в значении переменного резистора 63,64,65 тобиш по середине, а он зажигается в значении 07,08 тобиш почти в начале , причем в твоём варианте он также зажигался при значении 07,08 :huh: вот как то так

з.ы. с массивом разобрался, каждое значение соответствует номеру кнопки по порядку :rolleyes:

Edited by Chubaka, 19 January 2011 - 16:39.


#38 spongebob

spongebob

    MIDIbox Newbie

  • Members
  • Pip
  • 75 posts
  • LocationIvanovo, Russia

Posted 19 January 2011 - 17:31

попробуй убрать case 0: break; из switch()
и посмотри что будет

#39 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 January 2011 - 17:43

тоже самое, ничего не изменилось.

#40 Chubaka

Chubaka

    MIDIbox Newbie

  • Members
  • Pip
  • 47 posts
  • LocationRussia

Posted 19 January 2011 - 17:45

ой не там пробовал подожди ещё




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users