Jump to content
gauauu

Joystick multiplexer help

Recommended Posts

Thanks for the help, all. The design of running them parallel with an inverter on the ground, and using diodes for isolation, is working perfectly. No signs of interference. I've got it all on a messy breadboard right now (I don't know how you hardware people stay sign, the mess of wires drives me crazy!), but it's time to make some prototype PCBs!

 

Roger that.

post-66741-0-56460600-1552713107.jpg

Share this post


Link to post
Share on other sites
Posted (edited)

(I don't know how you hardware people stay sign, the mess of wires drives me crazy!)

I have no idea what you could be referring to.

post-12370-0-52430600-1552754402_thumb.jpg

Edited by BigO

Share this post


Link to post
Share on other sites

Thanks for the help, all. The design of running them parallel with an inverter on the ground, and using diodes for isolation, is working perfectly. No signs of interference. I've got it all on a messy breadboard right now (I don't know how you hardware people stay sign, the mess of wires drives me crazy!), but it's time to make some prototype PCBs!

Good to see you got it working.

You only get a mess of wires if you want a mess of wires, whether you brought a bunch of flexible patch/jumper wires or are using solid wire of a reel (1/0.7 wire is typically used) use different colours where you can, i.e. Red= 5V, Black = 0V, and giving each sub circuit has its own colour, i.e. Brown = controller 1, Orange = controller 2 will aid identification and make it a little less messy.

 

Using jumper wires will always result in a birds nest but if using 1/0.7 wire off a reel this can easily be bent 90 degrees with a pair of pliers vertically for insertion into the breadboard or horizontally for routing. Being precise takes more time and routing horizontally around IC's rather then going over them (not good in case you have to change it) uses more wire but on larger circuits with lots of wires it make it easier to follow and where necessary you can run wires stacked on top of each other and still follow them.

Share this post


Link to post
Share on other sites

Another question for you smart people. The last method I tried (switching the grounds and using diodes for isolation) works great for actual Atari joysticks, but during testing, we ran into trouble with Genesis pads. Apparently the internal circuitry in these causes them to actually hold the outputs high when a button isn't pressed, even if the ground pin isn't low. Which means that if you plug in a Genesis pad into one of the two ports, the other controller never registers. So the current design works wonderfully for original sticks, but doesn't let you use Genesis pads at all.

 

The only solutions I can think of for this are:

1. Add a ton of diodes, one for each output pin for each controller, so that each controller can only drive a pin low, but can't hold it high. (This would require adding 20-24 diodes to the design, ugh)

2. Completely redesign the circuit again

 

Before I go down either of those routes, I wondered if any of you might have suggestions of simple solutions that I may have missed?

 

You can see the schematic I was using at https://www.dropbox.com/s/42wj6c96hu93fup/319x2.zip?dl=0

Share this post


Link to post
Share on other sites
Posted (edited)

The Atari joystick just pulls the voltage down to ground via a switch, a Google search confirms my suspicion that the Genesis controller uses and IC (74LS157). The data sheet I looked at indicated it could sink 200 time more current than it could source so should be enough to pull a high output down if they had both their supply voltages.

What I suspect is happening here is that with no ground rail the outputs of the "off" controller are effectively like a short circuit to the the 5V rail and thus the other controller does not have the current syncing capabilities required to pull it down low enough to register as a logic low.

 

Your first suggested solution should do the job, however as you do not seem keen to take that option alternative for option 2 are...

 

a) The Genesis controller appears to uses a Quad 2 to 1 multiplexer. If you could find a Hex or Octal version you could use two of those (one for each 2600 controller port), then use your controller select line to select between controllers connected to either the A or B inputs rather than switching the controller Grounds, or

b) Use an Octal line buffer like the 74HC244, using one per controller input you tie the output lines of two together in parallel (equals one 2600 controller port) and then use your controller select line to enable which one you want to get the output from, the advantage of these devices is their tristate outputs so the outputs of the off one are completely open circuit.

 

