FantomXR

Members
  • Content count

    936
  • Joined

  • Last visited

Community Reputation

28 Excellent

2 Followers

About FantomXR

  • Rank
    MIDIbox Guru
  1. Adding CS-line to AINSER8

    Thank you very much! I'll give it a try. 
  2. 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.
  3. 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
  4. Adding CS-line to AINSER8

    Thanks for chiming in!  Is it really so easy? :-) Thanks! I'll try it!!
  5. 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!
  6. 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. 
  7. STP16 as alternative to HC595?

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

    This seems to be a good hint! Thanks! Maybe @TK. could guide us in the right direction! :-)
  9. 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 }  
  10. 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
  11. 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...
  12. 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
  13. 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.
  14. Why does the HC165 even work?

    Yes. But I could use LV165 or not? That could be supplied with 3V3.
  15. 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?