Sunday, July 27, 2014

I found a controller at a junk shop for $5, and figured I would mod it onto a console. For the longest time I couldn't figure out how to add it to a console because I didn't know which cable was which. Now I figured it out:
Orange: +12v (connects to a 7808 regulator so the voltage range should be greater and lesser than 12.)
Black: Ground
Brown: Ground
Red: Right Audio input
White: Left Audio input
yellow: Composite video input
Now I can finally build it into something. Maybe my new Sega Genesis 3, since it will fit right on the face of it and hopefully can share the same +10v power supply!

Monday, July 14, 2014

After years of struggling with Sivava's Willem Programmer, I decided it high time to make a new affordable option. A new option which will remain open source so that everyone can made modifications and improvements to both the hardware and software.

If you own a Willem programmer, you're probably concerned with how difficult it is to get running and even once you do, it probably does a shit job of programming and reading proms of any sort. Mine in particular will program any and all 8-bit eproms, but once I use the adapter to interface with 16-bit eproms, it fails miserably to finish a write. Sometimes it doesn't even make it past the first byte ... Another person I know can program the 42-pin 16-bit eproms, but not the 40-pin versions. Together, lets fix that.

The idea is that the arduino Mega has an external memory interface which will natively (kinda) read and write to various RAM modules, so whats keeping it from reading and writing eeproms? If you erase the IC's and follow the specs in the datasheet, it has to work! Whats even better is that it will be fully USB compatible and has a massive number of GPIO just waiting for expansion.

For starters, I want get it working with both 32-pin DIP eeproms and 32-pin PLCC eeproms. Then I want to add some sort of software controlled relay or transistor switch to control VPP which is +12v. VPP is required to program older UV erasable eproms. A simple and small 7812 can be used on the board to get +12v and since the VIN or RAW pin will connect from the Mega, a single wall wart PSU can power both the arduino and the VPP. If just flashing or reading eeproms requiring only +5v then just the USB connection should suffice.

Here is what I have so far. Please give me suggestion on how to switch our VPP signal to different pins of the ROM via software. It may potentially need to go to pins 22, 1, or maybe even others. WE can figure those out later. One thing that I may change later on is adding a 42-pin socket instead of a 32-pin socket and removing the PLCC. If that were done, then the board could support more chips without so many adapters but to program a PLCC one would need an adapter. These are quite cheap though.

Wednesday, July 9, 2014

The Service manual for the Casio CTK 150 is not available online, but it looks like the CTK 100 is! Obviously the two have very different CPU's and very different circuits, but the two also have the same number of keys and are in the same series of keyboards at least. Both keyboards have 4 octaves plus one key for a total of 49 keys. Here is the supplied key nomenclature picture:

It applies to both the CTK 100 and CTK 150. There are several methods of reading a key matrix, but clearly this is a multiplexed matrix because of all of the diodes. Wiring a multiplexed matrix to a microcontroller, or keyboard CPU in this case, is as simple as this:

With some specially wired buttons and diodes, you can read a massive number of button inputs, as many as the columns times the number of rows. This brings me to my next point: the logic table of the matrix. The logic table visually illustrates where a button lies in respect to the columns and rows which are the Inputs and Outputs. The picture below shows the table for the CTK 100, which after much probing and inspection is the same as the CTK 150. I have removed the unimportant choices, but only because I cannot use them in my own circuit. There are 15 pins that I had to trace back and name according to the table below:

At long last, I came up with the following; this is the pinout of the 15-pin ribbon cable to the key PCB in the CTK 150:

1. KO0
2. KO1
3. KO2
4. KO3
5. KO4

6. KI2
7. KI3
8. KI4
9. KI5
10. KI6
11. KI7

12. KO5
13. KO6
14. KO7
15. KO8

Each input has to have a pull up resistor, but arduino for example has programmable pull up resistors built in. All you have to do is activate them via software. With pull up resistors, every time you read a row, you will read 1 and if you write a 1 to your outputs, all inputs will still read 1. To read a button press, you must write 0 to a column and read all inputs. When 0 shows up from a column to a row, you find your "note" or button press. The idea behind multiplexing is writing and reading very quickly so that you get the illusion that you can read all buttons at once. It would be common practice to rotate a single 0 and all 1's to your outputs and read the inputs repeatedly.

Arduino supports PORT manipulation, so I will be using two ports to multiplex the inputs. The IN port will have only 6 pins and the OUT port will have to be made up of an 8-bit port and two other Digital inputs. I will demonstrate this later on. One more thing to note before I go is that KO8 (or the 9th row) has five blank spots. This row uses a whole input for only 1 button instead of 6 which means by adding five more buttons and 5 more diodes, I can add 6 more user definable inputs without using any extra GPIO's! Since I am out of musical keys, the buttons could be used for other variables like holding gate open, changing the waveform or anything else. I could even use two buttons as an octave up and octave down selection to expand the range of sound I can make with only 49 keys. After the hardware is designed, anything can be done with software.

Check back for part 3 when I write some code and hook it up to an arduino of some kind.

EDIT: Apparently I lost this in a move at some point. There will be no part three...sry

I found this crappy casio CTK-150 at a yard sale for $5. No MIDI communication, only an 1/8" amplified audio output, something like 5-selectable volume choices and a mono speaker. The plastic keys are not the worst I have come across, and for $5, that is about all it has going for it. I don't even care about the "twinkle, twinkle little star" sound loop; this thing can do better. Hah

I decided that I would salvage the keys to build into my modular gear (at the time of writing includes only a Pittsburgh LFO2 and a Ninstrument's Synthboy+ with MOD3). The idea was that I could either hook it up to an arduino to read the keys and output to a DAC or op amp to CV and possibly Gate. The first step was finding some decent looking wood. Over the holiday I scavenged through my mom's garage and found a cool shelf probably as old as I am. They really don't make things like they used to since this is made from hard-wood as opposed to particle board like the more affordable ones are. The sides are about 12" long and have a gentle curve, which I couldn't have cut even if I wanted to. (no tools, you see)

Now that I have the side panels, I needed to cut the keyboard to pieces. Removing the sides, buttons and guts to shrink it down and find places to mount to. The keyboard seems to have a nice 90 degree side panel at the exact place I would like, so mounting will be no problem. I think I would also like to add a place for mounting some modules either laying flat or at an angle so that I may make a portable kit of sorts, depending on how much spoace I have protruding from the top of the keys.