Grendel wrote:Just to clear this -- the converter in the current state does not support force feedback effects for the FFP and probably never will. Here's why:

Most gameports back in the day were located on a sound card sharing some pins with the cards MIDI interface. M$ added pin 12 to the FFP (MIDI TxD) and uses MIDI channel 6 to issue FF commands. It's too much work trying to reverse engineer the commands, add a MIDI interface to the 3DP-Vert and modify its USB code to have a fully featured FF device.

A week ago I stumbled over the Teensy development board (silly name, I agree..), got one, and poked at it a bit. Now I have a 3DP-Vert rev3 design that I'm planning to use in a possible 2nd run of the converter

A side effect is that this prototype version is probably the most easy to copy, unfortunately also the most expensive..

Heh, there's some truth in it -- for a non-EE getting a PCB made is a non-trivial task. It's not really cheap either, eg. the parts for 100 boards alone are about $600. Plus whatever the boards will be (loaded). The least I can do is to make it easier to build your own while I'm struggling to get something going

The USB module Atmel uses in their chips (the Teensy board has an at90usb162 stuck to it) is USB 2.0 only, it will not work on an old USB 1.1 port (they should be pretty much extinct anyway..)

USB 2.0 also means faster data throughput, so I decreased the polling rate to 6ms (167Hz) from the previous 10ms (100Hz. Actually Windows violates the specs and polls w/ 8ms, 125Hz). Not sure if the stick will handle 5ms (200Hz) or 4ms (250Hz), something to look into I guess

Figured that one out -- had to implement the HID idle management, Windoze then queries in 1ms intervals. The stick seems to keep up fine w/ a 4ms interval, so now it's polled at 250Hz. Probably the only joystick on the market read out at twice the \"regular\" speed

Well shoot. The \"USB 2.0 only\" might keep me from using this newer version. I have two computers in the basement, one for me and one for my son. One of them is an older one with the old USB. I also think my laptop has the old USB...

It should work as long it's USB 2.0 Full Speed, USB Low Speed is what's not supported. Unless it's a _really_ old computer (like a 386) it should work. A simple test is to plug in a USB 2.0 thumb drive, if it works (and you get that annoying \"this device could work faster\" message in XP..) you are set.

joker23 wrote:Do you have a good way to mount a solderless breadboard like that into a project box, or would the final version be soldered?

The final version would be a custom made PCB, already soldered. The solderless breadboard version is a prototype I used for porting to software to the AT90USB module, it just happens to be easy to copy.

joker23 wrote:It appears that Radio Shack no longer carries the box and PC board used in the old 3DP-Vert.

Yes, apparently the dropped it. Unfortunately I may add, that was a very handy set.

Last week I started playing around with my old 3D PRO and a PIC micro, not knowing that there actually was quite some activity around the topic on the web. I found this forum and this thread while searching for more info concerning the Sidewinder 3D Pro interface.

@Grendel: Seems that in the first converter you have proposed you are using the conventional 555-Timer method with pulse widths representing the axis position. On that newer (2009) prototype I cannot see any 555/556/558 IC, and I assume you are reading the digital output on the button pins. Did you reverse engineer a little to find out how the interface works or do you have a good source of information that you could share?
Also, when I read out the emulated analog output from the stick, it seems to be very jittery. I assumed a software bug, but I checked the code a million times, and it all seems ok. How stable was the output for you?

Edit: taking a deeper look i realised you have been using the digital out from the begining. have you ever tried the emulated analog?

I never bothered w/ the analog emulation since both modes reduce the functionality of the stick considerably (CH: no simultanous button actuations, TM: no slider nor base buttons available) and require calibration. The analog part of the interface is needed to switch the 3DP into digital mode and to trigger it to send the data -- the stick detects the beginning of the RC charge when the 555 is triggered. This can be done by connecting the RC element to an I/O pin, so I got rid of the timer

I used two references for development: Vojtech Pavlik's 3DP Linux driver (Sidewinder.c) and Microsofts Overdrive patent, Patent #5628686 - Apperatus and Method for Bidirectional Data Communication in a Gameport. You definately want to check the patent out, as for code reference I would suggest to take a look at the 3DP-Vert source code (the current r3 code is here).

The digital resolution of the X and Y axis is quite high (10bit each), creating jitter at rest that translates to the mid point of he R chain MS used for the analog emulation.