For both a and b you should not need any diodes but will need pull up resistors on the inputs a 4K7 or 5K1 SIL resistor pack (with common resistor connection) makes for a neat solution. In both cases you will need at least one execution cycle between selecting and reading a controller but as I recall you already had that covered.

Edited by Stephen Moss
  • Like 1

Share this post


Link to post
Share on other sites
Posted (edited)

Hi Stephen,

Thanks for all the info and suggestions! Nathan (aka gauauu) is going to try the diode solution. I figured I'd give the circuit a shot myself since he's making this multi-tap for my game (Wizard of Wor Arcade), so I've gone and ordered a bread board, resistors etc. to try to get back into hardware (it's been about 30 years since my EE lab class at UCONN lol).

Anyway, if you don't mind, I'm looking on mouser.com and did a search on the 74HC244 for the octal line buffer (I was going to try solution (b) since Nathan's original design used a couple 2x1 MUX). I picked the first one in the list, does this seem to be appropriate for what we need?

 

Also, you mention a 4K7 or 5K1 SIL resistor pack. I did a search on that but couldn't find anything; do you have any more specific information that may help me find what we need? EDIT: okay, I was able to find out what SIL means (single-in-line ;) and it's basically a bunch of resistors all using a common terminal. Very slick! Sounds like the best solution would be to maybe get 2 of these, one for each set of joystick inputs (5 inputs each)?

 

Thanks in advance!

John

Edited by johnnywc

Share this post


Link to post
Share on other sites

If you're hoping to use it on a breadboard, those SMTs will be a bit of a problem. You either need a surface mount to DIP conversion board, or you need to look for the through-hole (DIP) versions

Share this post


Link to post
Share on other sites
Posted (edited)

If you're hoping to use it on a breadboard, those SMTs will be a bit of a problem. You either need a surface mount to DIP conversion board, or you need to look for the through-hole (DIP) versions

 

LOL I'm glad I asked! I'll look around for DIP version of the buffer. Thanks! :)

 

I assume something like this would be okay? It says it's 'through hole' DIP-20 (I'm guessing '20' is the number of pins).

 

PS I appreciate the help, especially with the basic stuff! I'm researching at the same time too so hopefully my questions will be a little more advanced soon!

Edited by johnnywc

Share this post


Link to post
Share on other sites

Yeah, the DIP-20 means it's a dual row, 20-pin chip. I'm pretty sure the pins on DIPs are all 0.1" pitch. There are/were SIP (single row) chips, just as an FYI for comparison.

Share this post


Link to post
Share on other sites

Yeah, the DIP-20 means it's a dual row, 20-pin chip. I'm pretty sure the pins on DIPs are all 0.1" pitch. There are/were SIP (single row) chips, just as an FYI for comparison.

 

Great thanks for the confirmation!

Any suggestions on a SIL resistor pack/network (not sure if those are the same) that I could use for the pull up resistors? I see SIP resistor packs (which they also call single-in-line which is confusing) so I'm not sure if they're the same.

Share this post


Link to post
Share on other sites
Posted (edited)

Yeah, SIP is typically what you want for resistor networks. As for type, you are probably thinking of "bussed" resistors. This datasheet shows some various styles for resistor packs.

 

https://www.mouser.com/datasheet/2/54/600M-777112.pdf

 

It appears that Mouser also has resistor networks in the "radial" form, which is the same as SIP. Probably just another manufacturer's classification of the same package. DIP may also be a viable option if you want more resistors than a typical SIP provides.

Edited by ChildOfCv
  • Like 1

Share this post


Link to post
Share on other sites

Yeah, SIP is typically what you want for resistor networks. As for type, you are probably thinking of "bussed" resistors. This datasheet shows some various styles for resistor packs.

 

https://www.mouser.com/datasheet/2/54/600M-777112.pdf

 

