Jump to content

MIDIbox NG Release + Feedback


TK.
 Share

Recommended Posts

I'm really not much into SysEx, but just a short question:
Is it possible to send SysEx from a computersoftware (like MAX or plogue bidule) to the core, which changes the LCD message? If yes: Is there a kind of "sysex-creator" for text?

I'm asking because Mainstage is not able to send tracknames (in difference to logic). I want to use Plogue Bidule instead to do this after every patch change. Will be a lot easier, than programming patches on the MB_NG.

Link to comment
Share on other sites

  • Replies 353
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Is it possible to send SysEx from a computersoftware (like MAX or plogue bidule) to the core, which changes the LCD message?

 

Yes, and various usage models are supported. They are listed here: http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Fcontrollers%2Fmidibox_ng_v1%2Fcfg%2Ftests%2Fsyxtxt.ngc

 

 

 

If yes: Is there a kind of "sysex-creator" for text?

 

-> http://www.asciitohex.com

 

Best Regards, Thorsten.

Link to comment
Share on other sites

  • 2 months later...

Hi

I made my self a breadboard test of a Button and LED Matrix. Im not able to make it work as i wish. So i ask for a sample config of a 8x8 button_matrix with a 8x8 LED_Matrix wich for testing wold lit the LED 1 by pressing Button 1 and turn it of by depressing the same button.

button_matrix  sr_din1=1    sr_dout1=1

LED_matrix     sr_dout1=2  sr_dout2=3

 

best regards

novski

Link to comment
Share on other sites

This is the most simple example: http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Fapps%2Fcontrollers%2Fmidibox_ng_v1%2Fcfg%2Ftests%2Fblm8x8.ngc

 

For your HW connections, you've to change the DIN/DOUT matrix configuration to:

DIN_MATRIX  n= 1   rows=8  inverted_sel=0  sr_dout_sel1=1  sr_din1=1
DOUT_MATRIX n= 1   rows=8  inverted_sel=0  sr_dout_sel1=2  sr_dout_r1=3 

 

Best Regards, Thorsten.

Link to comment
Share on other sites

Thanks. Now it works. I had a LED the wrong way and used the DINx4 with 220R also in the Selector lines - sr_dout_sel1=1 (...)

 

 

The Link mentions just 3 SRs. Thats why i tried to build a better version than i had working.

# HW definitions:
DIN_MATRIX  n= 1   rows=8  inverted_sel=0  sr_dout_sel1=1  sr_din1=1
DOUT_MATRIX n= 1   rows=8  inverted_sel=0  sr_dout_sel1=1  sr_dout_r1=2
# note: actually the sr_dout_sel1 in DOUT_MATRIX could be removed,
# since DIN_MATRIX already outputs the selection pulses there
# this is just for the case that somebody copy&pastes the definition...

I layouted it like on this schematic:

 

It seams to work but:

The LED seams to be not as bright as it can be. 

 

Am i doing that right?

 

Best Regards

novski

post-10711-0-75206000-1379419356_thumb.p

Edited by novski
Link to comment
Share on other sites

  • 2 weeks later...

I have a short question.

 

Is it possible to dec/inc the value of a map-range with two buttons (one inc, one dec)?

 

Example:

Lets say the map is "MAP1 1 2 3 4 5 6 7 8 9 10" an we are on value 5.

When I press the "dec-button" it should jump to 4,3,2...

When I press the "inc-button" it should jump to 6,7,8...

 

I know this works with an encoder or a single button. But an encoder is no option and the single button only "cycles" the value in on direction...

 

Maybe someone can help me?

Link to comment
Share on other sites

Hi Thorsten, thank you for your help.

 

A 'virtual' encoder sounds great, but I want to clarify what I want to do:

 

I want to select Banks of independent hw_ids with 2 seperate Inc/Dec Buttons for the hw_ids 1-4 and 5-8.
I have 6 Banks. The Banks 1-3 are assigned to the hw_ids 1-4 and the Banks 4-6 are assigned to the hw_ids 5-8.

The following works, but I can only "cycle" with one button...

 

