Sunday, June 21, 2020

DIY NES to Atari Controller Adapter

I wanted to use my favorite NES controller with my controller-less Atari 65XE and 130XE. The NES controller uses a shift register, while the Atari expects 5 simple buttons. I wrote a simple Arduino program to convert one to the other. Using an Arduino mini, it fits in this little inline enclosure.






#define strobe 3 //PORTD
#define clk 4
#define data 2
void setup() {
DDRD = 1 | (1<<strobe) | (1<<clk); // NES outputs
}
void pulse_pin(byte pin, byte del) {
PORTD |= (1<<pin); //set
delayMicroseconds(del);
PORTD &= ~(1<<pin); //clear
delayMicroseconds(del);
}
void loop() {
byte btns = 0;
pulse_pin(strobe, 10); //latch the controller
for(int i = 0; i < 8; i++) { //read 8 bits
btns = btns << 1 | !(PIND & (1<<data));
pulse_pin(clk, 10); //clock next bit
}
// atari output d12-d8, open collector
DDRB = (btns & 0xf) | (!!(btns & 0xc0) << 4); // dpad + A||B
}

Thursday, June 11, 2020

DIY 1702a Programmer

I've resumed working on the PAiA 8700 computer. It uses some very old, and hard to program EPROMs: 1702As. They require +37V, +47V, +59V and ground to program.

I've come up with a relatively easy to build DIY programmer. It doesn't require a parallel port, or dozens of transistors. It's Arduino based, and uses mostly common parts.
Here's what it looks like:


And here's a schematic:


A boost converter daughter board is used to generate a high voltage, over 60V. It then gets regulated down to the various voltages needed. IC1 (TL783) has to be calibrated to +47V, then the other voltages will fall into place.
An Arduino nano is able to manipulate the high voltages through three ULN2003 transistor arrays, and one IRF520 MOSFET.

Right now the code is very crude, but functional. It's on pastebin here. The binary for the 1702A is included in the Arduino program. On power up/reset the programming sequence begins. It's finished when the pin 13 led stops flashing.

I've now added the Eagle CAD files to my github here.

Pollard Syndrum Schematic Redraw

The original Syndrum schematic isn't the most legible in terms of quality or layout.
I redrew it so that it made more sense to me. Here it is:

Friday, May 22, 2020

Boss DR-110 Clap Pulse Generator (trigger adapter)

Here's a circuit I came up with a while back. I had a DR-110 with a dead digital board. The digital board is responsible for generating all the triggers in the system, and it generates some very specific triggers for the clap circuit. 

CPI is three 1ms long pulses, every 10ms (100hz).
CPII is a separate pulse also 1ms long, that falls 10ms later.

I re-implemented this in the following circuit.
Traces from top to bottom are CPI, CPII, and Trigger in.


The traces are from a simulation of the circuit, that you can play with in real time here.

Breaking down the circuit, we start at C8 and R11. These form a hipass filter for the incoming trigger. This ensures that long triggers will be handled the same way as short triggers.

IC6A & B are schmitt NAND gates and they form an SR latch. It is set by an incoming trigger, and is reset by the CPII pulse. The output is used to enable the generation of the CPI signal.

IC6C is the core of an oscillator that can be enable/disabled from pin 8. It works by charging and discharging C9.
R14 sets the charging rate of C9, and determines the low time between pulses.
R15 and D4 set the discharge rate, and determine the length of the pulses.
R12 & R13 help bias C9 near the threshold voltage of IC6C. This ensures that the first pulse will be close in length to the following pulses. If C8 had to charge all the way up from ground, the first pulse would be much longer.

IC7 is a counter, and is keeping track of how many pulses have been seen on CPI.
Once the end of the third pulse is counted, output QC goes high. This resets the SR latch, disabling the oscillator, and very quickly stopping the fourth trigger.
Output QC is also used as our CPII signal. To limit it to 1ms in length, we use it to charge C7 through R9. After about 1ms, C7 has charged enough to trigger the CLR pin of the counter. This causes output QC to go low again and discharge C7.

So, with some simple tweaking, this circuit can generate different lengths, rates, and numbers of pulses.


Thursday, May 7, 2020

Korg Monotron Delay PCB Component Labels

Even though it's old-hat, I'd like to try modifying the Korg Monotron Delay.
Korg was nice enough to share their schematic, but not the board layout. Also, the board itself isn't labeled.
I need to know what I'm working with, so I used a multimeter, and some educated guesses to draw the following. I labeled the rough sections of the circuit, so that it's a little easier to find what you're looking for. Be warned that it's not perfect, but should be a decent starting point.

