Zam

Members
  • Content count

    554
  • Joined

  • Last visited

Everything posted by Zam

  1. LPCXpresso ide

    Hello Welcome here ! Any reason to use LPC17 over STM32F4 for your project ? Best Zam
  2. AINSER deadband configuration?

    Hi Chris   You get full range because it is given by  Vref ! If Vref=3.3V you get max value when AD input is at 3.3V Definitely thinking your led draw enough current to cheat your 0V. Is the jitter only at the instant you switch led or change color, or it  jitter stay as soon as you have led ON ? Again, check for strong as possible GND path from LED pcb to PSU, as AINSER pcb to psu.   Do you have pcb design of your new layout?   Best Zam    
  3. AINSER deadband configuration?

    Hi Check also for the LM317L, I don't remember if it have the same spec regarding min Vin against Vout For local regulation, yes, only Vref (and fader/pot +side), chips supply can stay at +5V logical/digital (VDD). 10ohm no longer needed, but you have to take care that Vref don't exceed VDD, or you won't have full scale definition. If you expect voltage drop at VDD, set Vref regulator to be little below worst VDD drop case (all LED on). Best Zam
  4. AINSER deadband configuration?

    Hey Chris What is the amount of your voltage drop? one LED on, all LED on, at PSU terminal, PCB power input, somewhere far from PSU, opposite end of 5v trace How is the jitter threshold now, 8bit 9bit 10bit ? Also current "call" from LED can momentary "move" your GND What you have to measure is voltage change between two GND point -AIN 0V pin across common PSU GND -AIN 0V pin across fader 0V pin Also your 5V rail -AIN Vref across fader Vref   More generally, try to look how the same trace/signal move within different place, especially long trace. It should give you a clue where instability is. Is the 5V dropping, is the 0V momentary loading a little, etc...   Another test because, it could be low cost fader limitation, use two 5k series resistor (or any sum around 10k) in place of fader, "wiper" (at two resistance junction) is now hardly fixed, half Vref voltage (if 2x5k), and check if consistency at this AIN pin is better or not   If you really need to keep only one PSU, maybe go for a 9 or 12v, and use different onboard regulation for each section, analog and digital, Like LM317 (should run 5V with 9V input) or LM317L for AIN Vref (low current here) I was tempted to tell you to just add a 317L from 5V to AIN Vref, but you have to check minimum voltage and minimum IO differential at data sheet, If you end over 3V but super stable it can make the trick... it depend of the noise around   Hope it help Best Zam  
  5. [FS] All my Gear, Faders, Knobs, just ask

    Hey Novski That's what I understand too. Do we still see you around ? you just shift interest to go further with your controller design or you shift whole interest ? I'm short at the moment but if I can in the few next week/month I pay you back to have my PCB returned, as 8 or 16 RSAOK fader with coreless motor Best Zam
  6. Hey Long time I don't look at this, but I'm somehow forced to make the moving fader system natively compatible with protool (HUI only...) I ended today with modification at mbng_event.c alowing NRPN event to handle the dual CC (not in NRPN format) and it work both way, sending end receiving fader data to/from DAW As I'm far from good programmer and C expert here is what I do, input and comment welcome about method I use to achieve this, in case it was completely bad strategy. to send: ///////////////////////////////////////////////////////////////////////////// //! Sends a NRPN event. Skips address bytes if they already have been sent! ///////////////////////////////////////////////////////////////////////////// s32 MBNG_EVENT_SendOptimizedNRPN(mios32_midi_port_t port, mios32_midi_chn_t chn, u16 nrpn_address, u16 nrpn_value, u8 msb_only) { u8 nrpn_address_msb = (nrpn_address >> 7) & 0x7f; u8 nrpn_address_lsb = (nrpn_address >> 0) & 0x7f; u8 nrpn_value_msb = (nrpn_value >> 7) & 0x7f; u8 nrpn_value_lsb = (nrpn_value >> 0) & 0x7f; // create MIDI package mios32_midi_package_t p; p.ALL = 0; p.type = CC; p.event = CC; p.chn = chn; // quick&dirty #if MBNG_EVENT_NRPN_SEND_PORTS_MASK != 0x00f0 # error "Please adapt MBNG_EVENT_SendOptimizedNRPN!" #endif #if MBNG_EVENT_NRPN_SEND_PORTS_OFFSET != 4 # error "Please adapt MBNG_EVENT_SendOptimizedNRPN!" #endif // NRPN special handling for HUI fader data // FADER 1 if( nrpn_address == 0 ) { p.cc_number = 0x00; // Data MSB p.value = nrpn_value_msb; MIOS32_MIDI_SendPackage(port, p); p.cc_number = 0x20; // Data LSB p.value = nrpn_value_lsb; MIOS32_MIDI_SendPackage(port, p); } // FADER 2 if( nrpn_address == 1 ) { p.cc_number = 0x01; // Data MSB p.value = nrpn_value_msb; MIOS32_MIDI_SendPackage(port, p); p.cc_number = 0x21; // Data LSB p.value = nrpn_value_lsb; MIOS32_MIDI_SendPackage(port, p); } // FADER 3 if( nrpn_address == 2 ) { p.cc_number = 0x02; // Data MSB p.value = nrpn_value_msb; MIOS32_MIDI_SendPackage(port, p); p.cc_number = 0x22; // Data LSB p.value = nrpn_value_lsb; MIOS32_MIDI_SendPackage(port, p); } // FADER 4 if( nrpn_address == 3 ) { p.cc_number = 0x03; // Data MSB p.value = nrpn_value_msb; MIOS32_MIDI_SendPackage(port, p); p.cc_number = 0x23; // Data LSB p.value = nrpn_value_lsb; MIOS32_MIDI_SendPackage(port, p); } // FADER 5 if( nrpn_address == 4 ) { p.cc_number = 0x04; // Data MSB p.value = nrpn_value_msb; MIOS32_MIDI_SendPackage(port, p); p.cc_number = 0x24; // Data LSB p.value = nrpn_value_lsb; MIOS32_MIDI_SendPackage(port, p); } // FADER 6 if( nrpn_address == 5 ) { p.cc_number = 0x05; // Data MSB p.value = nrpn_value_msb; MIOS32_MIDI_SendPackage(port, p); p.cc_number = 0x25; // Data LSB p.value = nrpn_value_lsb; MIOS32_MIDI_SendPackage(port, p); } // FADER 7 if( nrpn_address == 6 ) { p.cc_number = 0x06; // Data MSB p.value = nrpn_value_msb; MIOS32_MIDI_SendPackage(port, p); p.cc_number = 0x26; // Data LSB p.value = nrpn_value_lsb; MIOS32_MIDI_SendPackage(port, p); } // FADER 8 if( nrpn_address == 7 ) { p.cc_number = 0x07; // Data MSB p.value = nrpn_value_msb; MIOS32_MIDI_SendPackage(port, p); p.cc_number = 0x27; // Data LSB p.value = nrpn_value_lsb; MIOS32_MIDI_SendPackage(port, p); } return 0; // no error } to receive: // track NRPN event if( port_mask & MBNG_EVENT_NRPN_RECEIVE_PORTS_MASK ) { int port_ix = (port_class | (port & 3)) - MBNG_EVENT_NRPN_RECEIVE_PORTS_OFFSET; if( port_ix >= 0 && port_ix < MBNG_EVENT_NRPN_RECEIVE_PORTS ) { // NRPN special handling for HUI fader data switch( midi_package.cc_number ) { case 0x00: { // Address MSB FADER 1 nrpn_received_value[port_ix][midi_package.chn] &= ~0x3f80; nrpn_received_value[port_ix][midi_package.chn] |= ((midi_package.value << 7) & 0x3f80); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 0; nrpn_msb_only = 1; // for the MsbOnly format #if 0 // MEMO: it's better to update only when LSB has been received if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed midi_learn_nrpn_valid |= 0x04; } #endif } break; case 0x20: { // Address LSB nrpn_received_value[port_ix][midi_package.chn] &= ~0x007f; nrpn_received_value[port_ix][midi_package.chn] |= (midi_package.value & 0x007f); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 0; if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed // use same valid flag like Data MSB (complete NRPN is valid with 0x07) midi_learn_nrpn_valid |= 0x04; } } break; case 0x01: { // Address MSB FADER 2 nrpn_received_value[port_ix][midi_package.chn] &= ~0x3f80; nrpn_received_value[port_ix][midi_package.chn] |= ((midi_package.value << 7) & 0x3f80); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 1; nrpn_msb_only = 1; // for the MsbOnly format #if 0 // MEMO: it's better to update only when LSB has been received if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed midi_learn_nrpn_valid |= 0x04; } #endif } break; case 0x21: { // Address LSB nrpn_received_value[port_ix][midi_package.chn] &= ~0x007f; nrpn_received_value[port_ix][midi_package.chn] |= (midi_package.value & 0x007f); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 1; if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed // use same valid flag like Data MSB (complete NRPN is valid with 0x07) midi_learn_nrpn_valid |= 0x04; } } break; case 0x02: { // Address MSB FADER 3 nrpn_received_value[port_ix][midi_package.chn] &= ~0x3f80; nrpn_received_value[port_ix][midi_package.chn] |= ((midi_package.value << 7) & 0x3f80); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 2; nrpn_msb_only = 1; // for the MsbOnly format #if 0 // MEMO: it's better to update only when LSB has been received if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed midi_learn_nrpn_valid |= 0x04; } #endif } break; case 0x22: { // Address LSB nrpn_received_value[port_ix][midi_package.chn] &= ~0x007f; nrpn_received_value[port_ix][midi_package.chn] |= (midi_package.value & 0x007f); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 2; if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed // use same valid flag like Data MSB (complete NRPN is valid with 0x07) midi_learn_nrpn_valid |= 0x04; } } break; case 0x03: { // Address MSB FADER 4 nrpn_received_value[port_ix][midi_package.chn] &= ~0x3f80; nrpn_received_value[port_ix][midi_package.chn] |= ((midi_package.value << 7) & 0x3f80); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 3; nrpn_msb_only = 1; // for the MsbOnly format #if 0 // MEMO: it's better to update only when LSB has been received if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed midi_learn_nrpn_valid |= 0x04; } #endif } break; case 0x23: { // Address LSB nrpn_received_value[port_ix][midi_package.chn] &= ~0x007f; nrpn_received_value[port_ix][midi_package.chn] |= (midi_package.value & 0x007f); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 3; if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed // use same valid flag like Data MSB (complete NRPN is valid with 0x07) midi_learn_nrpn_valid |= 0x04; } } break; case 0x04: { // Address MSB FADER 5 nrpn_received_value[port_ix][midi_package.chn] &= ~0x3f80; nrpn_received_value[port_ix][midi_package.chn] |= ((midi_package.value << 7) & 0x3f80); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 4; nrpn_msb_only = 1; // for the MsbOnly format #if 0 // MEMO: it's better to update only when LSB has been received if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed midi_learn_nrpn_valid |= 0x04; } #endif } break; case 0x24: { // Address LSB nrpn_received_value[port_ix][midi_package.chn] &= ~0x007f; nrpn_received_value[port_ix][midi_package.chn] |= (midi_package.value & 0x007f); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 4; if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed // use same valid flag like Data MSB (complete NRPN is valid with 0x07) midi_learn_nrpn_valid |= 0x04; } } break; case 0x05: { // Address MSB FADER 6 nrpn_received_value[port_ix][midi_package.chn] &= ~0x3f80; nrpn_received_value[port_ix][midi_package.chn] |= ((midi_package.value << 7) & 0x3f80); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 5; nrpn_msb_only = 1; // for the MsbOnly format #if 0 // MEMO: it's better to update only when LSB has been received if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed midi_learn_nrpn_valid |= 0x04; } #endif } break; case 0x25: { // Address LSB nrpn_received_value[port_ix][midi_package.chn] &= ~0x007f; nrpn_received_value[port_ix][midi_package.chn] |= (midi_package.value & 0x007f); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 5; if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed // use same valid flag like Data MSB (complete NRPN is valid with 0x07) midi_learn_nrpn_valid |= 0x04; } } break; case 0x06: { // Address MSB FADER 7 nrpn_received_value[port_ix][midi_package.chn] &= ~0x3f80; nrpn_received_value[port_ix][midi_package.chn] |= ((midi_package.value << 7) & 0x3f80); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 6; nrpn_msb_only = 1; // for the MsbOnly format #if 0 // MEMO: it's better to update only when LSB has been received if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed midi_learn_nrpn_valid |= 0x04; } #endif } break; case 0x26: { // Address LSB nrpn_received_value[port_ix][midi_package.chn] &= ~0x007f; nrpn_received_value[port_ix][midi_package.chn] |= (midi_package.value & 0x007f); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 6; if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed // use same valid flag like Data MSB (complete NRPN is valid with 0x07) midi_learn_nrpn_valid |= 0x04; } } break; case 0x07: { // Address MSB FADER 8 nrpn_received_value[port_ix][midi_package.chn] &= ~0x3f80; nrpn_received_value[port_ix][midi_package.chn] |= ((midi_package.value << 7) & 0x3f80); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 7; nrpn_msb_only = 1; // for the MsbOnly format #if 0 // MEMO: it's better to update only when LSB has been received if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed midi_learn_nrpn_valid |= 0x04; } #endif } break; case 0x27: { // Address LSB nrpn_received_value[port_ix][midi_package.chn] &= ~0x007f; nrpn_received_value[port_ix][midi_package.chn] |= (midi_package.value & 0x007f); nrpn_value = nrpn_received_value[port_ix][midi_package.chn]; // pass to parser nrpn_address = 7; if( port != midi_learn_nrpn_port || midi_package.chn != (midi_learn_nrpn_chn-1) ) { midi_learn_nrpn_port = port; midi_learn_nrpn_chn = midi_package.chn + 1; midi_learn_nrpn_valid = 0; } else { // only if valid address has been parsed // use same valid flag like Data MSB (complete NRPN is valid with 0x07) midi_learn_nrpn_valid |= 0x04; } } break; } } } Best Zam
  7. Hello   I'm playing with my midobox_NG system, which is a moving fader prototype. I'm able to set up a fine .NGC file over mackie control protocol. This protocol use PB as fader data. But I want to try a .NGC configuration to be HUI compatible, I just don't know how to manage the fader movement data HUI use two CC in a 9 bit configuration. First (say CC1) in the 0-127 range. Second (say CC2) in 4 step range 0,32,64,96. Ending in a 128*4 value, 9bit. How can I listen to this and convert them to a single data (PB? nrpn?) that I can use for AIN and AOUT event. I read and read ngc configuration user manual and also search at the forum but find nothing, maybe I'm just missing something? Best Zam
  8. Hi all Updated first post about HUI protocol for Protools ready So far so good I'll update soon Best Zam
  9. MIDIbox NG Release + Feedback

    IIRC it's the same command as NGR:  type=meta  meta=LOAD<setup> ??? also I remember the function was deleted, then implemented again, not sure the downloadable NG1.035 have it, you may probably build 1.036 from the source. LOAD will load a "full" config NGC + NGR etc, if you just need to change .NGC you have to duplicate your NGR and just change the name according to both config Best Zam
  10. MIDIbox NG Release + Feedback

    Hey Fantom Don't know about Norbim usecase. In my case it was to select a config at start up, before all buttons get busy for other task. Your option need a spare/unused button or a conditional flow by hitting two buttons. Anyway, it's not a critical function for me any more Best Zam
  11. Waveshare Core

    Hello Andy Interesting !!! I come back later with questions :) Best Zam
  12. SEQ v4 CS PCB clone

    Man.... for sure it hurt   I don't get the way this discussion go so far. Please fellas, just stop complain and criticism. OPEN YOUR EYES a look at what you have access for FREEEEEEE here. And for all things not "open" or not "yet, at the second" available, it's just a matter of YOUR work if you want it to happen.   Best Zam
  13. SEQ v4 CS PCB clone

    Hello   Theoretically, but what can do a small community or a lone designer if stolen, law pursuit is not free... Then you have to technically prove it and have access to the pcb using the stolen (hardware) design. All around Midibox and other great DIY community not many complex PCB manufacturing files are available, it's a good practice, and in fact the safer solution to protect things. Still the concept, shemo, build threads and many info OPEN to anyone.   I'm always sceptical when discussions complain about what is not available when you'll find hundreds pages of info and ready to use design concept. In french we say "the butter, the money of the butter, and the ass of the farmer..." if the translation make sense   Now TK is clear here, the PCB designer is free to release the manufacturing files..., he just ask a restricted proto run to ensur, everting is fine, it's just some respect to potential builder for less issue possible, as respect to all the community which will take time help to troubleshoot... At my side I take more than two years and thousands bucks designing a tool around midibox system, then more than 6 month crash test before a release (without manufacturing files) so I completely understand Wilba and Tim and all other spending so much time to make things possible.   @TK. nice to see you again around the forum, summer holiday ?   Best Zam
  14. After boot MIDIbox sends weird informations

    Hello Any app launched at macbook startup ? like audio/midi sequencer, DAW, or any midi driver/remote software, possibly sending midi data for initialisation on a studio setup that might confuse your midibox hardware configuration ? Best Zam
  15. OUTB Stuck and Midi Protocol Timeout

    Ok, it's a special feature for the SEQ only Thanks for info. Best Zam  
  16. AINSER deadband configuration?

    You'r welcome Chris Keep us informed of your progress Best Zam
  17. OUTB Stuck and Midi Protocol Timeout

    Hello   There is a CPU monitor at MIOS for STM32F4 ??? Sorry for the off topic. Best Zam    
  18. AINSER deadband configuration?

    Hello Chris Ok it's not the 2m ribbon I see with 288 leds ! I think you already spot the problem so yes the answer is your led and AIN don't like to be close together. I'm not used to this color LEDs but they use PWM to acheave 20% power and color change right ? PWM can introduce noise which can also be the reason you notice jitter, in conjunction with voltage drop if there is any ? Can't say about PSU choice, you have to measure current and pick one accordingly By the way, what for the 19V rail is? because you can maybe use this on to add a small regulator (like LM317L) for the critical AIN and slider Vref My first test will be to locally separate AINSER circuit and LED circuit, not sharing VDD/VSS locally, but only at PSU terminal in the manner of star power distribution, if your design allow it. Sense detection, is a sense input that some PSU have to attach at the load, tracking voltage at that point, an maintain it. Best Zam    
  19. AINSER deadband configuration?

    Hey Chris Ok, that make sense, good you find the issue I just have a look at this led ribbon. 288 leds... 20mA/led it's close to 6A all ON and 300mA idle. Your 7bit jitter represent more than 50mV which is not a surprise then To handle this without voltage drop you need a very strong PSU at 5V rail, with sens detection... Keep in mind that 11bit with 5V ref represent 2.5mV per step, if you have ripple/Vdrop bigger than that you will have problems Try to use (if your design can handle it) two separate rail/psu, one for "power" and one for "precision" circuit. Also local regulation can be an option. Best Zam
  20. AINSER deadband configuration?

    Hello As AINSER64 is a multiplexed solution to one AIN mcp3208 I don't think it is possible. Just set the device at 11bit (max if possible regarding jitter), then your event_ainser definition will take care of the effective bit depth you specify here. I don't see the reason/use case you need to scale this at chips ? Best Zam
  21. AINSER deadband configuration?

    Hey Chris I have no idea about this. But at MB_NG if your event definition is à 7bit one (note or cc) the Ain data is scaled accordingly. If that's the question you ask ? Best Zam
  22. Buttons working as Encoder

    Hello and welcome here Don't know yet what will be the best strategy , I see two options for now. At NGC with "emu_enc_hw", or with a script at NGR (meta=runsection @ NGC) with basic incremental(decremental) math Best Zam
  23. Send delayed midi message?

    Hello You should be able to delay anything using .NGR with delay_ms 3000 Best Zam
  24. AINSER deadband configuration?

    Hello Chris   I have a quick look at your pcb few things in mind: -J1 and J2 only use one wire (ribbon) for 5v and 0v, ribbon is very thin wire... you can expect voltage drop/change/instability anytime you have small load change. Try cut the ribbon at 0 and 5v and replace with 0.25 or 0.5 mm2 wire (direct soldering at connector pin for test) -what side is your ground plane ? -Did all fader have same jitter or position in the PCB have impact ? -IIRC unused 4051 pin are better clamped to ground !   Best Zam