It appears that Mouser also has resistor networks in the "radial" form, which is the same as SIP. Probably just another manufacturer's classification of the same package. DIP may also be a viable option if you want more resistors than a typical SIP provides.

 

Great, thx for the info, it's very helpful! So Stephen recommended a 4K7 resistor pack (or 5K1), so I think this one suits the need:

 

https://www.mouser.com/ProductDetail/Bourns/4609M-101-472LF?qs=%2Fha2pyFadugOMSB5yBRKclNlQDagKDSXTScC2ZhFKwTAAF%2FHbRdHBQ%3D%3D

 

It has 8 resistors which will be enough for 1 controller, so I'll need 2 for the circuit (1 for each since there are 5 maybe 6 inputs if we include the 2nd button).

 

Thanks again!

Share this post


Link to post
Share on other sites

Is there any similar type of thing but for diodes? I tried doing some searching but didn't find anything, but it didn't help that I didn't know what search terms to look for :-)

Share this post


Link to post
Share on other sites

Though I have seen reference to SIP versions that look almost exactly like the resistor packs. You may even find some on digi-key. They are listed in common cathode or common anode versions.

Share this post


Link to post
Share on other sites
Posted (edited)

Anyway, if you don't mind, I'm looking on mouser.com and did a search on the 74HC244 for the octal line buffer (I was going to try solution (b) since Nathan's original design used a couple 2x1 MUX). I picked the first one in the list, does this seem to be appropriate for what we need?

Sorry that was a memory error, you can use the 244 but half the inputs are on the left with the corresponding outputs on the right and the other half is going in the opposite direction which makes signal routing a bit of a pain if you need more than 4, which you will.

I meant the 74HC245 as you can have all the inputs on one side and all the outputs on the other which makes the design much better for what you want to do. and as ChildOfCv has pointed out make sure you get a DIP/DIL version where the pins go down (through hole) and not out to the side (surface mount) as they are much easier to work with.

 

I know this has already been covered a little but...

DIP = Dual In line Pin, 2 parallel rows of pins

DIL = Dual In Line, same as DIP just a different name

SIP = Single In line Pin, 1 row of pins

SIL = Single In Line, same as SIP just a different name.

 

Standard pin pitch is 0.1" (2.54mm) the same as most prototyping boards and breadboard, standard row pitch for smaller DIL/DIP devices is 0.3"

 

In regard to the SIL resistor pack the "Bussed, 101 circuit" version on the datasheet ChildOfCv linked to is the type you need.

 

In regard to Diode packs ChildOfCv linked to the only one that is suitable for your application is the top 8 pin one but given its size and that the orientation of the diodes is not straight across from one side to the other you don't really gain anything over using individual diodes.

Of the other devices listed the SIL device is a bridge rectifier (AC to DC) and the others are data line voltage clamps that prevent over/under voltages, none of which conduct in the way you need them to for your application. I admit I have not really been looking but as far as I know there are no diode equivalent to the resistor SIL packs, if there are you do not want commoned ones like the resistor pack you need individual diodes.

Edited by Stephen Moss

Share this post


Link to post
Share on other sites

Yeah the ones I've seen that could fit the bill (depending on your application) are small ICs with 3 or 4 pins intended for PMIC applications. They have 2 diodes that may or may not have a common cathode. But overall, it does seem that it would be better to just use discrete parts.

Share this post


Link to post
Share on other sites
Posted (edited)

Hi Stephen,

 

Sorry that was a memory error, you can use the 244 but half the inputs are on the left with the corresponding outputs on the right and the other half is going in the opposite direction which makes signal routing a bit of a pain if you need more than 4, which you will.

I meant the 74HC245 as you can have all the inputs on one side and all the outputs on the other which makes the design much better for what you want to do. and as ChildOfCv has pointed out make sure you get a DIP/DIL version where the pins go down (through hole) and not out to the side (surface mount) as they are much easier to work with.

Thanks for the clarification, I wouldn't have thought about the pin orientation until after I had started building the circuit lol.

 

In regard to the SIL resistor pack the "Bussed, 101 circuit" version on the datasheet ChildOfCv linked to is the type you need.

Great, I bought some of those too.

 

Just so I don't blow anything up:

 

- Sanity question: I get VCC (pin 7) and GND (pin 8 ) off of the Atari hookup, correct? :)

