Hi all -
Just joined the forum. I’m working on designing a board to let me control motorized props with MIDI to move in time to music. The midibox/mios system looks really great, and I think it would be very useful for this. I’ve looked at the documentation quite closely, and I have a few technical questions that I could use some help with. The following is a bit long, but any advice would be appreciated, since of course I have a show coming up next week that I need to use this in!
I’ve already designed my own board using a 16F877, and programmed it in assembler to receive MIDI and control two motors using the hardware PWM (I need high-frequency PWM for the motors I’m using) through an L298 dual H-bridge board. It seems to work quite well.
I’ve decided to build a new version using the 18F4331, which is almost the same as the 18F452, except that it has six hardware PWM channels. I have no problem to make my own design and code for it, but I’d rather take advantage of all the great programming and peripherals of the midibox.
So here’s what I’d like to do:
First, I would replace the 18F452 on the midibox core board with the 18F4331. There would be a bit of a change in the mios code in terms of setting up the analog ports, but that should be easy. Other than that the pinout is the same, except the synchronous serial port is moved, but I think mios doesn’t use that (curious, why not use the hardware i2c instead of bit-banging on J4?)
What about the bootloader? Would it work with this chip? Is the source available for that? I couldn’t find it.
I’m already halfway through designing a board with three L298 dual h-bridge motor controller chips, and this could attach to J15 on the core (so I would use an i2c connection for an LCD). I’ll need all the pins on J15 for PWM, except for port D<5>. I also need port C<1:2>, since that’s where two of the PWM pins are. So I would also use J7 from the core module; I would use C<0> also on J7 as an enable pin for the motor controller chips. So far I think this should all be ok, and the code to do the hardware PWM output is not very intense.
But now I start to push the limits: I still want to be able to use the motorfader board. I might use it with actual motorfaders, but also I might just use it to control some small hobby motors. Then I wouldn’t need the position feedback, just the software PWM (some hacking of the motorfader code, but also not so difficult I think). And so in that case I would also want to use the AIN multiplexer board to connect a bunch of sensors (knobs, and other things like accelerometers, etc.)!
I thought it might be possible to connect the motorfader board to J10 instead of J7. However, it looks like the serial clock on D<5> is shared by the i2c interface to the banksticks etc. - I guess J10 works ok with the AOUT board because there’s a chip select signal to it? And it doesn’t bother the LCD “RS” line for some reason? But am I correct that J10 could not be used for the motorfader board, since any bankstick access would clock data into it? (I can’t use D<6> for the clock since that’s one of the PWM outputs).
Maybe I could use J10 for the AIN module addresses (instead of J6)? At least I could just not take any analog reading while bankstick access was happening? But I guess this could be a problem if I’m using an i2c LCD, it might interrupt the AIN readings too much…
Well maybe I’m trying to do too much at once, but I’m on a hunt for a couple of extra pins. What if I use C<3> from J6 and C<4:5> from J10 for the motorfader control. And then for the AIN control, I could use… what? Would it be possible to share D<0> (SO on J8) with SO for the motorfader? I mean, you are never clocking both the motorfader and J8/J9 at the same time, right? Maybe that could give me an extra pin? And what about D<4> - I’m not sure what the touch sensor is used for? Ah, but I still need one more! Maybe I can take one or two of the analog pins, and limit the analog inputs to 56 or 48 instead of 64. Well at this point the wiring starts to get pretty weird, and I start to think about designing my own core board… but I that’s probably more work than I want to do right now… any ideas?
Thanks… <Jeff