Sunday, 4 August 2013

Kawai R50/R100 ROM switch


I have a thing for drum machines (last count I had 11) but the one that started it all and is still a firm favourite is my circuit bent Kawai R-100.  Even without the modifications it is dirty, punchy and agressive and its built like a tank.  The majority of bends are usable and some are mind blowing.  The r-50 has the same sound plus a few effects, but you lose most of the jacks and controls.  There were 3 different sound chips available for both machines, and some 3rd party manufacturers made rom switch PCBs to allow you have more than one chip in a machine.

.bin files are available for each of these chips, so you can burn them onto a suitable eprom.   The eprom required is a little unsual - 27c400, which required a 16 bit adapter for my burner.  After months of pulling my hair out trying to get them to burn, which turned out to be due to a faulty adapter I now have a chip for each of the original roms.  As you can see above I have also made my own rom switch PCB, which have just been sent to seeedstudio.  I will evenutally have these boards for sale, including roms.  I am working on making custom roms.  I have been making an 808/909 kit.  There are set sample lengths as each sample needs to start at the same point within the rom.  I loaded a test rom with some of the sample slots filled and pitched samples sound great, but noise based samples like hats and crashes dont sound as I expected right now.  I hope to make some progress in the next few days, certainly will have something to show for it by the time the rom switch PCBs arrive.

Saturday, 3 August 2013

Atari 2600 2/4k cartridge


There are a few options for custom roms for the Atari 2600 but I was struggling to find a cheap and easy option so I ended up designing my own.  This is a 2 sided design which is a pain to do on my mill, so I decided to have them professionally made.  I had heard good things about seeedstudio.com and I have to say I was very impressed.  They supply eagle DRC and gerber generation files which means you can be sure your design conforms to their requirements and makes the process as painless as possible, and all boards are e-tested.  It took all of 9 days from ordering to my door and they were very cheap - sometimes 3 or 4 times cheaper than others.  I will definitely be ordering from them again, hopefully in the next day or two.

The boards are high quality 1.6mm thick with hasl plating, These are the right thickness for the 2600 cart slot.  If you would like to buy one please email me analogmonster@live.com with quantity, country and paypal email address and I will send you a paypal invoice.  Bargain price of £2 per board plus shipping.  Each board weighs six grams and I will add some cardboard either side for a little protection.  To give you a rough idea on shipping cost it would cost £1.50 to ship 1 board to the US with a delivery aim of 5 days.

You would need to add a 74ls04, eprom socket, eprom and capacitor yourself.  I do have a few eproms lying around, so if you don't have an eprom programmer let me know and I will see if I can help you out.

atari4kcart gerbers and eagle files.  If you submit these to seeedstudio yourself you will need to rename the gerbers zip as they need a unique filename.

Lell UDS MIDI to trigger interface

  

The Lell UDS is another 80's soviet analog drum machine - mine was made in 1989.  All those knobs and only 2 channels - this is quite a deep drum module.  Again mine was in a bad state when I got it, significant noise, loose crackly pots and no trigger pads.  A lot of knob wiggling, deoxit and some resoldering fixed the pots.  Other people trigger these from external audio but I found the trigger audio was bleeding through - I think the click part of the signal would originally have been the transient from the piezo pickups in the pads.  So I wanted to give it a proper trigger signal.

I have built a 2 channel MIDI to trigger circuit using an Arduino.   When it receives a MIDI note on command C1 or D1 (note numbers 36 or 38) and velocity is more than 0, outputs 1 and 2 (Arduino pins 9 and 12) go high for a predetermined time - note length is ignored.  As before, the board is a barebones arduino board with an opto-isolated midi input.  The code is essentially the same as the Elsita trigger interface, but there is more to the circuit.  The  5v out of the Arduino wasn't consistently triggering so I connected the Lell UDS 12v positive supply to the trigger inputs using a transistor.  The Arduino outputs are connected to the base of the transistor to gate the trigger signal.  This buffering is good practice with Arduino outputs anyway.

This is an internal modification to a device that hooks up to mains electricity, so please be really careful and never work on it while plugged in.  There are some pretty big capacitors that are likely to hold a charge for a while too.  I took the arduino board's positive supply from pin 8 and ground from pin 3 on the PSU board.  I replaced the DIN audio out with a 1/4" jack and mounted a new DIN jack for the MIDI in.  I replaced the original 2 pin mains cable with a UK 3 pin cable and hooked up the metal chassis to ground via the power supply rather than via audio.  Now the background noise is a lot lower than it was.

PLEASE BE CAREFUL.  AS WITH ALL MY MODS I ACCEPT NO PERSONAL RESPONSIBILITY FOR DAMAGE TO YOURSELF OR YOUR GEAR.  ELECTRICITY IS DANGEROUS, IF YOU DON'T KNOW WHAT YOU ARE DOING DON'T ATTEMPT ANY OF MY MODS 

LellUDS-trig - eagle files and arduino .ino file





/*
2 channel midi to gate trigger for analog drum machines.
 midi notes C1 and D1 (midi numbers 36 and 38) cause digital
 pins 9 and 12 (15 and 18 on the atmega168/328 ic) to be high.
 velocity is ignored, the digital outputs being high for all velocities except 
 zero (note off).  Note length is ignored.  You may need to change trigtime
 to a value more suitable to your device.  Add further channels if required.
 code by analog monster analogmonster@live.com
 http://analog-monster.blogspot.co.uk/
 uses arduino midi library by Francois BEST
 */

#include <MIDI.h>  // Add Midi Library
#define CH1 9 //define pins per channel
#define CH2 12
int trigtime=100;