MAP1 1 2 3
EVENT_BUTTON id=  9   hw_id =  9   fwd_to_lcd=1  type=Meta    meta=SetBankOfHwId:1  meta=SetBankOfHwId:2  meta=SetBankOfHwId:3  meta=SetBankOfHwId:4  button_mode=Toggle   range=map1   lcd_pos=1:1:1 label="^d1"

MAP2 4 5 6
EVENT_BUTTON id= 11   hw_id = 11   fwd_to_lcd=1  type=Meta    meta=SetBankOfHwId:5  meta=SetBankOfHwId:6  meta=SetBankOfHwId:7  meta=SetBankOfHwId:8  button_mode=Toggle   range=map2   lcd_pos=1:1:2 label="^d2"

 

...but I need it like this, but only the buttons 9 an 10 (for the hw_ids 1-4) work. Same problem with CycleBankOfHwId:

 

EVENT_BUTTON id=  9  type=Meta   meta=DecBankOfHwId:1  meta=DecBankOfHwId:2  meta=DecBankOfHwId:3  meta=DecBankOfHwId:4  range=63:63  button_mode=OnOnly


EVENT_BUTTON id= 10  type=Meta   meta=IncBankOfHwId:1  meta=IncBankOfHwId:2  meta=IncBankOfHwId:3  meta=IncBankOfHwId:4  range=65:65  button_mode=OnOnly

EVENT_BUTTON id= 11  type=Meta   meta=DecBankOfHwId:5  meta=DecBankOfHwId:6  meta=DecBankOfHwId:7  meta=DecBankOfHwId:8  range=63:63  button_mode=OnOnly


EVENT_BUTTON id= 12  type=Meta   meta=IncBankOfHwId:5  meta=IncBankOfHwId:6  meta=IncBankOfHwId:7  meta=IncBankOfHwId:8  range=65:65  button_mode=OnOnly

 

With an Encoder it works lisk this:

 

MAP1 1 2 3

EVENT_ENC id=  20     hw_id = 20   fwd_to_lcd=1  type=Meta    meta=SetBankOfHwId:1  meta=SetBankOfHwId:2  meta=SetBankOfHwId:3  meta=SetBankOfHwId:4     range=map1   lcd_pos=1:1:1 label="^d1"

 

MAP2 4 5 6
 EVENT_ENC id=  30     hw_id = 30   fwd_to_lcd=1  type=Meta    meta=SetBankOfHwId:5  meta=SetBankOfHwId:6  meta=SetBankOfHwId:7  meta=SetBankOfHwId:8     range=map2   lcd_pos=1:1:2 label="^d2"

 

Maybe there is an easier solution, but I did not found one... I'm curious about it.

 

Best Regards, Markus
 

Link to comment
Share on other sites

  • 2 months later...

V1.027 is available:

MIDIbox NG V1.027
~~~~~~~~~~~~~~~~~

   o .NGR: added "set_active" command. It can be alternatively used
     instead of the bank mechanism to activate/deactivate events,
     e.g. if the same events should be activated in multiple banks under
     certain conditions.
     A demo can be found under cfg/tests/multibnk.*

   o it's now possible to set a static forward value independent from the
     actual value of the event which initiates the forwarding.

     E.g. with
        EVENT_xxx fwd_id=SENDER:1:42
     the SENDER:1 will always get value 42 for additional processing

   o support for multiple MBHP_MF_NG modules in a chain.
     See cfg/test/mf_multi.ngc for a configuration example

   o support for Logic Control Meters
     Configuration example: see cfg/templates/logictrl.ngc
     (search for "meter")

   o added new GLCD fonts (provided by Pcbatterij): Inverted and Tiny.
     In order to test these fonts, try following commands in the MIOS Terminal:
     lcd %C&t@(1:1:1)Tiny Font
     lcd %C&i@(1:1:1)Inverted Font

   o fixed OSC receiver (avoided stack overflow)

   o various minor bugfixes

Best Regards, Thorsten.

Link to comment
Share on other sites

  • 1 month later...

In order to get 32 dim levels, you've to:

 

1) change the NUM_MATRIX_DIM_LEVELS to 32 in mbng_matrix.c:

 

2) change the rgb type in mbng_event.h from:

typedef union {
  u16 ALL;

  struct {
    u16 r:4;
    u16 g:4;
    u16 b:4;
  };
} mbng_event_rgb_t;

