• Adding the optocouplers

    deftcoyote01/02/2024 at 22:56 0 comments

    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.

  • Starting Testing

    deftcoyote11/05/2023 at 04:14 0 comments

    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.

  • Physical Test

    deftcoyote10/30/2023 at 00:09 0 comments

    With a bit of debugging and some code tweaks I have a physical setup working.

    List of features:

    • analog joystick working for the contol disc
    • potentiometer for adjusting the deadzone of the joystick
    • membrane keypad (this will change later)
    • the three side buttons
    • controller output for first OR second controller
    • 3 switches to control whether the output of the keypad, side buttons, or control pad should be output as first or second controller output.
    • LEDs to show high/low 8-pin output.

    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.

    • The arduino by itself (or a clone)
    • a controller output board with both SIPO chips and the 3 switches. I'm setting it up so that if someone doesn't want the controller 2 output, they can just not install the 2nd chip and the switches.
    • a board with the joystick and side buttons
    • a board with just the side side buttons

  • Getting set up

    deftcoyote10/22/2023 at 02:35 0 comments

    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.

  • Controller Features

    deftcoyote09/24/2023 at 20:19 0 comments

    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). 

  • Controller Pins and Arduino

    deftcoyote09/23/2023 at 01:08 0 comments

    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:

    • What programmable interface are you using?
      • Standard Arduino because it's easy and cheap.
    • Which Arduino model (and pros/cons to each)?
      • I'm just using an Arduino Uno because I have one and it's convenient. The downside is that it doesn't have enough digital pins to make this really easy, but that's minor. The idea is for someone to replace it with a Micro (or a cheaper compatible board), or to just make a small breakout board like https://www.instructables.com/How-to-make-an-Arduino-from-scratch/.
    • What are you choosing for the keypad?
      • As I mentioned, I'm going to use the standard 3x4 Arduino membrane keyboard.
    • What are you choosing for the control pad?
      • I went back and forth with this one. For now, I'm just using a standard analog joystick (https://www.sparkfun.com/products/9032), Maybe I'll try a mini one like in the Switch, PSP, etc.
      • I would also like to consider a thumb-slide joystick (https://www.sparkfun.com/products/9426). My worry with the thumb-slide is long-term use, but I still want to see how it plays.
      • In the future I may also consider something like a click wheel from the 1st gen ipods, or map the capacitive touch from newer ones. There are rotary encoder wheels (https://www.adafruit.com/product/5001).
      • I can't seem to find any flat control pad based on pressure (other than touchpad ones like the steam controller). The closest may be a soft circular potentiometer (https://www.adafruit.com/product/1069), which I could use very similar to the original controller pad.
    • Buttons are still buttons, right?
      • Not much to do with action buttons except have them.
    • What are the main constraints related to output?
    • What are the input constraints?
      • Usually, the keypad uses 7 digital input pins.
      • The joystick uses 2 analog pins.
      • The 3 buttons use 3 digital pins.
    • So what's the problem with the pins?
    • What's the plan, then?
      • I'd like to make the circuit as simple as possible (so fewer chips). Thus, the current plan is:
        • 3 analog pins for the keypad
        • 2 analog pins for the joystick
        • 3 digital pins for the buttons
        • 8 (or 9?) digital pins for the controller output.
    • Any testing?
      • I've been using PICSimLab (https://github.com/lcgamboa/picsimlab) for initial testing before I start breadboarding stuff. You can see the setup below, but there's no way to hook up the keypad through analog in the software, so this...
    Read more »

  • 3D printing tests

    deftcoyote09/17/2023 at 18:21 0 comments

    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.

  • Basic Design

    deftcoyote09/17/2023 at 06:00 0 comments

    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:

    • Using the side buttons and disc with one hand, and the keypad with the other. 
    • Using the disc with one hand and all side buttons with the other (no keypad needed)
    • Using the keypad with both hands and the side buttons with at least one hand.

    This is the inspiration for my design, which has three variants.

    Design 1Design 2Design 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.