I'm entering this discussion rather late, which is also part of my story - I've had quite limited online activity almost for a year in a way, but especially starting October. I moved a year ago and have been renovating ever since, switched over internet access, had a blown up computer, you name it, it's happened all this year. Not to mention the day job and overtime to help pay for all of this.
As a result I have only had time to pay attention to the most critical emails and I still have about 100 unread over the past few months. In skimming some, I saw the program request but didn't reply, partly due to prioritization of my online time, and partly because I've had a lot of these requests and in some cases people would write back flames for not being willing to give something away for free, etc, so with my little free time, I decided to dodge those emails after a certain point. Beyond that, I don't feel a need to justify.
Yes it's a hobby and founded on sharing, but at this point in time for me, it's a hobby that's been pushed far aside for other things. I still don't even have a cabinet or proper control panel even. I'm aiming for THIS coming year, to make a cabinet. I have enough Home Depot experience now at least. Every time I'm there looking for renovation materials, I can't help look around for things that may also be of use in a cabinet.
Regarding my interface design, I chose Pic because I already had a programmer and some experience in the coding, and had never programmed an Atmel. I didn't see any advantage in trying to learn atmel just for that, even building the no brainer download cable wasn't worth it when I had a PIC programmer right there. The only thing that made me even think about switching is the in circuit programming option, but I also didn't see any need to reprogram the chips once the code matured - there's only so much you can tweak in that kind of project before it's good for life.
I only used the 6 input method per joystick rather than trying to go down to 4 or 3 pins because with my code as it was, I was having bouncing problems, it may be just my original concept needing an adjustment but what I found with only 3 or 4 inputs was...I could over-turn the joystick too fast beyond that set of 3 or 4 inputs, and it would look like a backwards rotation even though I'm still going forward...if that makes sense...Back when I was given the 6 input concept, the first thing I tried was going with 3 or 4 inputs but I thought why bother, I decided to use 2 chips anyway so I had enough inputs to go with all 6 inputs and not have to tweak code.
So why did I go with 2 chips instead of 1? Also probably just my code problems but I found that with 1 chip (I started with a single 40pin chip 3 years ago) I wasn't reading the 2 joysticks fast enough. I would miss rotations. Back then, however, I was still reading all 12 inputs, times two joysticks, so that was one possible problem. Also another problem, I started out with just 1 joystick in the program, then when it worked, I tried to tack on the extra joystick and had some trouble so I kind of did some redundant coding, but in the end it gave problems and I didn't have time to worry about it. That's when I switched to the 2 smaller chips with 1 joystick of code each, which I had already proven to work with no problem, and even with using 2 chips now, they were combined still less than half the cost of the original 40pin chip so I thought that's a good enough improvement in design for now, and that's the first time my costs came down.
My first prototype code, I forget how long it actually took but I consider it to be a week of development because I had to keep modifying it for the timing and trying to get 1 joystick converted to 2 joysticks, having problems, etc. I had to work with the output debouncing, and the input debouncing a lot, I was getting a lot of timing problems on reading the inputs because if I remember properly, at least on the yellow joysticks, there's one position on the switch where it seems to be worse for bounce. I dont' know if Happ ones are the same, or if it was my imagination, but during a 12 position test rotation, one of the transitions would bounce backwards until I made the debounce ridiculously overdone. Maybe I could have optimised it more, but maybe due to all this debounce, I also had trouble with my timing with 2 joysticks in one chip, that and having more pins to handle than 3 or 4 per joystick.
The circuit being made for about $7 is all fine, but when you factor in the assembly time if you're doing that in bulk, and the cost of having the custom circuit boards made and shipped to you, and other overheads, $7 isn't really what you end up with. Hobby, maybe...if people build it themselves....but again, even if people have electronics as a hobby and can very well make the programmers and get the parts and solder the proto boards, Im' guessing many people still don't have time or energy for it. I used to but not anymore. If I saw the website with the plans and code, I'd still probably email the person asking if they offer a shortcut kit or assembly.
As for sharing everything freely, I used to back when I started, I only developed this circuit for myself in summer 2000 because I wanted to play Ikari and I found some joysticks on Ebay, thought it can't be that bad to figure out how they're wired, and I made the program. I forget how I discovered that there was a demand for this but I put up the website and had the source code and schematics and all, and people still preferred to have me assemble it. Back then it was 3hours to do a proto board version, which is also why the initial cost was much higher for me, all that extra labor, again I was using all 12 inputs per joystick with the first design, a lot more work too.
Eventually I decided people didn't really seem to care about having the code/plans, so I stopped supporting it, as well as offering programmed chips even for people who just wanted to solder it, without programming. Noone seemed to really want anything except a fully assembled unit, which I would too. So I left the site with just enough info to debug a messed up circuit with the schematics, since I was using proto boards and maybe there's a bigger chance something could get damaged and need fixing/tracing. I always thought I was doing just fine with this level of sharing I was at.
Maybe eventually I did become protective of the code, at first I was happy to spend hours building these things without considering the money, I felt better about the fact that people appreciated my design work, and it was unique so it was even more appreciation. I was a student so the money was useful but secondary. Then I got out of school and had a while with no job, and the proceeds from this interface were very helpful and worth protecting. And now, with a job, although I have a normal work situation, I also have a lot more things to pay (like this year's renovation) and just selling a few of these interfaces actually makes a big difference. Comparing my salary to selling a few interfaces, it looks negligible, but it definitely makes a difference in reality when you have a bigger home depot bill than you have in left over monthly salary. So currently this is why I am protective of this code. I have no idea what the future holds. I haven't intended to hold onto it forever, but I had no plans in the near future to go public again.
I do wish I could further optimize the circuit and lower the cost. I'm on my 4th optimization right now but maybe I'll someday try to get it back down to 1 chip, make a smaller board that's cheaper to make, faster to assemble and test, and make it more affordable. Right now with renovation, my tools are all boxed everywhere, I have no work space, and it'll have to wait. Perhaps when I start working on a cabinet I'll get inspired to work on that too.