to:

typedef union {
  u16 ALL;

  struct {
    u16 r:5;
    u16 g:5;
    u16 b:5;
  };
} mbng_event_rgb_t;

 

change some checks in mbng_file_c.c which complain about values >= 16 (search for rgb)

 

 

64 dim levels: possible in theory, but much more changes are required, because the mbng_event_rgb_t type is only a 16bit variable, which can't store 3*6 bits.

If you don't plan to use a RGB LED, you could write:

 

typedef union {
  u16 ALL;

  struct {
    u16 r:6;
    u16 g:6;
    u16 b:4; // not used...
  };
} mbng_event_rgb_t;

 

otherwise you would have to change it to a 32bit type, and this would require a lot of changes in the memory management and compression related functions in mbng_event.c

It would also increase the memory consumption for each event!

 

In addition, you've to set MIOS32_SRIO_NUM_DOUT_PAGES to 64 in the mios32_config.h file, and you should reduce the number of SRIOs (e.g. to 16) to avoid flickering.

 

Best Regards, Thorsten.

Link to comment
Share on other sites

  • 3 weeks later...

Hey Thorsten.
Thanks for your effort.

32 levels is nice :smile:

I have changed the files accordingly but still get an error here:

Creating object file for mbng_matrix.c
src/mbng_matrix.c: In function 'MBNG_MATRIX_DOUT_PinSet':
src/mbng_matrix.c:524:3: error: #error "Please adapt this code according to the different NUM_MATRIX_DIM_LEVELS"
make: *** [project_build/src/mbng_matrix.o] Error 1

i guess its because of this :

#if NUM_MATRIX_DIM_LEVELS != (MIOS32_SRIO_NUM_DOUT_PAGES/2)

but when i change

MIOS32_SRIO_NUM_DOUT_PAGES

to 64 i will run into the same problem you described when using 64 levels.

 

...also don´t i have to change mbng_dout.c too ?

 

#define NUM_DIM_LEVELS 16

/////////////////////////////////////////////////////////////////////////////
//! local variables
/////////////////////////////////////////////////////////////////////////////

