
FantomXR
-
Content Count
1,028 -
Joined
-
Last visited
-
Days Won
21
Content Type
Profiles
Forums
Blogs
Gallery
Posts posted by FantomXR
-
-
-
Hey @TK.,
I tried it without success. I copied the code from you into my firmware.
My NGC file looks like this:
RESET_HW AINSER n=1 enabled=1 num_pins=1 cs=1 resolution=7bit AINSER n=2 enabled=1 num_pins=1 cs=2 resolution=7bit
I have a potentiometer connected to the first analog input of the second and another one to the first input of the third module. The first module is not used at the moment.
If I "set debug on" in the terminal, I see movements if I turn the potentiometer which is connected to the second module. Anyway I can not see anything when I turn the pot which is connected to the third module.
I've tried both PP and OD mode (with 1k pullup to 5V). I use PE6, which should lead to
MIOS32_BOARD_J10_PinInit(14, MIOS32_BOARD_PIN_MODE_OUTPUT_OD)
and
case 2: return MIOS32_BOARD_J10_PinSet(14, value);
Any ideas what I do wrong?
-
Yes!
Drop me a PM.
-
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...
-
8 hours ago, weasel said:
oh also for that amount of OLEDs and input stuff you might need a couple more MCUs/core boards down the line i think?
MB_NG supports up to 64 OLEDs from just one core ;-)
-
1 hour ago, latigid on said:
(I think) 60€
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...
-
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.
-
Thank you very much!
I'll give it a try.
-
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.
-
14 hours ago, TK. said:
E.g. let's assume that J10.D0 is unused so far, then add to AINSER_Init():
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 -
Thanks for chiming in!
Is it really so easy? :-) Thanks! I'll try it!!
-
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 encoderI don't need anything more!
-
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.
-
Isn't it 5-90mA per channel?
-
11 minutes ago, Zam said:
Ok, the logic is "0, 1 or 2 for SPI2 (J19:RC1, J19:RC2, J5A:A0(nowRC3) )", I have something else(wrong) in mind sorry.
This seems to be a good hint! Thanks!
Maybe @TK. could guide us in the right direction! :-)
-
2 hours ago, Zam said:
Are you sure about the pin value here?
No but I followed up the logic in the code above:
// Which RC pin of the SPI port should be used for the first 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_MODULE1 #define AINSER_SPI_RC_PIN_MODULE1 0 #endif // Which RC pin of the SPI port should be used for the second 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_MODULE2 #define AINSER_SPI_RC_PIN_MODULE2 1 #endif // 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
2 hours ago, Zam said:also did you define modules number ? (ainser.h)
Not in ainser.h, but in the mio32_config.h with:
// enable three AINSER modules #define AINSER_NUM_MODULES 3
2 hours ago, Zam said:and ainser.c
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 }
-
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 -
10 hours ago, Zam said:
Hello Chris
Hi Zam! Thanks for your reply.
10 hours ago, Zam said:For AINSER8 you have to define muxed=0 at NGC because it's set to 1 by default, but not sure it's your issue here
I've tried that without success.
10 hours ago, Zam said:Can I ask for what reason you need more lines?
Yes. I prefer having more traces (=not muxed) instead of having less traces and more parts (=muxed). I want to get rid of HC595 and 4051.
In my application I need about 20 analog inputs. So, unfortunately 16ch. are not enough.9 hours ago, Zam said:pin C1 is already used at J5, maybe you have to deactivate/remove something in the code, also it's the 32F4 ADC
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...
-
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 -
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.
-
1 hour ago, Antichambre said:
But you can use HCT595/165 and remove the 541 on your own design. Keep in mind HCT need 5V supply voltage.
Yes. But I could use LV165 or not? That could be supplied with 3V3.
-
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?
-
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.
-
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 :-)
Adding CS-line to AINSER8
in MIDIbox NG
Posted
No. As I don't use any other app and I stated above that I want to use it in NG TK surely took care of it.
This is ainser.c:
and in mios32_config.h I set
#define AINSER_NUM_MODULES 3
So, it should be exactly the same as in TKs branch.