If you'll pardon some ASCII graphics, here's what I'm thinking of now:
Code: Select all
+--------+
|Selector|
/------| thingy |
| +--------+
+-----------+ ||||||||
| RST Q0|--------+------------------------------ etc.
| Q1|-------+------------------------------- etc.
|MC14011 Q2|------+-------------------------------- etc.
| Q3|-----+--------------------------------- etc.
| Q4|----+---------------------------------- etc.
| Q5|---+---------------------------\
| Q6|--+---------------\ |
| Q7|-+---\ | |
+-----^-----+ | | |
| | | |
SYNC |'| |'| |'|
S7 >--| >-> A7 /-| >-> A6 /-| >-> A5 etc.
|.' | |.' | |.'
| |
S6 >--/ S5 >--/
Explanation:
(I hardly ever find this stuff presented at this level of detail/simplicity, but I don't think I'm an expert, and most of the people here don't seem to be experts either. So simple is good.)
The MC14011 box should start with Q0 high and everything else low after it's reset, and each Sync pulse will cause the next numbered Q output to go high, while the others stay low. They are all connected to the "selector thingy," which should probably be a big multiplexer, so that when the correct Q input goes high, the counter resets to Q0. E.g., if the selector passes Q2 to the Reset pin, then you get 3 cycles before the counter resets. That's how the 14011 is wired according to the Japanese page, I think. Except the don't specify a "selector thingy," they just tell you to connect A to a numbered pin or some such.
The triangular things are tri-state buffers. When the side input (enable) is low, the output is disconnected from the input (high impedance). When the enable input is high, output = input. By setting the S inputs with switches, you can determine whether the A outputs will pass a 1 or a 0 when the corresponding Q enables a buffer.
So, with each Sync pulse, a different buffer is enabled, which causes either a 1 or 0 value to appear at an A line. You can connect all the A lines with a big OR gate to get a single waveform whose value at each frame is controlled by the S values. Or, even better, since only one buffer at a time is active, you can just wire all of A0-A7 together and you should get the same result. It may be a good idea to stick a 10k pulldown resistor on the output, in that case, just so you know what happens if all the buffers are inactive.
Other details:
Set up dipswitches by hanging a big resistor (10k or more) off of +5V or GND, and connect it to GND or +5V respectively through one switch. The output is at the point between the switch and the resistor. I don't think debouncing is anything to worry about here, dipswitches are seldom switched and they can't affect the counter anyway.
Nobody sells 8-input OR gates, but there is such a thing as a 13-input NAND gate, which can serve as well if you invert the right things and tie the extra inputs to some of the useful inputs.
All the resistors and caps in the original autofire circuit are probably doing some kind of bandpass filter on Sync. Except the big cap from +5 to GND, which is a power filter. It should not need to be there, but having it there can only improve things.
You could put several banks of dipswitches in the autofire circuit, to store several patterns without having to fliip dipswitches during a game (heh),
but it would take a ton of muxes. Or you could just add one of these things for every button.
I think this is a correct, reasonably compact setup, but I don't know that.
It's a safe bet that somewhere in this post, something numbered from 0-7 should be numbered from 7-0, and/or a 1 or 0 needs to be flipped.
It might be worth programming and burning a PIC to do some of this, if you know people who are into that.
Edit:
Just occurred to me shortly after posting this, as I was falling asleep. There's no need to use muxes here, making them out of tri-state buffers and inverters or anything. A single tri-state buffer on each Q line is enough. S = input, A = output, Q = enable.
Edit 2: Changed ASCII graphics and rest of post to reflect using buffers instead of muxes. Yes, I am a dork, and I have a lot of free time today.