Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Posts posted by FantomXR

  1. I think I'll try to add capacitors to pins A and B since this is the fastest fix I could do. 

    In the long run I'll change the layout, adding caps to ground and two 10k resistors as in the datasheet + 74HC14 to create nice and sharp results. 

  2. 33 minutes ago, Hawkeye said:

    Take a look in mios32/common/mios32_enc.c - the "state machine" code is in MIOS32_ENC_UpdateStates(), there you should find the logic.
    You could also try to swap around pins 2 and 3 of the encoder, had to do this a while back for smaller 12mm ALPS encoders to work properly, otherwise would observe random jumps, back then the wiring was incorrect, as i installed 12mm Alps STEC encoders in 16mm encoder slots :).

    Have a good weekend!

    Well that is due to a different pinout if STEC12 and 16. On 12 the C terminal is in the middle while it's on the outside on 16 iirc. 

    I'll check again and report back. 

  3. I just see that MIOS Studio gives me an error message:

    [1416035.046] [MBNG_FILE_C:303] ERROR: invalid pins for ENC n=9 ... pins=5
    [1416035.046] [MBNG_FILE_C:303]        (expecting 0:1, 1:0, 2:3, 3:2, 4:5, 5:4, 6:7 or 7:6)

    I thought that this isn't relevant. So it seems I need to change the wiring :-(

    btw.: @TK. I can not find the code for the different detented-types in the firmware. In which file are they defined? 

    I ask because it seems that my encoders don't work properly. I use PEC11L from Bourns:

    I use them in relative mode. CW 1, CCW 127. When turning fast CW I also get 127 from now to then. So it seems to bounce... 

  4. Hey people,

    I have a strange problem. I have a PCB with 9 encoders. This PCB is connected to another PCB with 27 switches. In total there are 8 SR. 4 on the button-PCB and 4 on the encoder PCB. Everything works fine except the very last encoder. The encoder is connected to pin4 and pin5 of the HC165. MIOS Studio shows fine that it toggles input 62 and 63 and depending on the direction the encoder is moved, either 62 or 63 will get triggered first. So this seems to be correct. In the NGC I wrote

    ENC n=9 sr=8 pins=6:5 type=detented1

    But for some reason NG doesn't take those events as encoder events. This is the output of the terminal:

    [1406781.497] MBNG_DIN_NotifyToggle(62, 1)
    [1406781.497] No event assigned to BUTTON hw_id=62
    [1406781.503] MBNG_DIN_NotifyToggle(63, 1)
    [1406781.503] No event assigned to BUTTON hw_id=63
    [1406781.654] MBNG_DIN_NotifyToggle(62, 0)
    [1406781.654] No event assigned to BUTTON hw_id=62
    [1406781.662] MBNG_DIN_NotifyToggle(63, 0)
    [1406781.662] No event assigned to BUTTON hw_id=63

    But it should like this (just with another id though):

    [1406866.814] MBNG_ENC_NotifyChange(7, 1)
    [1406866.814] No event assigned to ENC hw_id=7
    [1406867.121] MBNG_ENC_NotifyChange(7, 1)
    [1406867.121] No event assigned to ENC hw_id=7
    [1406867.446] MBNG_ENC_NotifyChange(7, 1)
    [1406867.446] No event assigned to ENC hw_id=7
    [1406867.747] MBNG_ENC_NotifyChange(7, 1)
    [1406867.747] No event assigned to ENC hw_id=7

    Any ideas? I use the stock NG-firmware for this test. I've also tested to set pins=6:5 to all another combination like 4:5, 6:7, etc. But none of them works.

    Thank you very much!


  5. On 10.2.2020 at 5:02 PM, macsaif said:

    Is there any way to integrate the 8xLED ring+Encoder card to some DAW (In my case Gig Performer)? I want to connect the Midibox NG to the computer by USB and I need a complete interation in DAW, it means If I change the values in the computer, the Midibox NG will receive the values, and the LED rings will show the actual value in DAW. Also I want to make some buttons with the same functionality.

    Any idea!



    Totally possible. I do the same with Cantabile. 

  6. Thanks for the reply. I think I've tested this already but for some reason it was not working. But I'll give this a new try early next week and report back!

    Edit: I remember. The reason why it wasn't working was I don't receive "values" from the DAW but ASCII / text strings instead. And it seems such strings can't be stored...

  7. Hey people,

    my DAW sends a bunch of sysex strings at once to my midibox. The content of the sysex strings I'd like to display on my OLEDs. 

    In my DAW there is a mixer. The DAW sends the values of the faders via sysex. I have one OLED that should show those value. So if I select channel 1 on my midibox it shows the first value, channel 2 the second. This is not working at the moment because the DAW sends those values of all channels at once and if I switch on my midibox from one channel to another I need to again dump the sysex strings to the midibox to receive the correct value. 

    So I'd need to somehow save those received values inside the midibox and recall them. 

    Any idea?




  8. Hey people,

    I had a strange behavior last night. My MIDIbox was in the car over night. It was cold, maybe -2°C. The next day I connected it to my computer and realized, that the EEPROM was reset and all settings were gone (it was a MIDIbox running MB_KB). 

    Is there a chance to prevent it from doing that? I had another MIDIbox in the car which runs MB_NG. This was booting fine, but it uses an SD-card instead of the internal EEPROM....


  9. Alright... I've got a solution that works great for me. I thought I share it with you.

    I now tried WS2811 driver ICs. They are cheap and only need one data-line which goes from one IC to the next. Each IC can drive three LEDs. Of course you are not really capable to control them individually with standard NG code. So I've added a meta command.

    Add this to mbng_event.c (row 2968 and following):

      case MBNG_EVENT_META_TYPE_RGB_LED_SET_SINGLE:      return "RgbLedSetSingle";

    row 3055 and following:

      if( strcasecmp(meta_type, "RgbLedSetSingle") == 0 )       return MBNG_EVENT_META_TYPE_RGB_LED_SET_SINGLE;

    row 3142 and following:

      case MBNG_EVENT_META_TYPE_RGB_LED_SET_SINGLE:     return 3;

    row 3376 and following:

          u16 led;
          if( (led=meta_values[0]) ) {
    	led -= 1;
    	WS2812_LED_SetRGB(led, meta_values[1], meta_values[2]);
        } break;


    in mbng_event.h add this line 163 and following:



    Done! Now you can call the meta RGBLEDSETSINGLE from NG. Here is a quick example. I had no buttons connected to that midibox. So I've worked with receivers and senders:

    EVENT_RECEIVER id=1 type=cc cc=2 if_equal=127 fwd_id=SENDER:1
    EVENT_RECEIVER id=1 type=cc cc=2 if_equal=0   fwd_id=SENDER:2
    EVENT_SENDER id=1 type=meta meta=rgbledsetsingle:1:1:255
    EVENT_SENDER id=2 type=meta meta=rgbledsetsingle:1:1:0

    This switches on the second LED of the first IC on if CC2 with a value of 127 is received. It switches off when 0 is received. 

    So you can control each LED individually without overwriting the other :-)

  10. Hey people,

    I was looking for a way to detect, if an encoder (with metal shaft of course) is touched. Since NG itself doesn't support such touchsensors I was searching for an IC. And I found it:

    I've added a 22nF cap between SNS and SNSK and put a 10k resistor right before the encoder. It works great! As soon as I touch the encoder, the "OUT" goes high and if I release it it goes back low.

    You just have to connect that to an inputpin of an HC165 and you are done.


    • Like 1
  11. 6 minutes ago, latigid on said:

    Is there a specific problem you are trying to solve? 

    I guess that routing is way more comfortable and even better if I place all SRs on one PCB next to each other and use pinheader to connect the buttons & LEDs to it directly. For some I reason I never did it like this... 

    I never had performance problems anyway... so I'm just interested how it is done in the professional world...

  12. I know this is an old thread. But my question fits into this topic I think.

    What is the "professional" way to place the shift registers? Is it better to place them near the MCU to keep SPI-traces as short as possible or is it better to place them near the objects, that are connected to it (resp. buttons or LEDs)? 

    I already designed tons of PCBs and I used to put the SRs near the objects which are connected to the SRs. But meanwhile I don't see really much sense in it. It means a lot routing and starting from scratch with any new PCB. 

    How do you do it?

  13. Hey people,

    Maybe you can guide me in the right direction. 

    In my projects I use buttons with integrated LEDs. But I want to get away from the standard HC595. Mainly because it takes a lot of PCB space and it has a lot traces due to the SPI protocol. 

    Is there another style to control those LEDs? I also work a lot with WS2812. This is great because there is only one single data line from one to the next. 



  • Create New...