Antichambre

Programmer
  • Content count

    1,053
  • Joined

  • Last visited

Everything posted by Antichambre

  1. MBHP CORE V3 diagram

    http://ucapps.de/mbhp/mbhp_core_v3.pdf http://ucapps.de/mbhp_core.html ;)
  2. Hello, This is an introduction for my new baby, a really funny toy, the HAARP (yes I like conspiracy theory ;) It's a pure MIDIbox Project, just a dedicated CS and some coding. It works with any STM32F4 Core.   Why? Many synths have an integrated arpeggiator, the SH-101 is well known for that, but the available parameters are still limited. There is also some good plug-in I think especially of the Ableton live's one but it's software. So I designed an hardware one, "LIVE" oriented, starting from the @TK.'s arp example. No encoder(except for MENU section Data entry), all parameters are directly accessible and are potentiometers. The screen is a small color TFT with a resolution of 128x160(sorry for picture, colors are better in real). It's 8 independent voices. 8 banks of 8 Presets. Session are saved/loaded from the SD Card. The Arpeggio parameters are divided in 3 sections: First is the TIMING Section (Purple pots): On/Off button, HOLD Button, it holds or releases the Notes in the notestack. The MODE Pot, it's UP, DOWN, UP-DOWN and AS-PLAYED, fr the moment but I will implement more. The RATE, from slowest to fastest, from 4 Bar to 32nd with dotted and Triplet value. The RESYNC, it retriggers the arpeggio, values are the same as RATE parameter. The OFFSET, it will shift left or right the starting step(note). Is Note Stack and MODE dependent. The DELAY, it will delay the whole arpeggio within the step range(duration), is RATE dependent. The GATE, the length of the Note, max is STEP length, is RATE dependent. The SHUFFLE, it will delay all the odd steps, in the range of an half step, is RATE dependent. Second is the TRANSPOSITION Section (Yellow, Orange, Red): Simple Transposition On/Off (Yellow). Simple OCTave Transposition, +/- 10. Simple SEMItone Transposition, +/-12 Repeat On/Off. Repeat, LOOPS number, 1 to 8. Repeat, SHIFTing on each loop, +/-32 semitones. Force to Scale On/Off Force To Scale, SCALE, list is the same as the Force to Scale example from the repo. Force To Scale, ROOT from C to B semitone. Third is the VELOCITY Section. REGEN Pre/Post(Target process) button. REGEN, +/- 100% Target process On/Off. TIME, the time to reach the target value, in PRE initial value is the regenerated value. in POST initial value is the one stored in the Note Stack. TARGET is the targetted value, 0 to 127. RETRIG, if on the TIME is retriggered by the RESYNC parameter.   The main page of the screen represents an octave range, the note color changes depending on the octave, there's a Velocity section on the bottom, it's like a piano-roll. In the code, the arpeggio processing is ready, it remains me to complete the MENU section, I was waiting for the CS PCB to write it, now I can... ;)   This little guy is to much fun, so I can't keep it for me. Then i will propose it to you ASAP. and I hope it will help me to finance some other bigger projects I've got in my back-pocket ;) I will try to make it available in two format, I'm currently working on a PCB for USB host/device, sdCard MIDI etc.. which will fit for both version and will be reuse for other small toys like that. An Eurorack version for the patching addicts. I used a MCP3204(4 channels) instead of a MCP3208(8 channels) for the AINSER, it's an AINSER32. I use only 2 channels for the 16 pots(8Multiplexed lines * 2 channels), it remains 16 analog Inputs which are accessible to connect some CV In Modules, thanks to @Hawkeye for making me think about this. The SRIO Chain is available too, you can connect GATE In (DIN) easily. You will be able to connect the MIDIPHY CV/GATE Out Modules which will be available soon. @latigid on is working on it. MCAN will be available, for an internal MIDI bus within your Eurorack, I reuse the BUS1 and 2 from the Euro Power connector for that purpose.   A Desktop version, for MIDI purpose only(except if i find a way to add some CV/Gate without designing a too much big box).   Voilà! More information will be available soon. For the moment this is a small video I made, I seem a little febrile but it's because I continue to discover it every day.   I really love this little toy, it is very effective and musical, even in LIVE and if the Force To Scale is activated, there's no wrong note ;) Best regards Bruno  
  3. The HAARP, an Hardware Advanced Arpeggiator.

    Hello, Unfortunately, this project is again delayed, this time the reason is the corona virus :( I still wait for the boards... And I leave the country this night and during 6 weeks Grrrrrrr :/ But to cure your impatience here is final artwork for the desktop(midi only) version. Best regards Bruno
  4. HAARP desktop version

    From the album The HAARP

  5. C3 with diff vel. 2 diff. notes

    Events are read from midi file and scheduled by the seq_bpm(sequencer module) thru the seq.c file, sent to seq_midi_out(still sequencer module) and played from it. You can modify the private hook which is installed by SEQ_MIDI_OUT_Callback_MIDI_SendPackage_Set and called by the scheduler. This hook: ///////////////////////////////////////////////////////////////////////////// // this hook is called when the MIDI scheduler sends a package ///////////////////////////////////////////////////////////////////////////// static s32 Hook_MIDI_SendPackage(mios32_midi_port_t port, mios32_midi_package_t package) { // realtime events are already scheduled by MIDI_ROUTER_SendMIDIClockEvent() if( package.evnt0 >= 0xf8 ) { MIOS32_MIDI_SendPackage(port, package); } else { // forward to MIDIO if( seq_play_enable_dout ) MIDIO_DOUT_MIDI_NotifyPackage(port, package); // forward to enabled MIDI ports int i; u16 mask = 1; for(i=0; i<16; ++i, mask <<= 1) { if( seq_play_enabled_ports & mask ) { // USB0/1/2/3, UART0/1/2/3, IIC0/1/2/3, OSC0/1/2/3 mios32_midi_port_t port = USB0 + ((i&0xc) << 2) + (i&3); MIOS32_MIDI_SendPackage(port, package); } } } return 0; // no error } But it seems this app was prepared for that purpose, have a look to the lines especially: // forward to MIDIO if( seq_play_enable_dout ) MIDIO_DOUT_MIDI_NotifyPackage(port, package);  
  6. Hello, I've got a question! I was about to buy a small interface box for two of my effects. but when I saw the price I thought that there was probably not much in it and that I could have everything I needed to tinker with one. Someone has already opened one of these boxes? I suspect they have just put an optocoupler and distribute the logic level on the Jack outputs? And Empress call their one, midibox Thank you Bruno
  7. You're welcome! Have fun ;)
  8. Still page 14 -> "Note the special syntax to enter the MIOS32_PATH. The value “/c/mios32/trunk” means “c:\mios32\trunk” for Eclipse. "
  9. Hi, Check or add the correct path in environment: Page 14 in the pdf Best Bruno
  10. Sammich kits on eBay -- legit or bootleg?

    Copy! circuits are also not exactly the same ;) funny!
  11. Effect pedal, MIDI on a Jack.[SOLVED]

    Meris TRS is RX, TX + Ground. MIDI in input is RX + 5V. 5V is missing ;) But ok this is something you can try, at your own risk, I never tried it in this way... it should be the inverse of this one which is to connect a Meris pedal.    
  12. Effect pedal, MIDI on a Jack.[SOLVED]

    Hi, In your case, best is to keep the Meris I/O for the Meris Pedal only.  Meris I/O, Timeline and ventris should be connected directly to the MC6, using a MIDI thu box. Best regards Bruno
  13. Mackie HUI Schematics

    Hi, Service Manual schematic #1 schematic #2 Transformer is a 0-24-48V and can be found here: http://www.loudtechnologies.eu/shop/en/mackie-mcu-midi-controllers/hui/600-032-01/a-4082-10000210   Best regards Bruno
  14. midiphy Eurorack Expander Modules

    I noticed that isolating the earth on the PC / Mac power supply can sometimes help. Bruno
  15. The HAARP, an Hardware Advanced Arpeggiator.

    The manufacturing was delayed cause they gave me a wrong bank account number, money was lost in the financial circuits during 6 weeks. But good news money is back on my account this morning!!! :) The project resumes...
  16. MIDI over Bluetooth with ESP32

    Or prepare the ESP32 as a SPI-MIDI slave like a kissbox?
  17. Merry Christmas and Happy New Year to all !!!    
  18. understanding the .ngc code

    This has to be done in the bootloader not in the app. upload the right hex file from http://ucapps.de/mios32/mios32_bootloader_v1_018.zip then set your lcd_type then re-upload your app. Have fun ! Bruno  
  19. More AINSER Problems

    I'm surprised cause I did it for the HAARP and use a 4 channel ADC to reduce the cost. But I use it on the regular J19. Channels are reversed like you. I don't use the AINSER64 module and add/rewrite a simplified/dedicated copy in the app folder. I made some changes to reduce the scanning and make it faster. The CS uses only 16 inputs, the 16 others are for a future extension like CV in. And it works for me. s32 ARP_AIN_POT_Handler(void (*_callback)(u32 pot, u32 value)) { // the mux_ctr -> pin mappin is layout dependend const u8 mux_pin_map[8] = {0, 1, 2, 3, 4, 5, 6, 7}; static u8 mux_ctr = 0; // will be incremented on each update to select the next AIN pin static u8 first_scan_done = 0; static u16 link_status_ctr = 0; s32 status = 0; // init SPI port for fast frequency access // we will do this here, so that other handlers (e.g. AOUT) could use SPI in different modes // Maxmimum allowed SCLK is 2 MHz according to datasheet // We select prescaler 64 @120 MHz (-> ca. 500 nS period) status |= MIOS32_SPI_TransferModeInit(ARP_AIN_SPI, MIOS32_SPI_MODE_CLK0_PHASE0, MIOS32_SPI_PRESCALER_64); // determine next MUX selection int next_mux_ctr = (mux_ctr + 1) % 8; // loop over channels int chn; for(chn=0; chn<2; ++chn) { // CS=0 status |= MIOS32_SPI_RC_PinSet(ARP_AIN_SPI, ARP_AIN_SPI_RC_PIN, 0); // retrieve conversion values // shift in start bit + SGL + MSB of channel selection, shift out dummy byte MIOS32_SPI_TransferByte(ARP_AIN_SPI, 0x06 | (chn>>2)); // shift in remaining 2 bits of channel selection, shift out MSBs of conversion value u8 b1 = MIOS32_SPI_TransferByte(ARP_AIN_SPI, chn << 6); // shift in mux_ctr + "Link LED" status to 74HC595, shift out LSBs of conversion value //u8 b2 = MIOS32_SPI_TransferByte(ARP_AIN_SPI, ((chn == (ARP_AIN_NUM_CHANNELS-1) ? next_mux_ctr : mux_ctr) << 5) | link_status); u8 b2 = MIOS32_SPI_TransferByte(ARP_AIN_SPI, (chn == 1 ? next_mux_ctr : mux_ctr) << 5); // CS=1 (the rising edge will update the 74HC595) MIOS32_SPI_RC_PinSet(ARP_AIN_SPI, ARP_AIN_SPI_RC_PIN, 1); // store conversion value if difference to old value is outside the deadband u16 pot = mux_pin_map[mux_ctr] + 8*chn; // the mux/chn -> pin mapping is layout dependend u16 value = (b2 | (b1 << 8)) & 0xfff; previous_arp_ain_pot_values = arp_ain_pot_values[pot]; int diff = value - previous_arp_ain_pot_values; int abs_diff = (diff > 0 ) ? diff : -diff; if( !first_scan_done || abs_diff > ARP_AIN_POT_DEADBAND ) { arp_ain_pot_values[pot] = value; // notify callback function // check pin number as well... just to ensure if( first_scan_done && _callback && pot < 16 ) _callback(pot, value); } } // select MUX input mux_ctr = next_mux_ctr; // one complete scan done? if( next_mux_ctr == 0 ) first_scan_done = 1; return 0; // no error } For your layout: You can change the MUXes mapping here: // the mux_ctr -> pin mappin is layout dependend //const u8 mux_pin_map[8] = {0, 1, 2, 3, 4, 5, 6, 7 }; //const u8 mux_pin_map[8] = {1, 4, 3, 5, 2, 7, 0, 6 }; // reversed pins const u8 mux_pin_map[8] = {6, 3, 4, 2, 5, 0, 7, 1 }; // order of MUX channels You can reduce the channels: for(chn=0; chn<3; ++chn) { u8 b2 = MIOS32_SPI_TransferByte(AINSER_SPI, ((chn == 2 ? next_mux_ctr : mux_ctr) << 5) | link_status); And limits the number of inputs by security:   if( first_scan_done && _callback && pin < 24 )  
  20. More AINSER Problems

    Ahah! Clever!
  21. More AINSER Problems

    No, this is not the issue. Did you try the tutorial 012b? To test your AIN module alone. Best, Bruno  
  22. More AINSER Problems

    So you've got a custom AINSER64 with 3 MUX only and you use only 3 channels of the ADC. Your issue is very strange. It can't be inhibit pin issue cause inhibit switches off all multiplexed inputs. It can't be the ADC cause you receive something from third channel. ABC lines are the same for all MUX, so there's no short-circuit, cause only one MUX doesn't work. Just in case, is there continuity between all "A" pins, "B" and "C" of the MUXes? But I'm pretty sure you already checked it. It's not a faulty MUX cause you swapped them. Hummm... When you say: Does it means the AIN hook is called 8 times when the only working knob is moved?  
  23. midiphy SEQ v4+

    Wood Side Story. ;)   Tomorrow is sanding time...
  24. LoopA Pro Metal Case

    Magnifique!
  25. midiphy SEQ v4+

    I already have 5 pairs to make and this last call ! ;)  Closed ! Best Bruno