Wednesday, April 22, 2020

Arduino LTC1660 Octal DAC demo

I was looking for a breadboard friendly DAC with lots of outputs, and decent resolution.
I found the LTC1660. It can be had for under $10, features 8 outputs, and 10 bit resolution. This should be good enough to control VCOs over a handful of octaves.

There seems to be a single example of how to use it with an arduino, but it doesn't spell out the SPI connections. Without SPI, you're limited to slow, CPU intensive communication. With SPI, I was able to get an example program to output at around 180kHz. This will be much slower in practice, but it shows the potential of the chip.

Below are the connections and code:


#include <SPI.h>
#include <stdint.h>
const int pinCSLD = 3;
const int pinCLR = 9;
 
void setup() {  
  pinMode(pinCSLD, OUTPUT);
  pinMode(pinCLR, OUTPUT);
   
  digitalWrite(pinCLR, HIGH);
  digitalWrite(pinCSLD, HIGH);
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV2);
}

void loop(){
  for (int i = 0; i < 1024; i++) setDAC(1, i);
}

void setDAC(uint16_t address, uint16_t value) {
    uint16_t h = address << 4 | value >> 6;
    uint16_t l = value << 2;
    PORTD &= ~(1 << pinCSLD); //LOW
    SPI.transfer(h);
    SPI.transfer(l);
    PORTD |= (1 << pinCSLD); //HIGH 
}

Saturday, April 11, 2020

Korg KR-55 Recap Guide

I'm repairing my second Korg KR-55 drum machine. They both had a ton of failing electrolytic capacitors that needed replacing. In the first machine, the capacitors had leaked and damaged the board. In the second, one had failed and shorted, causing the snare, hihats, and cowbell to not work.

Recommending "recaping" as a general fix, is something of meme now. It's no joke on the Korgs though. I advise replacing all the electrolytics in them, so I made a the following images and lists to help.

The logic board only has a few capacitors. The 470u are the large, axial type, and don't seem to be an issue. They're listed for completeness.
Name Value Voltage
C21 .33u 50V
C1 10u 16V
C22 470u 25V
C23 470u 25V

Here are the relevant capacitors on the sound board. They're color coded by value.
Red = 1u / 50V
Org = 10u / 16V
Ylw = 100u / 16V
Grn = other

Here are the footprints on the bottom, to help with desoldering. These are not coded, because they should all be removed.

Here are the types and totals of capacitors:
Value Voltage Total
.15u 50V 2
.22u 50V 2
100u 16V 5
10u 16V 14
1u 50V 14
47u 16V 1

Here are the individual capacitors, and their function in the circuit. This can be helpful for debugging.
Name Value Voltage Role
C59 .15u 50V Low Conga
C60 .15u 50V Hi Conga
C49 .22u 50V HiHat
C61 .22u 50V Tom Noise Audio
C50 100u 16V Cymbal Power
C52 100u 16V Hat Power
C106 100u 16V Power
C107 100u 16V Power
C123 100u 16V Metal Power
C20 10u 16V Bd, Sn Power
C21 10u 16V Bd, Sn Power
C51 10u 16V Cymbal Power
C71 10u 16V Tom/Conga Audio
C72 10u 16V Tom/Conga Power
C73 10u 16V Tom/Conga Power
C98 10u 16V RS/Clav/CB Audio
C99 10u 16V RS/Clav/CB Power
C100 10u 16V RS/Clav/CB Power
C101 10u 16V RS/Clav/CB Power
C103 10u 16V Mix Audio
C105 (C05) 10u 16V Power
C112 10u 16V Noise
C114 10u 16V Noise Power
C2 1u 50v Bd Trigger
C5 1u 50v Bd Audio
C10 1u 50V Sn
C13 1u 50V Sn Audio
C16 1u 50V Sn Body Audio
C18 1u 50V Sn Audio
C54 1u 50V Low Conga
C55 1u 50V Low Conga
C64 1u 50V Hi Conga
C65 1u 50V Hi Conga
C90 1u 50V Claves Audio
C95 1u 50V Cowbell
C108 1u 50V Noise
C111 1u 50V Noise
C19 47u 16V Bd, Sn Power

Wednesday, March 18, 2020

Electro Harmonix Rhythm 12 Schematic

I was able to get another obscure drum machine, an Electro Harmonix Rhythm 12.
It has a somewhat unique sound, and I wanted to understand the voices better. There is a schematic available out there, but it's not the clearest. As usual, I decided to redraw it in Eagle CAD.

