FantomXR

Members
  • Content count

    940
  • Joined

  • Last visited

Everything posted by FantomXR

  1. MidiBox DAW Controller

    I'd strongly recommend to not use "normal" LEDs. It's much easier to use WS2812 RGB LEDs. Only one single data-line needed instead of 11 (in your case). And routing LED-matrix on a PCB is cumbersome....  Apart from that I can not answer your question...
  2. MidiBox DAW Controller

    MB_NG supports up to 64 OLEDs from just one core ;-)
  3. Out-of-stock parts for midiphy BOM tool

    It's actually 50€. @otropomhow much do you need of each? I need something from mouser as well and maybe it makes sense to combine both orders...
  4. Chain MIDIboxes

    Hey people, I have a keyboard that has two MIDIbox cores build in. It's because I use one running MB_KB for highspeed-keyboard scanning and the other one running NG for the controllers. So I'd like to ask if there is a way to chain those MIDIboxes without using a MIDI OUT -> IN - chain!  Thanks, Chris
  5. Chain MIDIboxes

    It's just one line of code in the firmware. So you have to compile the firmware by yourself.  Please note that both devices need to be powered from the same power source. 
  6. Adding CS-line to AINSER8

    Thank you very much! I'll give it a try. 
  7. Adding CS-line to AINSER8

    Hey people, I'd like to add one or two chip-selects for the AINSER8. I've already made a few changes to the firmware but it's not working yet. Under modules I've edited the ainser.c:   { switch( module ) { case 0: return MIOS32_SPI_RC_PinSet(AINSER_SPI, AINSER_SPI_RC_PIN_MODULE1, value); // spi, rc_pin, pin_value case 1: return MIOS32_SPI_RC_PinSet(AINSER_SPI, AINSER_SPI_RC_PIN_MODULE2, value); // spi, rc_pin, pin_value case 2: return MIOS32_SPI_RC_PinSet(AINSER_SPI, AINSER_SPI_RC_PIN_MODULE3, value); // spi, rc_pin, pin_value #if AINSER_NUM_MODULES > 3 # error "CS Line for more than 2 modules not prepared yet - please enhance here!" #endif } and ainser.h: // Which RC pin of the SPI port should be used for the third module // allowed values: 0 or 1 for SPI0 (J16:RC1, J16:RC2), 0 for SPI1 (J8/9:RC), 0 or 1 for SPI2 (J19:RC1, J19:RC2) #ifndef AINSER_SPI_RC_PIN_MODULE3 #define AINSER_SPI_RC_PIN_MODULE3 2 #endif and mios32_spi,h   #define MIOS32_SPI2_RCLK1_PORT GPIOA // RC1 #define MIOS32_SPI2_RCLK1_PIN GPIO_Pin_15 #define MIOS32_SPI2_RCLK1_AF { GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_SPI3); } // only relevant for slave mode #define MIOS32_SPI2_RCLK2_PORT GPIOB // RC2 #define MIOS32_SPI2_RCLK2_PIN GPIO_Pin_8 #define MIOS32_SPI2_RCLK2_AF { } #define MIOS32_SPI2_RCLK3_PORT GPIOC // RC3 #define MIOS32_SPI2_RCLK3_PIN GPIO_Pin_1 #define MIOS32_SPI2_RCLK3_AF { } #else MIOS32_SPI2_RCLK1_AF; MIOS32_SPI2_RCLK2_AF; MIOS32_SPI2_RCLK3_AF; MIOS32_SPI2_SCLK_AF; MIOS32_SPI2_MISO_AF; MIOS32_SPI2_MOSI_AF; if( slave ) { // SCLK and DOUT are inputs assigned to alternate functions GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_SCLK_PIN; GPIO_Init(MIOS32_SPI2_SCLK_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_MOSI_PIN; GPIO_Init(MIOS32_SPI2_MOSI_PORT, &GPIO_InitStructure); // RCLK (resp. CS) are configured as inputs as well GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_RCLK1_PIN; GPIO_Init(MIOS32_SPI2_RCLK1_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_RCLK2_PIN; GPIO_Init(MIOS32_SPI2_RCLK2_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_RCLK3_PIN; GPIO_Init(MIOS32_SPI2_RCLK3_PORT, &GPIO_InitStructure); // DOUT is output assigned to alternate function GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_MISO_PIN; GPIO_Init(MIOS32_SPI2_MISO_PORT, &GPIO_InitStructure); } else { // SCLK and DIN are inputs GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_SCLK_PIN; GPIO_Init(MIOS32_SPI2_SCLK_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_MOSI_PIN; GPIO_Init(MIOS32_SPI2_MOSI_PORT, &GPIO_InitStructure); // RCLK (resp. CS) are configured as inputs as well GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_RCLK1_PIN; GPIO_Init(MIOS32_SPI2_RCLK1_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_RCLK2_PIN; GPIO_Init(MIOS32_SPI2_RCLK2_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_RCLK3_PIN; GPIO_Init(MIOS32_SPI2_RCLK3_PORT, &GPIO_InitStructure); // DIN is input with pull-up GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Pin = MIOS32_SPI2_MISO_PIN; GPIO_Init(MIOS32_SPI2_MISO_PORT, &GPIO_InitStructure); } #else switch( rc_pin ) { case 0: MIOS32_SYS_STM_PINSET(MIOS32_SPI2_RCLK1_PORT, MIOS32_SPI2_RCLK1_PIN, pin_value); break; case 1: MIOS32_SYS_STM_PINSET(MIOS32_SPI2_RCLK2_PORT, MIOS32_SPI2_RCLK2_PIN, pin_value); break; case 2: MIOS32_SYS_STM_PINSET(MIOS32_SPI2_RCLK3_PORT, MIOS32_SPI2_RCLK3_PIN, pin_value); break; default: return -4; // unsupported RC pin } break; #endif In the NGC I have: AINSER n=1 enabled=1 cs=2 num_pins=1 and nothing happens. Which part do I overlook for adding a CS? Thanks! Chris
  8. Why does the HC165 even work?

    I did some tests with this. I connected a DIO-Board to my keyboard and the DIO-board to the core with jumper wire => no HCT541. I powered the DIO with 3V3 from the DISCO-Board. The result: It's running fine. No issues. I checked the clock with my oscilloscope. It looks very clean. Also no issues here.  So, I think I'll leave away the HCT541 for my applications and run everything from 3V3.  //edit: I've connected an encoder to the DIO-board. Works also fine.
  9. Hey people, I try to understand how the DIN is even working in the STM32F4-Core.  PB14 is not going through the HCT541 buffer. It goes directly into the IC. If I understood it correctly the purpose of the HCT541 is to do a level-amplification. It takes the level from the STMs outputs (which is 3.3V - 0.4V for HIGH for CMOS or 2.4V or TTL) and amplifies them. As the HC165 and HC595 are powered from +5V they need 3.15V to see a HIGH-signal. As the HCT541 delivers 4.5V for HIGH the HC595 does of perfectly work. But why do the HC165 even work? As I said it doesn't get an amplification. So in theory the HC165 sees 2.9V for HIGH but that's not enough so it should stay LOW and doesn't work. But it does... Can someone explain this behavior? Thanks, Chris
  10. Adding CS-line to AINSER8

    Dear TK, I undo all changes and added the lines as you suggested. Unfortunately I can not get it working. I edited the ainser.h like this: s32 AINSER_Init(u32 mode) { MIOS32_BOARD_J10_PinInit(0, MIOS32_BOARD_PIN_MODE_OUTPUT_PP); s32 status = 0; int module, pin; // currently only mode 0 supported if( mode != 0 ) return -1; // unsupported mode #if AINSER_SPI_OUTPUTS_OD // pins in open drain mode (to pull-up the outputs to 5V) status |= MIOS32_SPI_IO_Init(AINSER_SPI, MIOS32_SPI_PIN_DRIVER_STRONG_OD); #else // pins in push-poll mode (3.3V output voltage) status |= MIOS32_SPI_IO_Init(AINSER_SPI, MIOS32_SPI_PIN_DRIVER_STRONG); #endif // SPI Port will be initialized in AINSER_Update() num_used_modules = AINSER_NUM_MODULES; #if AINSER_NUM_MODULES > 8 # error "If more than 8 AINSER_NUM_MODULES should be supported, the ainser_enable_mask variable type has to be changed from u8 to u16 (up to 16) or u32 (up to 32)" #endif #if AINSER_NUM_MODULES > 8 # error "If more than 8 AINSER_NUM_MODULES should be supported, the ainser_muxed_mask variable type has to be changed from u8 to u16 (up to 16) or u32 (up to 32)" #endif for(module=0; module<AINSER_NUM_MODULES; ++module) { num_used_pins[module] = AINSER_NUM_PINS; // ensure that CS is deactivated AINSER_SetCs(module, 1); AINSER_EnabledSet(module, 1); AINSER_MuxedSet(module, 1); AINSER_NumPinsSet(module, AINSER_NUM_PINS); AINSER_DeadbandSet(module, MIOS32_AIN_DEADBAND); // clear all values for(pin=0; pin<AINSER_NUM_PINS; ++pin) { ain_pin_values[module][pin] = 0; } previous_ain_pin_value = 0; } return status; } [] static s32 AINSER_SetCs(u8 module, u8 value) { switch( module ) { case 0: return MIOS32_SPI_RC_PinSet(AINSER_SPI, AINSER_SPI_RC_PIN_MODULE1, value); // spi, rc_pin, pin_value case 1: return MIOS32_SPI_RC_PinSet(AINSER_SPI, AINSER_SPI_RC_PIN_MODULE2, value); // spi, rc_pin, pin_value case 2: return MIOS32_BOARD_J10_PinSet(0, value); #if AINSER_NUM_MODULES > 3 # error "CS Line for more than 2 modules not prepared yet - please enhance here!" #endif } But when I now connect the Chipselect to PE8, which is D0 on J10A, nothing happens. Any idea? Thanks, Chris
  11. Adding CS-line to AINSER8

    Thanks for chiming in!  Is it really so easy? :-) Thanks! I'll try it!!
  12. what would your perfect control surface look like and do?

    I've made it already :-) 9x Encoders + 1 Potentiometer for master-volume 9x OLEDs 9x Faders 3x9 Button-rows 9x RGBLED-bars next to the faders 9x RGBLED underneath each encoder I don't need anything more!
  13. STP16 as alternative to HC595?

    Of course there are tons of other ICs, that are very usable but are not supported by MIDIbox though a dedicated driver is needed. I thought that the STP may can be used with very little changes in the firmware but giving a great benefit. TLC5958 is a complete other story I think. 
  14. Hey people, a friend of mine just told me about the STP16CPC. It looks great. It can be accessed via SPI, it has 16 outputs and a current-setting. So if one would like to build LED-Rings this looks like a great solution with very less parts-count. You wouldn't need any current-limiting resistors in front of the LEDs and only one IC to drive 16 LEDs. So, does anyone used this IC before and does it work in a classic DIO-chain without changes on the code? I took a look into the datasheet but I'm not sure. The STP has a LE-input which the HC595 doesn't have. But it might work if one connect the chipselect (RC) which is normally connected to RCLK on the HC595 to the LE of the STP.  Thanks, Chris
  15. STP16 as alternative to HC595?

    Isn't it 5-90mA per channel?
  16. Adding CS-line to AINSER8

    This seems to be a good hint! Thanks! Maybe @TK. could guide us in the right direction! :-)
  17. Adding CS-line to AINSER8

    Sure! I did this: static s32 AINSER_SetCs(u8 module, u8 value) { switch( module ) { case 0: return MIOS32_SPI_RC_PinSet(AINSER_SPI, AINSER_SPI_RC_PIN_MODULE1, value); // spi, rc_pin, pin_value case 1: return MIOS32_SPI_RC_PinSet(AINSER_SPI, AINSER_SPI_RC_PIN_MODULE2, value); // spi, rc_pin, pin_value case 2: return MIOS32_SPI_RC_PinSet(AINSER_SPI, AINSER_SPI_RC_PIN_MODULE3, value); // spi, rc_pin, pin_value #if AINSER_NUM_MODULES > 3 # error "CS Line for more than 2 modules not prepared yet - please enhance here!" #endif }  
  18. Adding CS-line to AINSER8

    I thought that too. But I comment out those lines. Also I did a double check I took these lines from mios32_spi.h: #define MIOS32_SPI2_RCLK1_PORT GPIOA // RC1 #define MIOS32_SPI2_RCLK1_PIN GPIO_Pin_15 #define MIOS32_SPI2_RCLK1_AF { GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_SPI3); } // only relevant for slave mode #define MIOS32_SPI2_RCLK2_PORT GPIOB // RC2 #define MIOS32_SPI2_RCLK2_PIN GPIO_Pin_8 #define MIOS32_SPI2_RCLK2_AF { } #define MIOS32_SPI2_RCLK3_PORT GPIOC // RC3 #define MIOS32_SPI2_RCLK3_PIN GPIO_Pin_1 #define MIOS32_SPI2_RCLK3_AF { } and changed the pin for RC1 to PC1 like this: #define MIOS32_SPI2_RCLK1_PORT GPIOC // RC1 #define MIOS32_SPI2_RCLK1_PIN GPIO_Pin_1 #define MIOS32_SPI2_RCLK1_AF { GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_SPI3); } // only relevant for slave mode #define MIOS32_SPI2_RCLK2_PORT GPIOB // RC2 #define MIOS32_SPI2_RCLK2_PIN GPIO_Pin_8 #define MIOS32_SPI2_RCLK2_AF { } #define MIOS32_SPI2_RCLK3_PORT GPIOC // RC3 #define MIOS32_SPI2_RCLK3_PIN GPIO_Pin_1 #define MIOS32_SPI2_RCLK3_AF { } And this is working great (of course with cs=0 in the NGC-file). So I don't think that PC1 is somehow "blocked" for this application.  It can't be to hard to add more CS. I think I just overlook something...
  19. Why does the HC165 even work?

    The plan is not to use encoders. I'd like to use sin/con potentiometers, which will be connected to a MSP430 uC (which converts these signals to encoder-typical signals). So the whole circuit needs only 3V3. I'd like to avoid routing two supply rails on my PCB.
  20. Why does the HC165 even work?

    Yes. But I could use LV165 or not? That could be supplied with 3V3.
  21. Why does the HC165 even work?

    I have another question regarding the ICs. For what reason do we use the HCT541? It does level-shifting and buffering. So if we want to drive only small distances, this might be obsolete? And if we take HCT595 and HCT165 the level of the signals the STM outputs should fit or not?
  22. daisy chain USB Midibox control surfaces

    You can chain them via midi I/O easily.  If you want to connect multiple midiboxes via USB you would need to define different USB descriptions in the firmware which means you need to be able to compile firmwares by yourself. 
  23. If I understood him correctly he wants to avoid the Arduino solution. It will make things a lot more complicated. But an Arduino can drive tons of LEDs without problems. That's why he uses it.  Let's see what he says :-)
  24. That sounds great! And... are you willing to do so? :-D  Awesome work @Antichambre. Looks fabulous. Could you tell us where you have the translucent PMMA from? I buy my materials at TroTec. They have also awesome stuff! 
  25. Thanks for your explanation, pictures and videos. Well, as I told you in an email already you really should think about, going down with the LED-count while keeping the diameter as is now. This will give you some space between the LEDs and it should be very easy creating a mask for it so you don't have any crossbleeding ;-)