This was the genesis of my Multi-Stepper Motor Controller.
I'll be the first to admit it. This was an awfully ambitious project for someone with as little circuit-building experience as I had. But who should that stop?
The idea was pretty simple, actually. For each motor, there's only one coil that needs to be energized. It's like a coordinate system, with the motor number on one axis and the coil number on the other.
There are eight bits coming out of a parallel port (there are actually more, and a few going in, but, one step at a time). I should be able to use two of those, demultiplex to a 1-of-4 choice, and use that to select the motor coil.
The other four bits can be demultiplexed to select one of sixteen different motors. Oh my, the possibilities were most exciting.
Basically, I was talking about a computer with sixteen latched four-bit registers on a four-bit bus. I figured I could use the remaining two bits as controls. The latched registers turned on a MOSFET circuit, which powered the motors. Voila!
Of course, the immediate problem is that there was no method of feedback. How were the motors to report their position? The way I figured, as long as I got this part working, I could always add a separate method for feedback later, perhaps with a genuine I/O card or something.
The software was the toughest stufff I'd ever written. I had to track all the motors and the coils and it was all bitwise manipulation. I wrote it in Turbo Pascal. I added facility to "remember" commands, so if you moved the motors in a way that was good, the sequence could be recorded and played back. I even wanted to write an optimizer program that would analyze the command sequence file and "trim the fat" by combining all steps that involved moving the same motor in the same direction.
Here's what happened: I got the software to work (and it was a pretty spiffy interface, too!) Yay! I was able to make the hardware (the interface circuit) work from manual switching. It properly selected the registers and loaded the bus nybble in and held that helpless baby at the latch. However I could not get the computer to talk to the parallel port. At least not the way I wanted it to. I had been going in from too high a level, trying to use the "prn" functions and whatnot, when I should have just beeen banging data into memory. Oh well, I halted the project at this point, probably distracted by a girl or something.