Small update: the Teensy board went through a hardware revision and now hosts the chip I wanted to use in the 1st place (Mega32U4) I just ordered one so I can update my prototype and port the software. I'll post updated pictures/code once I'm done.

I still don't have a schematic for r3 yet, so you'll have to use the following pictures as a guide to build that thing:

The resistors can be 1kohm if you can't source the 2.2kohm. The two capacitors can almost be any value less or equal to 2.2nF, I've successfully used as low as 470pF. Since I didn't have a fancy DB15F wire-wrap connector I used a regular one w/ solder cups and soldered the pins that are being used to it:

Once you built the thing connect it to your PC with an USB A-miniB cable, hit the button on the board, and use the Teensy loader to program the 3DPro.hex image. That's it.

Very nice project, I have a teensy on order, however my plan is to use this to communicate with a robot control program (a rovio) running on Linux. So it would be plugged into a linux system, and I would probably want to use a different USB protocol (probably straight serial). So is the source code for this project available? Or at least the part of the code that talks to the joystick?

UPDATE: I built it as specified, and it seems to work with Linux as is, so no need to mod the code, great work

Use the following picture as a guide to build that thing, note the wires in the upper left corner (circled in the pic). Make sure it looks the same to prevent the pins from the PBC15F adapter digging into the wires. Also note the corner of the PBC15F adapter close to the Teensy board, I ground it down a bit using some sandpaper. The current version of the PBC15F adapter has an aditional pin, labled 'SH' (shield.) You need to cut it off using wire-clippers so it won't interfer w/ the circuit.

Once you built the 3DP-Vert, connect it to your PC with an USB A-miniB cable, push the button on the board and use the Teensy loader to program the 3DPro.hex image. That's it.

I bought parts to build a 3DP-Vert rev 2 months ago and finally built one a couple weekends ago. Ugh, it took all day - mostly due to the mechanical work of cutting the perf board and the plastic case because Radio Shack doesn't have that nice board designed for the case anymore. But it works great. Grendel, your software is fantastic.

To program it, I just soldered some resistors and wires directly to a DB25 parallel port connector following the \"Programmer Hardware\" example here. I used test clips to connect it to my board, and programmed it using Ponyprog. As you can see below, it's messy, but it worked fine.

Anyway, by the time I was done, I thought it would have been just as easy to design a real PCB and have it fabricated (that's what I do for a living). But, now we have 3DP-Vert rev 3. So, I've done a schematic of the rev 3, and instead of mocking this one up, I'm just going to design a PCB. The only question is, to use a Teensy board, or do a design completely from scratch. I've talked to Grendel about this off line, and we'll see where it goes. Using a Teensy board, anyone can assemble it, and we just have to make PCB's. But a custom design allows Grendel to do some other custom stuff. Unfortunately, though, we have to pay someone else to assemble them because it'll be surface mount parts. Turns out cost is about the same either way for a run of 20-30 boards. I'm not saying this to promise anything. Talk is cheap. But, I need at least 2 more 3DP-Vert's (see below), and I'm not going to build them manually this time. I'm going to get real PCB's fabricated instead.

Why do I need 2 more 3DP-Verts? I was playing Descent and both my kids see it. \"Hey, that's the game you used to play all the time.\" Next thing I know, I've lost my joystick/3DP-Vert because they want to play Descent now. It's about time! They never seemed to care before, but they took to the Pyro like old pros. So, I need to build two more 3DP-Vert's. Ha!

Hi Everybody
I found this site by google searching for solutions to get my FFP working with 64 bit windows.
Thank you so much for developing this! I have never found another stick I like and I just can't bear to get rid of it.

I've ordered the 'tiny' board, will head to radio shack this weekend for the other stuff. I'm not skilled in electronic stuff, but this doesn't look too hard.

If I get this working, i may just have to dig out my old copies of Descent! Who all can I pester when I start putting this together?

So what I did- I got the Breadboard + wires kit I linked in my post above. $13.48, which is only a bit cheaper than if I got 2 of the ones linked in the post directly above + a wire kit. If I were to do it again, I would go that route. I cut my long board in half w/ a hack saw and used both pieces to make 2 converters. I made some improvements in the building- I cut off the overhanging PCB from the gameport plug, and on the other side, I used a hot wire to melt a small hole and screwed down the plug so it doesn't wiggle around. I then covered the whole thing in duct tape for a nice ghetto finish!