static const u32 dim_pattern[NUM_DIM_LEVELS] = {
  0x00000000, // 0
  0x00000001, // 1
  0x00010001, // 2
  0x01010101, // 3
  0x01010103, // 4
  0x01030103, // 5
  0x03030303, // 6
  0x03130313, // 7
  0x13131313, // 8
  0x33333333, // 9
  0x33373337, // 10
  0x37373737, // 11
  0x77777777, // 12
  0x777f777f, // 13
  0x7f7f7f7f, // 14
  0xffffffff, // 15

if so, how does the dim_pattern change ?

 

thank you very much for your time .

ps. my coding skills are very low .

 

best regards

Edited by sprintf
Link to comment
Share on other sites

Yes, you are right - it's much more work than expected, it's not a simple change! :-/

 

I started to adapt mbng_matrix.c, so that it should also allow MIOS32_SRIO_NUM_DOUT_PAGES == 64, but then I found much more places which actually need changes.

 

Also mbng_dout.c as you already noticed. The table has to be enhanced by more granular patterns, and also the variable width (e.g. u64 for 64 dim levels), and finally MBNG_DOUT_NotifyReceivedValue which transfers the pattern into the pages.

 

So, most of the code is constrained for 32 pages and 16 dim levels.

Adding more flexibility would result into too much work at my side - I don't want to do this.

 

Best Regards, Thorsten.

Link to comment
Share on other sites

Wow! 2 releases at once, because the preliminary ones were never officially published:

 

V1.028:

MIDIbox NG V1.028
~~~~~~~~~~~~~~~~~

   o DOUT_MATRIX n=8 properly supported

   o now up to 16 DOUT_MATRIX and DIN_MATRIX can be configured

 

V1.029:

MIDIbox NG V1.029
~~~~~~~~~~~~~~~~~

   o added USB MIDI workaround for Windows

   o if a EVENT_SENDER is part of a radio group, and got a new value, it will only
     send the MIDI event if the new value is matching with the specified range.
     Usage example: cfg/templates/pg300.ngc

   o if EVENT_RECEIVER forwarded to EVENT_AIN, EVENT_AINSER or EVENT_BUTTON,
     send also MIDI event.
     Usage example: cfg/templates/pg300.ngc

   o support for MBHP_CORE_STM32F4 module

 

+ many bugfixes and minor improvements reported/done in the last weeks.

 

Best Regards, Thorsten.

Link to comment
Share on other sites

I'm just only now getting my head around this amazing piece of firmware.  It is a great platform for implementing a DB50XG driver than hardcoding into MIDIO128 i suppose.

 

A feature request though:  is it useful to put a midi clock or even a basic midi file player in? Like in MIDIO128.  My envisaged use case is MBNG as a master midi device, a FCB1010 foot controller and a SEQ V4.

Edited by EsotericLabs
Link to comment
Share on other sites

WOW! GREAT WORK!

I am using the new STM32F4 core and immediately noticed that

executing of big NGR scripts is much faster!

TK, did you modify the SD card access?

Or is it because the new core? 

 

 

Best regards

Marxon

Edited by Marxon
Link to comment
Share on other sites

  • 2 months later...

Seems like I need to bang my head against the wall to get the solution.

 

I just try a simple thing. I have a set of LEDs but for testing I just use one. Because I want to be able to control a lot of LEDs individually, I use DOUT_MATRIX. Here is the code:

 

 

RESET_HW
 
DOUT_MATRIX n=1   rows=8 sr_dout_sel1=3  sr_dout_r1=4 inverted=0 led_emu_id_offset=1
 
EVENT_LED  id=1  type=CC cc=16

 

So, what I do expect is that the LED connected between D7 of SR3 and D7 of SR4 lights up as soon as it receives value 127 of CC16. But instead of this it lights up and it doesn't matter what I do with the slider in MIOS Studio. If I check all other pins, I have the same effect on every pin-combination. I expect them to be 0V but they aren't. If I swap anode and cathode the led is off with cc value 0. If I move the slider to 127 it begins to light... but it's very low. I have the same effect on every pin-combination.

 

Time to go to bed?! This shouldn't be too hard to solve.... 

 

I measured the voltages: It's 4,25V between every SR3 and SR4 pin. How come? I tried another DOUT module. Same here.

 

I have another DOUT module here which is equipped with a ULN2803 on the first SR. With this one and this code:

DOUT_MATRIX n= 1 rows=8 inverted_sel=1 sr_dout_sel1= 1 sr_dout_r1= 2

the voltages between the pins are as expected. BUT the led is very low...

 

Any tipps? Thanks! 

 

 

 

//Edit:
Okay... the next day... notice to myself: Read schematics carefully. I forgot to remove the resistor on the first SR in case #1. And I forgot to set the led_emu_id_offset=0 in case #2.

But anyway: The led is really a lot brighter if I connect it directly to a DOUT without matrix or ULN. Even with ULN its pretty low... has it something to do that I use warmwhite LEDs?

 

//edit:
I'm using a ULN2803. So the short leg goes to D7 of SR1. Than I removed the resistor on SR2 and connected the long leg to D7 of SR2. It works, but even than it's not that bright. Is there a chance to get more brightness without connecting each LED individually?

Edited by FantomXR
Link to comment
Share on other sites

Is there a chance to get more brightness without connecting each LED individually?

 

No, because in a 8x8 DOUT matrix the LEDs are only activated for 12.5% of the time

 

The brightness also depends on the LEDs you are using.

A "blacklist" (which also lists the good ones) can be found here: http://www.midibox.org/dokuwiki/doku.php?id=mb-lre8x2cs_pcb

 

Best Regards, Thorsten.

Link to comment
Share on other sites

  • 2 weeks later...

Hey people,

 

just a short programming question:

 

I have several LEDs connected in a DOUT_Matrix as well as several switches in a DIN_Matrix. I can easily assign one switch to LED to turn it on and off. But what I want to do is, not to turn off the LED completely. I want it to go down till, let's say, 25% of maximum brightness. How to do that? 

With other word: Press button --> LED goes to 100%, press button again --> LED goes to 25%. 

 

The reason why I want to do is, that I want to see the buttons even if it's dark outside. So I need kind of illumination of the buttons.

 

Thanks,

Chris

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share


×
×
  • Create New...