void setup() {
  pinMode (CH1, OUTPUT); // Set Arduino board pin 9 to output
  pinMode (CH2, OUTPUT); // Set Arduino board pin 12 to output
  digitalWrite(CH1,LOW);
  digitalWrite(CH2,LOW);
  MIDI.begin(MIDI_CHANNEL_OMNI); // Initialize the Midi Library, all channels
  MIDI.setHandleNoteOn(trig); // call trig when note on recieved
  
}

void trig(byte channel, byte pitch, byte velocity) {
  if (pitch == 36 && velocity > 0){
for(int i=0; i<trigtime; i++){
  digitalWrite(CH1,HIGH);}
  digitalWrite(CH1,LOW);}
  
  if (pitch == 38 && velocity > 0){
for(int j=0; j<trigtime; j++){
  digitalWrite(CH2,HIGH);}
  digitalWrite(CH2,LOW);}  
}
void loop() { // Main loop
  MIDI.read(); // read Midi Commands 
}

RMIF Elsita MIDI to trigger interface

  

The RMIF Elsita is a soviet analog drum machine, circa 1989.  It has 4 identical channels, designed to be triggered from electronic drum pads but on mine these have worn to the point where they do not reliably trigger the channels.  There is also a 180-degree, 5 pin DIN socket labelled sequencer (секвенсор in Russian Cyrillic).  I cannot find any evidence that a sequencer was ever manufactured.  Although it is the same port type as MIDI, it is not a MIDI input.  I haven't found anywhere I can get the schematics for free, but by taking the casing off and analyzing the circuit I determined that the middle pin was ground, and the other pins were trigger inputs for each channel.  

I have built a 4 channel MIDI to trigger circuit using an Arduino.   When it receives a MIDI note on command C1, D1, E1 and F1 (note numbers 36, 38, 40 and 41) and velocity is more than 0, outputs 1-4 (arduino pins 9-12) go high for a predetermined time - note length is ignored.  As RMIF provided the sequencer input jack I decided to put this in an external case rather than do any internal modifications.




It would be easy to modify this code to accommodate more channels, the Arduino UNO/duemilanove has up to 12 digital outputs we could use, ignoring the RX and TX pins.  I chose the note numbers that are used by Audio Damage Tattoo, I turn the synth audio out off and use the sequencer to control the Elsita.
 

The board is a barebones arduino board with an opto-isolated MIDI input and 5 pins for the sequencer output.  I simply cut a MIDI cable in half and soldered one end to the MIDI input, the other to the sequencer output.  Looking at the MIDI cable as above with the pins along the top the pinout goes pin3-CH2, pin5-CH4, pin2-GND, pin4-CH3, pin1-CH1.  

I have provided the code, schematic and board layout in Cadsoft EAGLE format and as images.  I will be uploading a number of projects to this blog, and I aim to make it as easy as possible for you to replicate it at home.  My designs will be single sided only, so you can etch it at home - either with a CNC mill or with chemical etching.  I have designed my own DRC file specific to my mill which enlarges pads and changes them all to squares as I find it mills better this way - you may need to change the to make it suitable for your own mill.  I provide the schematic so that you can make it on bread board or vero board if you cannot etch boards yourself, but I cant provide layouts as I have no need for breadboard any more.  If you have any problems leave a comment and I will do my best to help.  Good luck!

elsita trig files - eagle files and arduino .ino file




 
 /*
4 channel midi to gate trigger for analog drum machines.
 midi notes C1, D1, E1 and F1 (midi numbers 36, 38, 40 and 41) cause digital
 pins 9, 10 11 and 12 (15, 16 ,17 and 18 on the atmega168/328 ic) to be high.
 velocity is ignored, the digital outputs being high for all velocities except 
 zero (note off).  Note length is ignored.  You may need to change trigtime
 to a value more suitable to your device.  Add further channels if required.
 code by analog monster analogmonster@live.com
 http://analog-monster.blogspot.co.uk/
 uses arduino midi library by Francois BEST
 */

#include <MIDI.h>  // Add Midi Library
#define CH1 9 //define pins per channel
#define CH2 10 
#define CH3 11 
#define CH4 12 
int trigtime=100;


void setup() {
  pinMode (CH1, OUTPUT); // Set Arduino board pin 9 to output
  pinMode (CH2, OUTPUT); // Set Arduino board pin 10 to output
  pinMode (CH3, OUTPUT); // Set Arduino board pin 11 to output
  pinMode (CH4, OUTPUT); // Set Arduino board pin 12 to output
  digitalWrite(CH1,LOW);
  digitalWrite(CH2,LOW);
  digitalWrite(CH3,LOW);
  digitalWrite(CH4,LOW);
  MIDI.begin(MIDI_CHANNEL_OMNI); // Initialize the Midi Library, all channels
  MIDI.setHandleNoteOn(trig); // call trig when note on received
  
}

void trig(byte channel, byte pitch, byte velocity) {
  if (pitch == 36 && velocity > 0){
for(int i=0; i<trigtime; i++){
  digitalWrite(CH1,HIGH);}
  digitalWrite(CH1,LOW);}
  
  if (pitch == 38 && velocity > 0){
for(int j=0; j<trigtime; j++){
  digitalWrite(CH2,HIGH);}
  digitalWrite(CH2,LOW);}
  
  if (pitch == 40 && velocity > 0){
for(int k=0; k<trigtime; k++){
  digitalWrite(CH3,HIGH);}
  digitalWrite(CH3,LOW);}
  
  if (pitch == 41 && velocity > 0){
for(int l=0; l<trigtime; l++){
  digitalWrite(CH4,HIGH);}
  digitalWrite(CH4,LOW);}
  
 
}
void loop() { // Main loop
  MIDI.read(); // read Midi Commands 
}