Jump to content

Marxon

Programmer
  • Posts

    474
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by Marxon

  1. no, I mean that

    EVENT_LED_MATRIX id=1..16 are assigned to DOUT_MATRIX id=1

    EVENT_LED_MATRIX id=17..32 are assigned to DOUT_MATRIX id=2

    EVENT_LED_MATRIX id=33..48 are assigned to DOUT_MATRIX id=3

    EVENT_LED_MATRIX id=49..64 are assigned to DOUT_MATRIX id=4

     
    each id controls a column (LED bar)
    You've only 4 LED bars per DOUT_MATRIX, accordingly only id=1..4, id=17..20, id=33=36, id=49..52 are relevant, the others can be ignored.
     

    Best Regards, Thorsten.

     

    Ah now i got it:

    this why you count in your tpd.ngc example:

    ...
    EVENT_LED_MATRIX id=22 type=CC  chn= 1 cc= 21  led_matrix_pattern=1  rgb=15:15:15
    EVENT_LED_MATRIX id=23 type=CC  chn= 1 cc= 22  led_matrix_pattern=1  rgb=15:15:15
    EVENT_LED_MATRIX id=24 type=CC  chn= 1 cc= 23  led_matrix_pattern=1  rgb=15:15:15
    
    # CC 24..31
    EVENT_LED_MATRIX id=33 type=CC  chn= 1 cc= 24  led_matrix_pattern=1  rgb=15:15:15
    EVENT_LED_MATRIX id=34 type=CC  chn= 1 cc= 25  led_matrix_pattern=1  rgb=15:15:15
    EVENT_LED_MATRIX id=35 type=CC  chn= 1 cc= 26  led_matrix_pattern=1  rgb=15:15:15
    .....

     and not

    ...
    EVENT_LED_MATRIX id=22 type=CC  chn= 1 cc= 21  led_matrix_pattern=1  rgb=15:15:15
    EVENT_LED_MATRIX id=23 type=CC  chn= 1 cc= 22  led_matrix_pattern=1  rgb=15:15:15
    EVENT_LED_MATRIX id=24 type=CC  chn= 1 cc= 23  led_matrix_pattern=1  rgb=15:15:15
    
    # CC 24..31
    EVENT_LED_MATRIX id=25 type=CC  chn= 1 cc= 24  led_matrix_pattern=1  rgb=15:15:15
    EVENT_LED_MATRIX id=27 type=CC  chn= 1 cc= 25  led_matrix_pattern=1  rgb=15:15:15
    EVENT_LED_MATRIX id=28 type=CC  chn= 1 cc= 26  led_matrix_pattern=1  rgb=15:15:15
    .....

     

    Thank you again!

    Now it really works like wanted :)

     

     

    Have a nice day!

  2. Hi Thorsten,

     

    unfortunately your Code

    DOUT_MATRIX n=1   rows=4   sr_dout_r1=3  sr_dout_r2=5  
    DOUT_MATRIX n=2   rows=4   sr_dout_r1=4  sr_dout_r2=5
    DOUT_MATRIX n=1   rows=4   sr_dout_r1=6  sr_dout_r2=8  
    DOUT_MATRIX n=2   rows=4   sr_dout_r1=7  sr_dout_r2=8  
    
    EVENT_LED_MATRIX id= 1 type=CC  chn= 1 cc= 16  led_matrix_pattern=1
    EVENT_LED_MATRIX id= 2 type=CC  chn= 1 cc= 17  led_matrix_pattern=1
    EVENT_LED_MATRIX id= 3 type=CC  chn= 1 cc= 18  led_matrix_pattern=1
    EVENT_LED_MATRIX id= 4 type=CC  chn= 1 cc= 19  led_matrix_pattern=1
    
    EVENT_LED_MATRIX id=17 type=CC  chn= 1 cc= 20  led_matrix_pattern=1
    EVENT_LED_MATRIX id=18 type=CC  chn= 1 cc= 21  led_matrix_pattern=1
    EVENT_LED_MATRIX id=19 type=CC  chn= 1 cc= 22  led_matrix_pattern=1
    EVENT_LED_MATRIX id=20 type=CC  chn= 1 cc= 23  led_matrix_pattern=1
    
    EVENT_LED_MATRIX id=33 type=CC  chn= 1 cc= 24  led_matrix_pattern=1
    EVENT_LED_MATRIX id=34 type=CC  chn= 1 cc= 25  led_matrix_pattern=1
    EVENT_LED_MATRIX id=35 type=CC  chn= 1 cc= 26  led_matrix_pattern=1
    EVENT_LED_MATRIX id=36 type=CC  chn= 1 cc= 27  led_matrix_pattern=1
    
    EVENT_LED_MATRIX id=49 type=CC  chn= 1 cc= 28  led_matrix_pattern=1
    EVENT_LED_MATRIX id=50 type=CC  chn= 1 cc= 29  led_matrix_pattern=1
    EVENT_LED_MATRIX id=51 type=CC  chn= 1 cc= 30  led_matrix_pattern=1
    EVENT_LED_MATRIX id=52 type=CC  chn= 1 cc= 31  led_matrix_pattern=1

     

    does not work.

    Would you please explain it to me?

    1) Why are the sr_dout_sel missing or are they just declared as sr_dout_r2?

     

    As you can see, each DOUT_MATRIX has 16 EVENT_LED_MATRIX entries, regardless of the number of rows.

    2) Do you mean EVENT_LED_MATRIX entry has a 16 step pattern?

     

    3) Shouldn't be the code

    DOUT_MATRIX n=1   rows=4   sr_dout_r1=3  sr_dout_r2=5  
    DOUT_MATRIX n=2   rows=4   sr_dout_r1=4  sr_dout_r2=5  
    DOUT_MATRIX n=1   rows=4   sr_dout_r1=6  sr_dout_r2=8  
    DOUT_MATRIX n=2   rows=4   sr_dout_r1=7  sr_dout_r2=8  
    

    like this (different matrix numbering)

    DOUT_MATRIX n=1   rows=4   sr_dout_r1=3  sr_dout_r2=5
    DOUT_MATRIX n=2   rows=4   sr_dout_r1=4  sr_dout_r2=5  
    DOUT_MATRIX n=3   rows=4   sr_dout_r1=6  sr_dout_r2=8  
    DOUT_MATRIX n=4   rows=4   sr_dout_r1=7  sr_dout_r2=8  
    

     

    Best regards

    Marxon

  3. There is nothing more to say!

    I mistakenly missed out the LED Digit topic and thought to have no usecase for it.

    Thank you Thorsten.

    Marxon

     

    This was probably a little bit hasty...

    The LED Digit example does not clarify the issue because

    it is a pair of 8x8 matrices.

    I have made a sketch to explain what my problem is.

     

    post-4098-0-56820700-1385843172_thumb.jp

    How can i control led bar 1 with a CC and

    led bar 2 with another one although they are in the same column?

    I tried to assign two diffewrent patterns but as expected they interrupt each other.

     

    DOUT_MATRIX n=1   rows=4   sr_dout_r1=3  sr_dout_sel1=4  sr_dout_r2=5  
    DOUT_MATRIX n=2   rows=4   sr_dout_r1=6  sr_dout_sel1=7  sr_dout_r2=8  
    
    EVENT_LED_MATRIX id=1  led_matrix_pattern=1  fwd_to_lcd=1  type=CC chn= 1 cc= 1  lcd_pos=1:1:2  label="1:%3d%B"
    EVENT_LED_MATRIX id=2  led_matrix_pattern=2  fwd_to_lcd=1  type=CC chn= 1 cc= 2  lcd_pos=1:1:2  label="1:%3d%B"
    
    LED_MATRIX_PATTERN n= 1   pos= 0  pattern=0000000000000000
    LED_MATRIX_PATTERN n= 1   pos= 1  pattern=1000000000000000
    LED_MATRIX_PATTERN n= 1   pos= 2  pattern=1000000000000000
    LED_MATRIX_PATTERN n= 1   pos= 3  pattern=1100000000000000
    LED_MATRIX_PATTERN n= 1   pos= 4  pattern=1110000000000000
    LED_MATRIX_PATTERN n= 1   pos= 5  pattern=1110000000000000
    LED_MATRIX_PATTERN n= 1   pos= 6  pattern=1111000000000000
    LED_MATRIX_PATTERN n= 1   pos= 7  pattern=1111000000000000
    LED_MATRIX_PATTERN n= 1   pos= 8  pattern=1111100000000000
    LED_MATRIX_PATTERN n= 1   pos= 9  pattern=1111100000000000
    LED_MATRIX_PATTERN n= 1   pos=10  pattern=1111110000000000
    LED_MATRIX_PATTERN n= 1   pos=11  pattern=1111110000000000
    LED_MATRIX_PATTERN n= 1   pos=12  pattern=1111111000000000
    LED_MATRIX_PATTERN n= 1   pos=13  pattern=1111111000000000
    LED_MATRIX_PATTERN n= 1   pos=14  pattern=1111111100000000
    LED_MATRIX_PATTERN n= 1   pos=15  pattern=1111111100000000
    
    LED_MATRIX_PATTERN n= 2   pos= 0  pattern=0000000000000000
    LED_MATRIX_PATTERN n= 2   pos= 1  pattern=0000000010000000
    LED_MATRIX_PATTERN n= 2   pos= 2  pattern=0000000010000000
    LED_MATRIX_PATTERN n= 2   pos= 3  pattern=0000000011000000
    LED_MATRIX_PATTERN n= 2   pos= 4  pattern=0000000011100000
    LED_MATRIX_PATTERN n= 2   pos= 5  pattern=0000000011100000
    LED_MATRIX_PATTERN n= 2   pos= 6  pattern=0000000011110000
    LED_MATRIX_PATTERN n= 2   pos= 7  pattern=0000000011110000
    LED_MATRIX_PATTERN n= 2   pos= 8  pattern=0000000011111000
    LED_MATRIX_PATTERN n= 2   pos= 9  pattern=0000000011111000
    LED_MATRIX_PATTERN n= 2   pos=10  pattern=0000000011111100
    LED_MATRIX_PATTERN n= 2   pos=11  pattern=0000000011111100
    LED_MATRIX_PATTERN n= 2   pos=12  pattern=0000000011111110
    LED_MATRIX_PATTERN n= 2   pos=13  pattern=0000000011111110
    LED_MATRIX_PATTERN n= 2   pos=14  pattern=0000000011111111
    LED_MATRIX_PATTERN n= 2   pos=15  pattern=0000000011111111

     

     

  4. Hi Midiboxers!
     
    Thorsten's Midibox NG can be a little beast in terms of complexity for me ;)
    It would be great if someone can help me.
     
    I like to equip my Midibox NG with 16 8-segment led bars. 
    Each bar should be controlled with a separate received CC event like this way:
    CC value = 0 -> all bar segments off
    CC value = 64 -> bar segment 1,2,3,4 on
    CC value = 127 -> all bar segments on
     
    Due to the conditions of my box, I decided to divide them into two 4x16 matrices (one column = 2x8-led bars)
    Every matrix is driven by 3 DOUT-SRs.
    Matrix 1
    SR1 D7 - D0 are connected to the anodes of LED Bar 1, 3, 5, 7 (column 1-8)
    SR2 D7 is connected to all cathodes of bar 1, 2 (row 1)
    SR2 D6 is connected to all cathodes of bar 3, 4 (row 2)
    SR2 D5 is connected to all cathodes of bar 5, 6 (row 3)
    SR2 D4 is connected to all cathodes of bar 7, 8 (row 4)
    SR3 D7 - D0 are connected to the anodes of LED Bar 2, 4, 6, 8 (column 9-16)
    ...
     
    But now i am confused how to control the led bars independently via CCs because they are parts of led matrix columns. 
    Led matrix patterns?
    Each led separately with emu_led_offset?
    Range mapping?
     
     
    Thanks for any suggestions!
     
    Best regards
    Marxon
  5. Hi again,

    i managed the sequencer not to start play if the datawheel is turned and scrub mode is active.

    Searching the code for "scrub" leads me to this lines:

     

    if( seq_ui_button_state.SCRUB && encoder == 0 ) {
    // if sequencer isn't already running, continue it (don't restart)
    if( !SEQ_BPM_IsRunning() )
    SEQ_BPM_Cont();
    ui_seq_pause = 0; // clear pause mode
    

    Afte removing the "!" from the third line,

    the code now reads:

    if( seq_ui_button_state.SCRUB && encoder == 0 ) {
    // if sequencer isn't already running, continue it (don't restart)
    if( SEQ_BPM_IsRunning() )
    SEQ_BPM_Cont();
    ui_seq_pause = 0; // clear pause mode
    

    But of course that would have been too easy because

    unfortunately the position marker is not visible when the sequencer is stopped. :angry:

    So only half the way was done.

    I had to figure out where this behavior is controlled and,

    thanks to TK´s well documented code,

    i have found this:

    // determine position marker
    u16 pos_marker_mask = 0x0000;
    if( sequencer_running ) {
    u8 played_step = seq_core_trk[track].step;
    if( (played_step >> 4) == ui_selected_step_view )
    pos_marker_mask = 1 << (played_step & 0xf);
    }
    

    I did a small change in the third line, now it looks like this:

     

    // determine position marker
    u16 pos_marker_mask = 0x0000;
    // if( sequencer_running )
    {
    u8 played_step = seq_core_trk[track].step;
    if( (played_step >> 4) == ui_selected_step_view )
    pos_marker_mask = 1 << (played_step & 0xf);
    }
    
     

    Believe it or not:

    it is working exactly like i wanted to!

    This was my first very small modification of the sequencer firmware and i am proud about it. :yes:

    Damn, how does TK feel himself? This crazy guy wrote thousands lines of code!

    Once again Thorsten, thank you for all your work! :thumbsup: :thumbsup: :thumbsup:

    Best regrads

    Marxon

  6. Hi all and specially TK,

    i have some small suggestions for the Midibox Sequencer.

    Maybe they meet with your or other users approval.

    Manual step trigger mode:

    Holding down a group button for more then two seconds,

    selects all track of the group.

    Follow mode:

    Status display notification (like scrub or loop mode).

    Pause:

    Blinking GP led or 2nd color BLM led to show current step position.

    Best regards

    Marxon

  7. Hi Peter,

    thanks for your input.

    ...but it is possible to set up the datawheel to generally scroll through the steps (and not perform note changes, which was the default behaviour for some time), even with scrub mode off...
    But this is not the same like "scrubbing"

    To be concrete:

    Recently I have been experimenting with the track direction settings and

    wanted to "see" how the sequence changes. -> I have 16GP leds and a 4x16 duo color BLM.

    The BLM´s second color acts as position marker.

    By using the scrub mode and turning the datawheel,

    i can scroll the position marker through the track steps and "see"

    how the progression is affected by the track direction settings.

    So far this is working up on that, that the sequencer for whatever reason,

    starts the play mode :/

    Sorry for my bad english, hopefully my problem is understandable.

    Marxon

  8. Hi all,

    i have noticed that turning the datawheel during activated scrub mode

    is also activating play even if the sequencer has been paused or stoped before. It would be nice to have a option to disable this behavior.

    Best regards

    Marxon

  9. Thank both of you for this links!

    @EsotericLabs:

    Thats something i was looking for.

    In the Preface it is written:

    "The book is not an introductory programming manual; it assumes some familiarity with basic

    programming concepts like variables, assignment statements, loops, and functions."

    @Hawkeye:

    Your link is good too.

    Nice tutorials and downloads.

    Thus, the next few weeks are scheduled.

    But i am sure you will read from me ;)

    Best regards

    Marxon

  10. solving a problem with your brain is most often better than solving it with your hands :-D

    Ja ja, hast ja Recht :b

    Außerdem wäre etwas C Wissen sicherlich auch für andere Sachen nützlich.

    Aber der Zeitaufwand... *seufz*

    Kannst du eine gute Seite/Ebook empfehlen und mir sagen auf welche "C-Bereiche" ich besonders Wert legen sollte oder ich für MIOS auslassen kann?

    mfg

    Marxon

  11. Hi again,

    ...maybe this is already enough for what you want to achieve?

    Unfortunately i can not achieve it only by using the configs...

    I played with the firmware code some hours.

    It was worth the try but it seems without some C knowledge, i will not get it work.

    Now i have two options:

    Start to lear C or add some additional buttons....

  12. OK thanks!

    Seems like i have to edit seq_ui.c because

    i want Menu + Rwd to work as a Copy button shortcut.

    My first try:

    static s32 SEQ_UI_Button_Rew(s32 depressed)

    {

    seq_ui_button_state.REW = depressed ? 0 : 1;

    if( depressed ) return -1; // ignore when button depressed

    if( seq_ui_button_state.MENU_PRESSED ) ///line added

    return SEQ_UI_Button_Copy(depressed); ///line added

    if( SEQ_SONG_ActiveGet() ) {

    portENTER_CRITICAL();

    SEQ_SONG_Rew();

    portEXIT_CRITICAL();

    } else {

    //SEQ_UI_Msg(SEQ_UI_MSG_USER, 1000, "We are not", "in Song Mode!");

    SEQ_UI_Button_StepViewDec(depressed);

    }

    return 0; // no error

    }

    But i guess it is not that easy...

×
×
  • Create New...