Enter the "Zero Delay" USB joystick encoder. A great solution to attain that retro feeling!
This entry isn't as much of a tutorial but an over view of a device that has been selling on the net known as a "Zero delay USB Joystick Encoder." It goes by other names such as a a "DIY Arcade replacement controller" or a "DIY Joystick control board." Either way you slice it these boards are coming from China anywhere from as low as Three U.S. Dollars to as much as ten U.S. dollar depending on the features you want such as wiring harness and USB cables. Would you like to know more?
"Note: If you get a black screen but the audio is playing. Or you got a potato PC and it's studdering. We have fallback Links below."
Video tutorial fallback mirrors:
In case you have no-script enabled or for some reason cannot see the title video on this website. We have provided direct links for these videos. For more information about the standards we use on this site click here if you would like to know more.
AV1 - Link MP4/.h264 - Link OGV - Link
The need for joystick controllers.
Initially, in order for you to make your own joystick you would of course first collect all of the parts such as the joystick, buttons, wood, and finally the controller. When I first went down this adventure I bought an I-PAC controller which had great software and did the job perfectly but unfortunately was almost $40(USD) in price! While it was great to get a controller that served as a near-zero delay system that I could hook up to my PC. I decided to look for cheaper alternatives out there. Initially we thought it would be awesome load some virtual joystick software on a USB compliant aurdino. It turns out that China has beat us to the punch on this one. For this blog we purchased the 7$(USD) kit as it came from an American vendor on Ebay. It came with the following items:
- The encoder board.
- a USB male A cable to 4-pin Molex connector
- 10x red and black joystick/button connectors
- 1x joystick connector.
Notes on the 3rd party knock off Chinese joystick and buttons.
Usually, when you search for the zero delay controllers they will be paired up with a joystick set that you will normally see below.
Picture above: A 2-pack of knock-off china buttons and joysticks.
The wiring harness is only compatible with the buttons and joysticks that china provides (but that does not stop anyone with a soldering iron!) These buttons and joysticks are not quality by any stretch of the imagination! (we're also including the knock-off HAPP products in this too. Yes, we're very much aware there are HAPP products that are knock-offs too). When you see these types of buttons appear on eBay/Alibaba, They'll describe themselves as name brand buttons. But are in fact knock-off Sanwa buttons.
Complete sets typically sell anywhere from $14(USD) to $28 USD. Compare that to a Suzo/HAPP/Seimitsu kits and you could pay that much for the joystick alone! It should also be noted that due to the nature of these being china knock-offs of legit joystick controllers. They may also come in under different names. Are knock-off buttons and sticks bad? Depends! If this is your first time building a fight stick and you're not really sure on your investment. Then go nuts. But if you really love arcades and fighting games. You might want to go for the real thing.
The quality on such third-party knock-off controllers are overall lacking which is why I only bought a handful of switches for my project. Although they are cheap feeling the major advantage of these buttons is they are very shallow allowing us to easily fit into project box cases like the ones we tend to use.
The joystick encoder board.
When you look at the board itself there isn't really a whole lot going on. Initially, these boards came with a PS2 connector. Thus, why the button layout will be similar to that of a PS2 controller with R1, L1, R2, L2, etc. But there isn't a whole lot going on here because China threw some electrical epoxy onto the chip. The big thing we wish to point out to you is the mind where the traces are. Notice how the bottom of the board all of the traces are connected together? That's ground.
PSX/PS1/PS2 version.
What do you mean "Initially these boards came with a PS2 connector?" I want to hook one of these bad boys up to my PS1/PS2!
Although not as abundant or cheap as the Zero Delay Encoder used in this blog they are still available. If you type in "Zero Delay Encoder PS2" into eBay you should get results for a handful of these controllers. Please keep in mind that because half of the eBay community does not even know what they are selling that you will have to look out if the board you are purchasing has the PSX Connector pictured above. Ideally, the vendor should be able to sell you the male PSX wiring harness to go along with it. Prices on these boards can range from $12(USD) to $30(USD) depending on how complete of a kit you want to choose.
Special notes about the wiring.
Zero Delay Joystick Adapter from the backside. Picture compliments of one of our readers Chris.
Thanks to a kind reader for straightening this all out for us. We used to think that the Chinese inverted the wires on it as we thought that ground was what is going all around the board. It turns out after verifying the traces ourselves that actually 5vdc is going around the entire plane of the motherboard. So the Chinese were technically right about their wiring. Meaning that if you were to wire all of the buttons into an adapter then you should daisy chain the red leads! Not black!
From an electrical design standpoint, it's still wrong! you should not have voltage running on a thick trace that would normally be a ground plane. Because now you have to take some extra care with this board if you intend to solder this bad boy down to something. You don't want any screws or washer to dig in or else 'POOF'. Thus, the correct terminology we should be using is "COMMON" that 5vdc is classified as common. And thus, it's standard wiring practice to daisy chain the common line around your sticks and go out to one single port.
Extra parts and tools:
The amount of parts you may use will totally be up to you and what you want out of your joystick encoder. Here's a list of my parts.
- Hammond style ABS plastic box
- 4x rubber feet
- 2x "Knock-off China" SPST buttons for "start" and "Select"
- 2x panel mounted RJ-45 female connectors
- 1x panel mounted USB "B" Style connector
- 1x DB15 female connector.
- 1x DB9 male connector.
- 4x SPDT switches (extracted from old cash register drawers)
- 3x small SPST buttons (used for the function mode buttons)
- 2x LED's with holders so we can mount the LEDs to the outside of the case.
- Big pile "O" wire!
Alternative parts:
For those who are totally not feeling the soldering part of this blog. You can pick up what are known as "Terminal breakout connector" And they come in a variety of types and sizes. What is pictured above is male DB9 and DB15 but you can get them in both male and female components. These are super handy because if you mess up a wiring configuration you can simply rip them out and start over with a simple flat head screwdriver.
The downside of these is they are a little more expensive then just getting a header which you could get for free out of old computer screw or almost nothing from your local electronics store. Simply clip the alegator clips off with your cutter/plyers and slide them into the breakout connector. Use a flat head screw to tighten the wires in place. done! The C=64 / Amiga / Atari joysticks are expecting DB9 male at the base. The Cobalt Flux DDR pad is expecting a DB15 female at the base.
Tools:
- Soldering Iron
- Small screwdrivers to lock the panel mounts into the ABS plastic and for tapping screws on the top cover of the case.
- Dremmel with drill bit for carving out our holes in the ABS plastic
- Files for smoothing out edges and for making the square edges a little cleaner.
- Continuity tester - For actually making sure that you are connecting to the right pins on all sides.
- pliers and/or wire strippers for soldering all of the connectors in.
Explanation of parts for our joystick encoder.
For me I wanted something that can test my C=64 and hook my cobalt flux DDR pads to right away similar to my v1 box I did with the I-PAC controller. But also be able to hook up RJ-45's like my version 2 I-PAC box. Unlike the I-PAC which maps to a keyboard this encoder board maps to joystick.
Hardware switchable input.
If anyone has ever tried the Xbox 360 dance dance universe pad on their PC. You'll know this problem very well where if you step and hold pads in the opposite direction the D-Pad only registers one direction. By adding 4 single pull switches into the mix we can redirect the direction pads to buttons allowing this joystick encoder to be used in situation like DDR/Stepmania holding all 4-6 buttons if we really wanted to.
Assembly of our joystick encoder.
This is one of my not-so-proud moments in cable management. But it was totally unavoidable given that you have wires coming in from four different ports and the switches as well diverting direction pads to shoulder buttons of this controller. But it actually assembled very well. You'll also note that the USB "B" connector also has the wrong wiring color for everything and had to do a continuity test on that as well prior to plugging it into the PC.
Finally, the board itself is held down by Velcro as it doesn't need much to remain seated and stable inside of the confines of this box. The small LEDs were de-soldered off of the board allowing larger ones to be routed to the outer half of this case. The LED clamps allow for easy removal in case we ever have to eject this board.
Installing the joystick encoder board.
This is by far the greatest feature of this little board is that the moment you hook it up to your PC, or Raspberry Pi, or even Mac, it finds drivers for a generic joystick and that's it! Pulling up the Hardware ID gives a VID_0079&PID_0006 Which simply put is a Generic USB Controller device ID that has existed from windows 95 all the way to today with Windows 10.
Verification of joystick functionality.
To pull up the window above. You can press the window key + R to bring up a rum prompt and type in:
joy.cpl
Then click on the properties button. Alternatively, you can click on your windows logo and click on settings, devices, connected devices, and scroll down to devices and printers. Right-Click the Generic USB Joystick in Devices and Printers and click on properties. From here you can take a flat head screwdriver and touch the ground with one of the signal pins to activate a button. Or, Plug the wires into buttons and begin pressing them to start building your very own DIY joystick.
What are the Pinouts of the joystick encoder?!?:
We've included a video showing you the pin configuration layout that we are currently using to give just a few examples as to how you can use this zero-delay controller for your future projects.
Now we shall break down the pins on the PCB matching them to all of the connectors shown in the video for you to understand what is going on in our project box. Excluding the USB "B" connector Pinout i'll try it break it down for you:
Input | PS2 | RJ45 | DB15 | DB9 |
---|---|---|---|---|
12 | Trigger 3 R | - | - | - |
11 | Trigger 3 L | - | Pin 10 | - |
10 | Select | RJ45 #2 Pin 7 | - | - |
09 | Start | RJ45 #2 Pin 6 | - | - |
08 | Trigger 1 R | RJ45 #2 Pin 5 | - | - |
07 | Trigger 1 L | RJ45 #2 Pin 4 | - | - |
06 | Trigger 2 R | RJ45 #2 Pin 3 | - | - |
05 | Trigger 2 L | RJ45 #2 Pin 2 | - | - |
04 | Square | RJ45 #2 Pin 1 | Pin 9 | - |
03 | Triangle | RJ45 #1 Pin 7 | Pin 8 | Pin 5 |
02 | Circle | RJ45 #1 Pin 6 | Pin 7 | Pin 9 |
01 | X button | RJ45 #1 Pin 5 | Pin 6 | Pin 6 |
AD | D Arrow | RJ45 #1 Pin 4 | Pin 3 | Pin 2 |
AU | U Arrow | RJ45 #1 Pin 3 | Pin 2 | Pin 1 |
AL | L Arrow | RJ45 #1 Pin 2 | Pin 4 | Pin 3 |
AR | R Arrow | RJ45 #1 Pin 1 | Pin 5 | Pin 4 |
GND | GND | RJ45 #1 & #2 Pin 8 | Pin 1 | Pin 8 |
Please note: Due to the design of the PCB. The zero delay controller is working in reverse polarity. Thus, GND is actually +5vdc when you start looking at the table. A better term is to label this as "COMMON" since all of the connectors share a common connection to 5vdc and ground goes off to the chip itself. Just to run through what the connectors are again:
- Input - The input source written on the USB joystick encoder board.
- PS2 - What the button represents if it were hooked to a PS2 joystick. (only relevant if your USB joystick encoder has the additional PS2 port on it.)
- RJ45 - This is a proprietary port set that we use for joysticks as it presents a cleaner approach to hooking joysticks up. See this blog article about the V2 stepmania pad.
- DB15 - This is for the Cobalt Flux version 2 dance pads. There are other dance pads which also use the DB15 connection system and you may have to make modifications.
- DB9 - This is our Atari/Commodore 64/Amiga Ports used for some really old joysticks. Keep in mind that the typical joystick only has one button thus additional modification may be necessary to get more buttons onto your old joystick.
Four switch DDR mode.
When the four switches are flipped up the following keys are remapped:
Input | PS2 | RJ45 | DB15 | DB9 |
---|---|---|---|---|
8 | Trigger 1 R | RJ45 #1 Pin 4 | Pin 3 | Pin 2 |
7 | Trigger 1 L | RJ45 #1 Pin 3 | Pin 2 | Pin 1 |
6 | Trigger 2 R | RJ45 #1 Pin 2 | Pin 4 | Pin 3 |
5 | Trigger 2 L | RJ45 #1 Pin 1 | Pin 5 | Pin 4 |
Please note: With the zero delay controller we are working in reverse polarity. Thus, GND is actually +5vdc. It's important to keep the trigger buttons clear so that when switching back and forth with the DDR pads that they do not interfere especially if pin 10 is enabled for sessions such as "Pump it up" where diagonal pads are used and the center is also counted as well. Also, by switching the controls from directions on the joystick to buttons allows us to press all of the buttons on your DDR pad without any interference or extra software support such as XBCD/xb360ce needed with the Xbox 360 DDR pads. The reason why the Custom RJ45 connector goes to these pins is in the event we hook up a fighting stick which will utilize many of the buttons this controller has to offer.
Final Thoughts:
This really should be considered as my "Version 3" DDR joystick encoder project as it cuts the cost of the controller board itself by 80 percent over the I-PAC controller. Outside of the bizarre fact that the voltage is going along the outside of the circuit, the only other thing I would probably add to this mod is some 0.1uf capacitors bridging between each connection and ground to at least attempt to fight static electricity that could happen when playing with dance mats on faster songs.
What I did is super over-kill and if you want to just set up this controller for a single function such as a fighting stick or a DancePad then you will not have the scary wiring nightmare that is going on within our black box. The zero delay joystick encoder certainly gets the job done and it makes it exceptionally easy to add a joystick onto any computer be it a full PC, Raspberry pi and so-on.
For its super low cost we couldn't even feel bad if it sets itself on fire. But for now it's working like a dream. You can find these on Ebay super cheap too. We say that it's worth it.
Update 02/25/2019 - It has come to our attention that we may not have done our research on the arcade joystick and button world. To which we do apologize for that. Although we never claimed to be experts of anything! This blog only serves as a reference point for myself and others to follow along if they choose.
There are reputable vendors out there that will sell you HAPP, Semitsu, and Suzo branded joysticks based on your preferences and tastes. If you find an error in what we say. Please! Leave it in the comments below. There's absolutely no reason to go into full-tilt nerd rage!
END OF LINE+++
I have a question/problem. I am using this board so I can use my Atari joystick in RetroPie.
I have my Atari connected to a 9-pin breakout connector. PINs 1,2,3,4,6 are Up,Down,Left,Right and Fire button. PIN 8 is ground. So on the USB board I wired 1,2,3,4 joystick to the boards Up,Down,Left Right. All 4 use the same ground PIN 8. The fire button I ran to button 1 on the USB board. Again, the ground is wired back to PIN 8. The problem is that all directions and the button are seen as the same action. In RetroPie it find my device then wants to map for first time use. If I press Fire or any direction, the system thinks I’m pressing the same 1 button. Does this have anything to do with the above statement, “ Meaning that if you were to wire all of the buttons into an adapter then you should daisy chain the red leads! Not black!”
I’m thinking this issue is because all 4 directions and the button on an Atari stick all use the same ground. Does that make sense?
That is correct! I ran into the exact problem you are describing when I first wired up the controller. I talk a little bit about this problem is the category "Special notes about the wiring." It's both right and wrong.. It's right in respects that +5vdc is the HIGH or HOT line and black is Ground or Common. It's wrong in respects that in most electrical circuits like Arduinos, Atari 2600 consoles and practically any SANE electrical setup the HIGH line is your signal (+5vdc) and your Ground is "common." the Chinese have this completely reversed!
In your atari joystick for example (same as my Waco sticks in the video) common/ground is daisy-chained between all of the switches. Because the Atari is expecting pin 8 to be ground. Which if you follow the wire-colors from the kit you've effectively bound ALL directions AND button to one there-for every switch turns every direction. This is why I mention that you put red to pin8 and then all of the blacks go to your signals.
Hope that clears things up!
Yep, that was the problem. I had to reverse the black and red wires which worked. I use the same Waco joysticks I purchased in the 1980s! They’re my favorite. With the USB board, I’m using it just for Atari emulation. My current setup with my Waco joystick in RetroPie is cool but I’m replacing it with the USB board. I currently plug my Waco into an Arduino which I’ve programmed to send key presses. The Atari emulators accept keyboard input so it works out. The Arduino plugs into the USB port on the RetroPie. It works great! No complaints! But it ties up my Arduino. Thanks for your reply. When my setup didn’t work I assumed I did something wrong or it was a bad soldering job....but no....it was the Chinese!
Hi, I have a couple of Zero Dalys boards with 2 joysticks for my upright arcade machine.
The problem I have is that the Player 1 board is always the Joystick 2 in Windows.
And the Player 2 board is always the Joystick 1 in Windows
And I would like to reverse that, so the P1 would be the Joystick 1 in Windows.
I have connected first the P1 and the the P2, and the other way too (first the P2 and then the P1) and in both cases, the P1 is always the J2 in Windows.
Do you know if there is any chance to reverse this?
Thanks in advance
I've heard of this problem before. Currently, I only have one of these controllers. Which means!!! Since a few users have mentioned this issue to me I am going to have to revisit this and purchase another controller to see what's going on here. Of course getting another may take a little while due to the 2020 situation. but once we get one i'll test and see what's happening here.
Thanks for bringing this to my attention!
is there any hack to add an extra or extra buttons???
there are no other usb joy boards available it seems and they all have the 12 buttons and provision for 1 dpad/stick
im desperate, using a zero delay to fix a not working USB N64 Controller. however it has 2 directionals and 9 buttons.. total of 17 inputs.
just need 1 extra
so i see the board has the option of changing the mode which changes the directional input from sending AxisX/Y to Hat X/Y ... so it has the ability to send both types, but i need both similtanious. and since it has both joy inputs for micro switches and 5 pin i thought perhaps there would be a way to mod one of them..
or maybe there is a way to add an extra button easily?
An awesome article, do you have any advice on how would create a arcade stick with directional inputs being keyboard directional buttons instead on the conventional joystick?
My 1st generation DDR controller was based around the I-PAC-ve to which there's another article dealing with that. Link is here. . But when it starts at $50 (USD) for the controller that may be a little too rich for some people. To use this exact controller like a keyboard (or any joystick really) there's a program we've used in the past called joytokey.
https://joytokey.net/en/
It works out rather well. There's variants of this program for mac and linux as well.
Thanks for checking out this site!
The grounding wire/signal wires being the wrong way around confused me at first as well, BUT they are technically correct as this board uses a common signal/5V. Essentially every button/switch is permanently connected to 5V and the signal is made when they connect to earth:
https://www.s-config.com/core/wp-content/uploads/2019/02/5v-trace-Zero-Delay-Controllers.jpg
Hey Chris,
Just wanted to give thanks for the update. I'll make sure it's still the same with my board and revise the article accordingly. Don't want to give out bad info.
P.S. I only edited the response to transfer the image to my site so it shows. Thanks again.
No worries glad I could be of help. Not to be outdone in the confusing department the latest versions (or possibly clones) being shipped direct from China right now under the name "ZERO DELAY" look like this:
https://www.s-config.com/core/wp-content/uploads/2019/02/Zero-Delay-Controller-USB-F10.jpg
I cant tell looking at the traces if this is common ground or not, and to make matters worse it ships with non colour coded wires! It also appears to have a ceramic cap where the crystal should be so the rapid/auto fire function might be a bit dodgy. I did try to order one from AliExpress but what arrived was a standard board like you are using.
Awesome man! Thanks so much for the updates! This is actually good to know and now I want to get one of these 'updated' versions in case a flood of questions start rolling in. Not only for their crystal replacement but they also got rid of the 10uf and 47uf filtering caps on C4 an C5. This makes me wonder if the F10 controller is going to have a higher failure rate from users plugging them into USB ports and blowing the chips from it not being able to accept any power variance coming off of a desktop or laptop. I also have to test these on dance mats to see if they are even less tolerant of static electricity during heavy songs then the first gen.
I'll try to update this blog again the moment I find a vendor that legit has one of these new F10 boards. Again, thank you very much!
I did wonder if the static build up problems and power variance problems were directly related to the common 5V design. Essentially having an unbroken 5V DC "ring" surrounding all the other components is a recipe for creating an electromagnetic field. Even if the new board is still common 5V it seams to be limited to the button side of the board which may solve the problem or at least limit it so the surface mount caps can handle it. BUT who knows I've given up trying to figure out Chinese PCB logic LOL. There is also a Black zero delay board and a 2 player model floating around too but I've never seen them in person.
If you do find a supplier of the F10 let me know as I've been using stripped down xin-mo boards to convert retro game-pads and joysticks but the lack of bulky components on the F10 might make it usable.
Yeah, BUT How do I wire my old DB15(2-line) Flightstick for use with this Zero-Delay Joystick adapter? We are talking about something that uses 3 500k potentiometers and some have the "HAT" which might be useful for others.
Although the Zero Delay USB Encoder talks about AU, AD, AR, AL the "A" being analog. For your application something like a DIY Arduino solution would be more suitable for your project. I haven't done a Arduino controller. I hope to cover that later on in the year. But there's plenty of sites out there which can help getting analog control working for your flight-stick.
Anyhow, best of luck.
cants use it on 2 player... i have 2 of items plug in same hardware ids and now i cant use the other 1...
please send me a solution for my problem so that my diy cabinet can be use...
We can't really provide you a 'solution' to your problem because there's too many variables that could be happening here. We don't know your hardware configuration. We don't know what troubleshooting steps you've already taken. How are you diagnosing your joysticks? Are you using joy.cpl like in the video above? or are you troubleshooting input controls from your emulation software?
The best we could give you is some tips on troubleshooting in an attempt to see what is happening.
Just because they share a the same ID's does not mean they cancel each other out. If this was the case then you could only hook one Xbox 360 controller to a PC at time. Since you used the term "hardware ID" I'm going to assume you're running on a windows OS. In which case I would recommend checking device manager to see if you have two "HID-Compliant Game controllers" underneath your "human interface devices" catagory. If necessary . Plug player 1 in by itself and see if it powers on. Then plug player 2 in by itself. This is to verify that each of the controllers are online. Now, with device manager open plug in player 1, wait for it detect, and then player 2. We must first determine if you have a DOA controller or more importantly if one of your controllers is drawing too much power knocking your other controller offline.
Have you tried these two controllers connected on another PC? That's another way of determining if the USB adapter on your current setup is not correct. A work-around for low-powered USB ports is installing a USB hub that supplies 5vdc power externally. The encoder only need around 100Ma of power, but laptops sometimes will not go past 200Ma without shutting down devices.
Excellent write-up... Hoping you can help with a question I have... I have a zero delay encoder board like the one you have pinned-out here. My joystick is plugged into the Sanwa 5-pin port with a flat cable and everything works fine however I’d prefer to wire this to an iPac2 that I already have in my cabinet to eliminate the extra encoder. The AU, AD, AL and AR connections are obvious however I’m assuming I connect the VDD to 5V but where do I tie in ground since the harness is only 5-Pins and appears to use a common ground on the ZD board?
I have the IPAC board as well. Just the Ve edition but still. VDD should be ground as your AU, AD, AL, AR pins are all signal pins. similar to your buttons. In case you want to be extra sure you can check it with your multi-meter and you'll find that pin 5 goes off ground that way in a continuity test.
Hope that helps. Thanks for checking out this blog!