There have been many redesigns of the Intellivision controller. This is mine.
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
Optocouplers wired for the 2nd controller. I'm having a bit of trouble with getting different outputs. Since they're all grounded to the same outputs, I think some of the pins are being affected by the others. I haven't had time to really investigate.
I also started on the kicad schematic for the controller board. I'll have a 5-pin ribbon connecting to it with the arduino leads, power, and ground.
First physical test. The left/right was working, but it was also firing when it shouldn't have been. There were clearly some wrong inputs happening. I don't actually know if the Sears model has the same controller pinout as the INTV 2. There are a few other small questions I'm not sure about, but it's coming along.
Quick update: After discussing some issues at the atariage forums, I realize I need isolation between the console and my power supply so it doesn't damage the console over time. I had assumed I could just keep the voltage low enough, but it might still be a problem. Thus, I need some sort of isolation system. I had considered a more complicated transistor setup or just some solid state relays, but it sounds like optocouplers are going to be the easiest. The only problem with this is the size. I'd need 4 4-channel chips (16 pins each), which is a little ridiculous. I can't find a 4-channel opto-coupler where they all have the same emitter and same cathode, which is what I need. For my application, a 4-channel could be done with 4 anode pins, 1 cathode pin (as ground), 4 collector pins, 1 emitter pin (as ground), and then maybe a power/ground. So 10 pins rather than 16. I can't find a chip with this architecture though, so we may just have half the pins tied together.
With a bit of debugging and some code tweaks I have a physical setup working.
List of features:
The code needed to be tweaked for a few reasons. First, I used different resistor values for the analog mapping of the keypad. I also added in a bunch of debug stuff for testing the physical implementation. Finally, I was getting inconsistent output from the joystick, which I fixed by simplifying the deadzone calculations from euclidean to manhattan distance. It's much simpler and faster. The deadzone is just more of a diamond than a circle.
Here's me pressing the control stick in a SW direction while pressing the '5' n the keypad. The joystick is outputting to controller 1 and the keypad s outputting to controller 2.
Now I need to do output testing on an actual intellivision and then I can start designing the circuit boards. I'm thinking of having a modular circuit board arrangement, and a modular controller arrangement to accommodate left/right players and single controller output.
Not a lot to report. I finally got all the chips and parts. I was worried about having to put away things when I wasn't working on them (my desk only has so much space for my projects), so I put together a working arduino trainer for building the controller. I just 3d printed some mounting brackets from for the breadboards. I'm pretty excited to start getting everything hooked up.
I'm also still tweaking the basic faceplate. I've printed several to get component size and feel close to correct. I'm currently on this iteration, which I'm sure barely looks different. It's actually quite a bit wider. I have been considering having the overlay holder snap on the front like the original, but I really like the feel of it being integrated as part of the controller.
Anyway, I'll update again once I have some things wired up and I'm testing.
I've had a change of heart since the last log about trying to keep it to only the Arduino. The reason is because I need more output pins to have the feature of allowing input from this controller act as if it's from either the player one or player two controller. This only comes up in a few games, but basically you can't do some keypad presses while also going some directions. In certain games you'd like to use the keypad while moving. You can get around this by using both controllers because many of these games allow you to play from either one. This made some people play the game by holding both controllers!
The current plan: use two 74HC595 SIPO chips to send output to both controllers. I'll add 3 toggle switches to control whether the keypad, action buttons, and control pad signals are sent to port one or two. This means you can even switch them while playing.
Below is the working simulation showing 3 different inputs at the same time (I had to combine images). Keypad button '9' is being pressed, NE on the joystick is pressed, and the left bottom action button is pressed. The toggle switches on the bottom determine which output they go to. Thus, only the keypad is switched to output on controller 2.
Although I now have 3 chips on the board, it is a nice, clean solution. And the firmware can be the same even if only one output cord is desired. The second chip and output can be an addon board that also has the 3 switches.
The joystick continues to irk me since there isn't a good replacement for the original. I played around with adding a custom cap to a joystick to sort of replicate it (image below), but as expected, the angular movement just isn't great enough. I'm just going to have to try the thumb-slide joystick, a mini one, or experiment with something custom (as I previously mentioned).
There are a lot of decisions to be made, so I'm going to lay out some of the ones I've made so far. A lot of research has gone into this, and I still feel like I'm usually winging it. Here are a few of the questions/decisions and some resources:
I printed out a version of design 1 and the hybrid one. I had the thought of making the side pieces removable, which would mean less 3d printing. I tried this with the design 1 print on the right. I'm instantly abandoning that idea. I have to deal with more screw holes and it's a pain. Maybe for a finished product it could be multiple possible side pieces and people could print what they want. This would also address the right/left handed issues with a controller design.
Anyway, I was pleased with how the left one came out. I learned that I did not give myself enough room to mount the buttons and analog stick. I'm looking at different options. I think I can find a more appropriate analog stick than the one I currently have.
The size overall seems about right. Maybe a little small, but that should be better when expanded for mounting the components.
The problem with the normal controller is how awkward it is to hold. There are times you need the keypad for actions, times you need it for movement, and times it is a mix. This is while also needing the directional pad and the 3 side buttons.
Thus, an ideal design would allow 3 use cases:
This is the inspiration for my design, which has three variants.
Design 1 | Design 2 | Design 3 |
Design 1 is possibly too compact, but gives good access to all buttons. The buttons would have to be on top of the case due to the overlay. The 2nd design moves the side buttons over in a less natural place to push them on the controller, but there is no issue with the buttons on top of the overlay. Design 3 attempts to address the awkward placement by spacing the buttons and giving the user more hand options.
The plan is to use the standard arduino membrane keypad (below) and an analog stick. Then just have an arduino in the back of the controller. Several people have done this already, but with very different designs for the controller.
Below is a simplified 3d model of a hybrid of designs 2 and 3. When I 3d print and fit components, I will be testing overall feel. I could make the right side equal width and have the 3 buttons diagonal. The exposed section of the keypad/overlay can also be raised and lowered depending on thumb reach and feel.
Create an account to leave a comment. Already have an account? Log In.
Become a member to follow this project and never miss any updates