Hey everyone,
First apologies if this thread is in the wrong group.
Several years back I started designing a rather ambitious device called the SIDrack, a rack mount SID synth will all sorts of bells and whistles. I am a software engineer rather than an electronics engineer. Although, I do have enough electronics knowledge to have been able to cobble together my prototypes. Over time I have distilled exactly what I want in my SID project. My aim is to design a small SID module with minimal parts and board space to create a SID noise or accompaniment pedal (to use with guitar) - it would also have MIDI IN for programming and to be able to use it a “normal” synth.
This project is not MIDIbox related but the project is open source. I thought this forum would be the best place to get feedback, advice and share my experiences.
I have had prototypes successfully running on the breadboard. I started with a dual SID device using an AVR module and a 7 segment display (pictured). I later changed this to an ATmega32. Then, scaling back to a single SID, i changed to an ATmega8 and dropped the display.
My current design involves only a few major components. The 28 pin SID, the 28 pin ATmega8 and an opto-coupler for MIDI IN. The ATmega8 can divide its 16mhz clock and supply this to the SID. Lines into the board would be 12(or 9)v, 5v, MIDI IN, LED, 2 Buttons (pedal program select, advance / change). I’ll power it with a laptop PSU which delivers 5 and 12 volt regulated rails.
It’s kind of a challenge to make this thing as minimal as possible and flexible at the same time. So it could be used as a guitar pedal noise / accompaniment box or a full feature synth. Being a pedal, more than 2 buttons is impracticable - they would be too close together and less simple to use. The display was originaly a 7 segment display, but im wondering if I can loose the display all together. A single LED can flash to show status, and perhaps I can use speech samples to “say” program changes. eg. “one”, “two” etc. The idea is, if you want “full control and visualization”, drive it with a computer application, or another device more capable. I theory, the bus to the SID could be shared with a display of some kind… I just keep having to resist the urge to over complicate something that I wanted to keep simple (but not too simple).
As a software engineer I am a lot more at home behind the keyboard than a soldering iron. I hope the project can be used by other like myself that want a SID synth with minimal effort.
As a software engineer I see the benefits in object orientation. Micro-controllers are typically written in C rather than C++. I have found though benefit in writing in C++. If nothing else, it’s an exercise in organization. It allows you to treat your structs a little smarter. The main use of objects I found was create a class for the Voice, allocating 3 instances. It removes the need to pass around struct pointers and if the compiler is doing it’s job properly, will allocate the Voice “struct” pointer to a register and retain it across same class method calls. If done correctly (no virtual methods, absolute vs indirect allocation etc) I found no overhead vs C code (if anything it’s more efficient).
[tt]
void Voice::setNoteOn(byte key, byte velocity) {
this->key = key;
this->note = key;
this->sustain = ram.sustain;
this->velocity = velocity;
this->frame = 0;
this->updateVoice();
etc..
[/tt]
Using a single layer board would be nice but I don’t know if I’ll get away with it. There’s a lot of Address and Data lines and it looks like, lots of cross over. I’m also sure this thing can be made smaller than a business card.
Anyway, I want to put this “out there” and see what reaction I get. Once I am happy with a design my biggest hurdle will be getting it into a router. I have downloaded about 10 different PCB programs and hit a wall with almost all of them. I am currently playing with the open-source “PCB” on my mac.. but it seems to have a bug on the mac, stopping me from adding parts (I found both the SID and ATmega8 on www.gedasymbols.org ). I guess what I need is someone to say “put a capacitor there to protect that chip” or “that route won’t work because of blah”.