- connect the joystick inputs to the resistor pack (up/down/left/right/button/ Genesis button)

- connect the outputs of the resistor pack to an octal buffer. Looks like there is a DIR pin that controls the direction of the data (A->B or B->A). I assume this should be the same for both (meaning the direction should be the same for both). What do I connect to this pin?

- Repeat for both joysticks

- Connect the outputs of the 2 octal buffers in parallel to the output that is connecting to the Atari. right/up/down/button map to the standard pins, left maps to INPT1. Do I need anything (resistors, diodes, etc) between the octal buffers and the Atari pins?

- select line is pin 3 from the Atari (left). How do I go about having it activate one octal buffer and not the other? Is it as simple as connecting the select line directly to one of the 245 OE pin (output enable) and passing the select line through an inverter before connecting it to the other one?

- BONUS: If I wanted to extend the design to allow up to 4 joysticks connected using 2 select lines (let's say pin 2 and 3, right and left), I assume I would need some logic gates for the two select lines to output enable one of the octal buffers? Maybe use a 7408 AND gate in combination with a 7404 inverter to output enable one of the buffers on 00, 01, 10, or 11?

 

Apologies for all the basic questions, I can promise I'm a fast learner though! :)

 

Thanks,

John

Edited by johnnywc

Share this post


Link to post
Share on other sites

I assume this is for the active version that chooses inputs by IC, rather than the diode version?

 

VCC pin 7, GND pin 8. Correct.

Yes, each input goes to a resistor in the pack. The common (I assume) goes to VCC for pull-up.

More precisely, connect the joystick inputs to the octal buffers, with one of each of the pull-up resistors on a buffer line.

If DIR is high, the direction is A->B. If low, the direction is B->A. Whichever is the convenient input side determines how you wire DIR.

For 2 joysticks, direct to one enable and inverted to the other will work.

If you want to do 4 joysticks, there's a decoder chip that will save you some design work. 74HC139 comes to mind. 2 address lines choose one of the 4 outputs.

  • Like 1

Share this post


Link to post
Share on other sites

I assume this is for the active version that chooses inputs by IC, rather than the diode version?

Yes, the version (b) suggested by Stephen above with the octal buffer. :)

 

VCC pin 7, GND pin 8. Correct.

Yes, each input goes to a resistor in the pack. The common (I assume) goes to VCC for pull-up.

Glad I asked, I would have incorrectly guessed common was ground. Man I'm really rusty with this stuff! ;)

 

More precisely, connect the joystick inputs to the octal buffers, with one of each of the pull-up resistors on a buffer line.

Hmmm, so you're saying that I connect the joystick inputs directly to the octal buffer? When you say a pull-up resistor on a buffer line, is that on the input or the output? :S

 

If DIR is high, the direction is A->B. If low, the direction is B->A. Whichever is the convenient input side determines how you wire DIR.

Great, thx. Silly question, but how do I get a high signal to DIR? Do I connect VCC directly? (or GND if I wanted to get low)? Those sound like dangerous ideas, is there another way to get high/low to that pin?

 

For 2 joysticks, direct to one enable and inverted to the other will work.

Great thx!

 

If you want to do 4 joysticks, there's a decoder chip that will save you some design work. 74HC139 comes to mind. 2 address lines choose one of the 4 outputs.

Awesome thx! I figured there was a specific chip that would be able to solve that issue instead of building it with logic gates. :)

 

Thanks for the info!

John

Share this post


Link to post
Share on other sites

Glad I asked, I would have incorrectly guessed common was ground. Man I'm really rusty with this stuff! ;)

