Jump to content

Antichambre

Programmer
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    101

Posts posted by Antichambre

  1. Hi Andy,

    First thanks for taking a look.

    1 hour ago, latigid on said:

    If you didn't already, add jumpers to the CAN pins in case the buss is used in the conventional manner (CV/gate).

    I didn't but I will add those jumpers. It's a good idea, it adds more flexibility. Done!

    1910_dipCoreF4_Euro_PCB_jumpers%20added.
     

    1 hour ago, latigid on said:

    Putting a high-speed digital signal on the power cable might introduce some crosstalk and should be tested.

    CAN(with transceiver) is a differential pair signal, then bad behaviour like crosstalk to power and audio paths should be very limited, but you're right this has to be tested, noted!

    Best regards
    Bruno

  2. On 12/10/2019 at 4:50 PM, Zam said:

    so J18 for MCAN ?

    I finally decided to add CAN transceiver to the board.
    large.1910_dipCoreF4_Euro_PCB.png.1f5910
    The modules will be able to communicate natively in midi thru the regular euro power supply ribbon, using MCAN. No need of an other board to connect to the external world too, just a connector in front which will give access to the lines MCAN_L and MCAN_H.

    Best regards
    Bruno

     

  3. Just now, Zam said:

     

    Look great !!!

    Thanks! :)

     

    Just now, Zam said:

    so J18 for MCAN ?

    Yes for CAN, J18 is always the one. But Andy's wCore and Disco platform have only One-Wire connection. This one has Power pins for transceiver supply, RX and TX are separated. But you can add the regular Resistor and a Diode on the dipBoardF4 to link others Cores directly and easily with the One-Wire.
    This MCAN connector may be called J18E for 'extended' I suppose...
    A small transceiver module will be created to link the CAN bus with the external world, internally I planned to use the Euro Power connector, the power ribbon by using BUS1 and BUS2(last pins of the 16pins IDC) called CV and GATE sometime but never used in fact.

    Best regards
    Bruno

  4. Hi,

    This is some update about the Core part of the project, I just finished to design it, artwork is not perfect but PCB and assembly are ready.

    large.1910_dipCoreF4_Euro_Assembly_Frontlarge.1910_dipCoreF4_Euro_Assembly-dim.p

    I achieve the size of 12 HP and a depth which doesn't exceed 45mm, overall with IDC connectors present at the back.
    I can reduce it to the previous 11 HP but result is less clean at the front and assembly is more complicated then it will be 12 HP.

    The features:

    • Euro Module 12 HP x 45mm.
    • 2 MIDI In/Out.
    • 2 independent USB, one Device, one Host.
    • Micro-SD Card.
    • Reset and User Button.
    • 2 leds.
    • Power switch, acts on both external and USB power. It is optional.
    • Automatic switching between the Power sources, EXT/USB. Priority to external first.
    • Can be connected to a regular Euro power connector (IDC16), regulation from 12V. Can use 5V from your skiff or provide it to the bus.

    'Regular' MIDIbox ports In the order:

    • J4, IIC A and B.
    • J5, internal ADC for 2 analogue Inputs.
    • J8/9, SPI 5V(SRIO).
    • J11(2xMIDI IO).
    • J15, displays(serial only, 2 CS lines).
    • J16E, SPI 3,3V, Reset and User buttons, 2 leds(.
    • J18. MCAN, Ready for CAN transceiver or 'One-Wire' CAN connection.
    • J19, SPI 5V.

     

    Some 3D render:

    large.1910_dipCoreF4_Euro_Assembly-3dfrolarge.1910_dipCoreF4_Euro_Assembly-3dbac
     

    The PCB, all SMD will be assembled by manufacturer. It can be used for small desktop project too.
    large.1910_dipCoreF4_Euro.png.cbc0a79993

     

    I designed this module for the HAARP but it can be used for other application, you can use it with the MIDIPHY Analog modules to create the perfect interface for your modular system.
    And you can create your own Surface Control and/or your hybrid analogue modules.

    Voilà
    Best regards

    Bruno

  5. 43 minutes ago, FantomXR said:

    So my question is: Is there a way to speed up that transfer rate? I googled a bit and found this on an arduino forum:
    https://forum.arduino.cc/index.php?topic=286837.0

    What is the solution that you retain from this?

    You can use bitmaps, one for each screen, first you write into it then you transfer the whole bitmap to the screen one by one( cs by cs) and maybe only the one which has changed using some flag, the problem with this is that you will use a some of the RAM, 128*64*9/8=9216 bytes(9K), maybe not bad depending on your app.

    Best regards
    Bruno
     

  6. Try also to desactive MIDI THRU in cubase midi settings...

    And if your midibox has regular MIDI and you own a midi interface try with it instead of USB directly.

    Note: if your're connected with usb there's no running status then Note Off must be received.
    Running status is only for regular midi connection(DIN) and MIOS studio marks the Note Off as "optimized" when it's the case.
     

  7. Anyway we will do a small debug test...
    For that you will need to recompile the MBNG app after modification...

    in mbng_file_c.c at line 812

    replace this:

        ////////////////////////////////////////////////////////////////////////////////////////////////
        } else if( strcasecmp(parameter, "nrpn") == 0 ) {
          int value;
    
          if( (value=get_dec(value_str)) < 0 || value >= 16384 ) {
    #if DEBUG_VERBOSE_LEVEL >= 1
    	DEBUG_MSG("[MBNG_FILE_C:%d] ERROR: invalid NRPN number in EVENT_%s ... %s=%s\n", line, event, parameter, value_str);
    #endif
    	return -1;
          } else {
    	if( item.flags.type != MBNG_EVENT_TYPE_NRPN ) {
    #if DEBUG_VERBOSE_LEVEL >= 1
    	  DEBUG_MSG("[MBNG_FILE_C:%d] WARNING: no NRPN number expected for EVENT_%s due to type: %s\n", line, event, MBNG_EVENT_ItemTypeStrGet(&item));
    #endif
    	} else {
    	  // no extra check if event_type already defined...
    	  stream[1] = value & 0xff;
    	  stream[2] = value >> 8;
    	  item.secondary_value = stream[1];
    	}
          }
    
        ////////////////////////////////////////////////////////////////////////////////////////////////


    by

        ////////////////////////////////////////////////////////////////////////////////////////////////
        } else if( strcasecmp(parameter, "nrpn") == 0 ) {
          int value;
    
          if( (value=get_dec(value_str)) < 0 || value >= 16384 ) {
    #if DEBUG_VERBOSE_LEVEL >= 1
    	DEBUG_MSG("[MBNG_FILE_C:%d] ERROR: invalid NRPN number in EVENT_%s ... %s=%s\n", line, event, parameter, value_str);
    #endif
    	return -1;
          } else {
    	if( item.flags.type != MBNG_EVENT_TYPE_NRPN ) {
    #if DEBUG_VERBOSE_LEVEL >= 1
    	  DEBUG_MSG("[MBNG_FILE_C:%d] WARNING: no NRPN number expected for EVENT_%s due to type: %s\n", line, event, MBNG_EVENT_ItemTypeStrGet(&item));
    #endif
    	} else {
    	  // no extra check if event_type already defined...
    	  stream[1] = value & 0x7f;
    	  stream[2] = value >> 7;
    	  item.secondary_value = stream[1];
    	}
          }
    
        ////////////////////////////////////////////////////////////////////////////////////////////////



    Cause !
    In this part of the parser there's something strange which is disturbing me at the end when the address is store in the item->stream we've got:

    	  // no extra check if event_type already defined...
    	  stream[1] = value & 0xff;
    	  stream[2] = value >> 8;
    	  item.secondary_value = stream[1];

    but in the MBNG_EVENT_TYPE_NRPN part of the MBNG_EVENT_ItemSend function we've got:

        u16 nrpn_address = item->stream[1] | ((u16)item->stream[2] << 7);

    if I make the calculation like it is I find exactly your problem:

    In parser
    stream[1] = 261 & 0xff = 5
    stream[2] = 261 >> 8 = 1

    then in MBNG_EVENT_ItemSend
    u16 nrpn_address = item->stream[1] | ((u16)item->stream[2] << 7) = 5 | (1<<7) = 133

    Address msb is not limited to 0 or 1, I think it's a masking and shifting error and bit 7 is lost, so make the test with

    	  // no extra check if event_type already defined...
    	  stream[1] = value & 0x7f;
    	  stream[2] = value >> 7;
    	  item.secondary_value = stream[1];

    Please

     

  8. Hi, you're welcome,

    If I was you I will read the DAC Application Note

    Then find some examples or a library to try with something basic...
    https://www.st.com/content/ccc/resource/technical/document/user_manual/59/2d/ab/ad/f8/29/49/d6/DM00023896.pdf/files/DM00023896.pdf/jcr:content/translations/en.DM00023896.pdf
    http://stm32f4-discovery.net/tag/dac/
    Then try to adapt it to my need...

    Note:

    • MIOS32 uses StdPeripheral Library and CMSIS located in Driver folder, no HAL
    • Take care about the DMA and Timer already used.

    Good luck!

    Best regards
    Bruno
     

×
×
  • Create New...