#define strobe 3 //PORTD#define clk 4#define data 2void setup() {DDRD = 1 | (1<<strobe) | (1<<clk); // NES outputs}void pulse_pin(byte pin, byte del) {PORTD |= (1<<pin); //setdelayMicroseconds(del);PORTD &= ~(1<<pin); //cleardelayMicroseconds(del);}void loop() {byte btns = 0;pulse_pin(strobe, 10); //latch the controllerfor(int i = 0; i < 8; i++) { //read 8 bitsbtns = btns << 1 | !(PIND & (1<<data));pulse_pin(clk, 10); //clock next bit}// atari output d12-d8, open collectorDDRB = (btns & 0xf) | (!!(btns & 0xc0) << 4); // dpad + A||B}
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.
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 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:
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.
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.
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.
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.
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.
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.
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.
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 individual capacitors, and their function in the circuit. This can be helpful for debugging.
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.
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.
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:
Required Parts:
- Pigtail BNCs
- 3.5mm mono jacks(heatshrink tubing included)
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:
Optional parts:
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.
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.
Subscribe to:
Posts (Atom)