Common is often a ground, but really it just means the connection to all the other components for the unit in question.

 

Hmmm, so you're saying that I connect the joystick inputs directly to the octal buffer? When you say a pull-up resistor on a buffer line, is that on the input or the output? :S

Each input pin from the joystick will connect to an input on the octal buffer, AND to a resistor in the pack. You can go back and refer to the image in the opening post to get an idea of what I mean.

 

Great, thx. Silly question, but how do I get a high signal to DIR? Do I connect VCC directly? (or GND if I wanted to get low)? Those sound like dangerous ideas, is there another way to get high/low to that pin?

Fear not! Actually, that's the common way to hook up a constant input. You'll see many schematics where pins are tied directly to VCC or GND as appropriate.

  • Like 1

Share this post


Link to post
Share on other sites

Common is often a ground, but really it just means the connection to all the other components for the unit in question.

Makes sense. So if I hook up VCC, is that what makes it a 'pull up' resistor, meaning it's pulling it up to high? Would connecting ground make it a pull down resistor?

 

Each input pin from the joystick will connect to an input on the octal buffer, AND to a resistor in the pack. You can go back and refer to the image in the opening post to get an idea of what I mean.

Got it now... I forgot Nathan had posted a pic before. That really clears things up!

 

Fear not! Actually, that's the common way to hook up a constant input. You'll see many schematics where pins are tied directly to VCC or GND as appropriate.

Awesome! I'm going to try to put this together this weekend and will post my findings here.

 

Thanks!

John

Share this post


Link to post
Share on other sites

Makes sense. So if I hook up VCC, is that what makes it a 'pull up' resistor, meaning it's pulling it up to high? Would connecting ground make it a pull down resistor?

 

Yep, that's what is meant in both terms. It "pulls" toward its connected voltage, but with a weak pull that can be overcome or at least offset by other connected components.

Share this post


Link to post
Share on other sites

You have probably already started your build but just in case....

1) You will need four 74HC245 and SIL resistor pack (one for each Joystick)

2) As ChildOfCv stated each Joystick direction and fire input will go to both a 74HC245 input pin and a pull up resistor.

3) Tie the 74HC245 DIR pin high or low to pass data in required direction as previously descibed by ChildOfCv.

4) Each 2600 controller port will be connected to two Joysticks, lets call them A and B. For each 2600 controller port you will need to tie the 74HC245 output pins relating to the Joystick direction & fire controls of Joysticks A & B together (i.e pin 18 to pin 18, pin 17 to pin 17 and so on) and to the respective 2600 controller port pin.

5) Always tie unused logic inputs to either GND or VCC, leave unused outputs alone.

 

Joystick selection:

When the OE (Output Enable) pins of the two 74HC245's for the A Joysticks is Low (0V) and the OE pin of the two 74HC245's for the B Joystick is high (5V) The output of the A Joysticks go to the VCS (B outputs disconnected), when you switch the OE pins to the opposite high/low states the outputs of the B Joysticks will be connected to the VCS.

One way of doing that is to have two controller selection lines, one the A Joystick OE pins and one for the B. The other is...

to use a single control line which goes directly to the OE pins of the A Joysticks and the Gate of a ZVN4306A MOSFET. Connect the Source of the MOSFET to GND and the Drain to both a pull up resistor (i.e. 4K7 & or 5K1) and the OE pin of the B Joystick '245s. The MOSFET and pull up resistor will invert the Joystick selection control signal from a high to a low and visa versa.

 

  • Like 1

Share this post


Link to post
Share on other sites

Well, I think he's trying to stick with the single port for joysticks setup though, so that port 2 can run the WOR sound module. But maybe I misunderstood. If you want to multiplex the 4 joysticks on port 1, then you'll need the decoder and 2 select lines. I guess one can be a pass-through from the WOR module though. I do have a dim recollection that you couldn't do a 4-way select from a single port due to some limitation...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...