There are basically 4 voices, but they can be manipulated a bit. Parts of the sounds can be muted or even cut short.

Here is the portion that actually creates the sound. The sequencing and amplification parts are not shown. 

There are four "Twin-T" oscillators present. Three are damped, so that they decay naturally. One is self oscillating, and generates a tone used in the cymbal.

The cymbal and snare noise go through single transistor VCAs. These are pretty crude, and seem to work by offsetting the input into (and out of) the active region of the transistor. This heavily distorts the signal, but it does work.


Most of the other transistor serve to mute drums for pattern variations.

Here is the beginning of a layout. It's very easy to route, and could be done single-sided with some jumpers.

Saturday, March 14, 2020

Radio Shack Electronic Drums Schematic 60-2249

One more attempt to preserve and understand a drum circuit...
This time we have the Radio Shack Electronic Drums from some time in the 80s.
It features four velocity responsive drum pads, and four sounds. There sounds are bass, snare, tom tom, and phaser.



I took a few good picture of the board, front and back. Then I traced them in Gimp. I make layers for things like jumpers, components, holes, top/bottom copper, etc. I also color code things like power rails and audio buses. That makes it easy to view exactly what I need while creating the schematic.



Here's a rough copy of the board in Eagle. Some of the transistors didn't have equivalent footprints, so liberties were taken.



I recognized the configuration as a variation on the classic "Bridged-T" oscillator, or a damped tuned resonator. Three of the voices are basically the same, while the last is gated noise. Nothing terribly interesting, but here it is.


Eagle files and high resolution images available on my github.

Tuesday, February 25, 2020

Eurorack to Oscilloscope Adapter

Here's another very simple adapter. 3.5mm to BNC, to allow patch cables to be plugged into a 'scope.

Required Parts:





Friday, February 21, 2020

DR-55 Battery Backup

I made a simple adapter to run my DR-55 from a wallwart instead of a battery. The DR-55 uses the battery to preserve the pattern memory, and my adapter forced me to remove the battery. So, I added a coin cell that is able to retain the patterns, and leaves room for my adapter.

This modification might still be useful without the wallwart adapter. It lets you remove, or run down your AAs without losing your patterns.
The modification requires:

I chose to replace the battery wires with JST terminated wires. This makes it easy to remove or replace the battery holder. I think it's nice to be able to easily "undo" a modification.

I then soldered a schottky diode in series with the battery. This prevents another power source attempting to "charge", and destroy the CR2032 coin cell. A schottky diode is used for the low voltage drop it offers. This lets the RAM see a higher voltage from the battery, and function longer as the voltage decreases.
The white line of the diode points away from the battery, and the other end is soldered to the red wire. A little heat shrink tubing keeps the diode lead, and wire, from shorting anything.


I attached the battery as shown across capacitor 39, as it bridges the RAM's supply pins.



I closed the machine up and slid the battery holder between the case and PCB. It can also be mounted in the battery compartment with some adhesive foam.


That's it! Make sure the holder is switched to "on" and that you put one battery in it. The holder is made for two batteries, but works fine with just one. In fact, two cells offer a bit too much voltage for the RAM, and may shorten its life.

Breadboard Friendly 3.5mm Jacks

Here's an easy one, breadboard friendly 3.5mm jacks. I got tired of struggling to connect eurorack patch cables and breadboards, so I put Dupont connectors on a 3.5mm pigtail. No soldering required, just crimping.

Here are the pigtail cables , and crimping kit I used.


Monday, February 17, 2020

Williams Defender Sound Disassembly

Here's something different, an in progress attempt to reverse engineer the sound board for the arcade game "Defender" (and others). The sounds are very recognizable, and unique to Williams arcade/pinball machines. They always interested me, so I'm making an attempt to understand them better.

The board is based around a 6808 CPU (relative of the 68000), and a DAC attached to an IO controller. The binary is floating around the web, as is this great disassembler: DASMx. I used it to disassemble the ROM into a code listing, and started commenting it.

Here are the schematics from one of the compatible service manuals:


I was able to use the schematics to figure out the memory map. This helps understand the significance of certain read/writes in the code.
RAM: $0000 - $007F (128 Bytes)
PIA: $0400 - $07FF
ROM: $F800 - $FFFF (2KB)

By loading the ROM into audacity I was able to see some recognizable shapes. These are the waveforms/look up tables stored alongside the code. Some are played directly, while others are used to modulate things like pitch, or volume.

There are some interesting tricks done in the code, and I hope to explain them here one day. Things like dynamically generated delay loops, and something akin to granular synthesis...

Until then, the current version of the commented disassembly lives here.