Skip navigation

yay! the PCBs finally came, and after a day of soldering and debugging, i’ve finally arrived at the assembled prototype.

go to my flickr stream, to see more pictures.

Advertisements

while working on my gate sequencer francesco sent me this fantastic video by niklas roy:

“Music is a hidden arithmetic exercise of the soul, which does not know that it is counting.”

– Leibniz

using mini-jack cables as stylophone sensors turned out to be a clever move: the cables carry 3 signals, allowing me to run 5V and GND through the cable along with the sensor signal. this opens up for modular plug and play with home built sensors, that get powered by the platform.

add on light sensor

light sensor schematic

i had my friend and band-comrade thorbjørn over for a look and jam today. thorbjørn is a very skilled piano player, and it was a joy to see him perform on the stylephone.


and in the following video thorbjørn unleashes some of the more noisy frequency modulation tricks the platform performs, before going into a heartbreaking little ditty


in the end i pulled out an electribe drummachine i had lying around, and we put the synth trough the audio gate of the electribe. trigging some more noisy sounds in rhytmical patterns was real fun, and it makes we want to implement a gate sequencer to the platform


the video clip is quite long, and starts really chaotically. so be patient for the goodies. or fast forward

with the PCB finally sent to production, i now have the final specifications and dimesions for the board, and with a quite compact size of 160x137mm it is a real gameboy killer!

eagle layout

the first prototype batch will be produced in only 5 copies, via cogras wonderful 24hr PCB service. so i should be able to assemble one tomorrow already. exiting!

thanks a lot to david cuartielles of 1scale1 for helping me out with the final eagle CAD tweaks.

next up: designing a nice casing, and programmingprogrammingprogramming…

with a week to go of the project (before examination that is, i am planning to continue developing on this platform) i now have a fully assembled and relatively sturdy prototype up and running:

FRANKENSYNTH!

this will be the design for this iteration of the platform. right now i am designing the PCBs, so hopefully in a couple of days if will have something real and neat to play on. i had to give up on proper internal amplification and speakers, so i will use mobile phone speakers for now.

right now the feature list is as follows:

  • atmega328 processor
  • 12bit DAC sound
  • 16 LEDs run through shift registers for sequencing control
  • LCD display
  • rotary encoder for multi purpose tweaking
  • stylophone keyboard
  • expression control through body switches
  • wireless receiver and transmitter through infrared light (control your synth with your remote control!)
  • passive volume control
  • 5 navigational keys and 1 home key (can be expanded with shoulder keys)

testing the platform on my home built arduino clone with an atmega328.

this is a bug. but the platform is now at a level where bugs are fun!

here is a somewhat nicer rendition of my design layout

design sketch

gave myself some time off from the more serious work, and allowed myself to actually play a bit with the platform in its current form:

yay! this is a lot of fun! :]

looked around on the shiny shiny internet, and thanks to this thread in the arduino fourm (and my advisor david mellis) i made this neat little wireless connection:

its super simple (and CHEAP!). super nice thing is that you can block the signal with your hand (mirrors? lenses?) this is real cool for my project, as this means that you can jam musical data coming from one unit to another. jam as in trash / mash up. also one unit will interfere with another. yeah: data chaos!

below is pictures of the setup / schematic and code:

transmitter:

TX code:

//dirt cheap wireless TX
//generates 38kHz carrier wave on pin 9 and 10
//sends data via TX every 500ms
void setup()
{
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);

  // Clear Timer on Compare Match (CTC) Mode
  bitWrite(TCCR1A, WGM10, 0);
  bitWrite(TCCR1A, WGM11, 0);
  bitWrite(TCCR1B, WGM12, 1);
  bitWrite(TCCR1B, WGM13, 0);

  // Toggle OC1A and OC1B on Compare Match.
  bitWrite(TCCR1A, COM1A0, 1);
  bitWrite(TCCR1A, COM1A1, 0);
  bitWrite(TCCR1A, COM1B0, 1);
  bitWrite(TCCR1A, COM1B1, 0);

  // No prescaling
  bitWrite(TCCR1B, CS10, 1);
  bitWrite(TCCR1B, CS11, 0);
  bitWrite(TCCR1B, CS12, 0);

  OCR1A = 210;
  OCR1B = 210;

  Serial.begin(2400);
}

void loop()
{
  Serial.println("testing testing testing");
  delay(500);
}

receiver:

RX code:

//dirt cheap wireless RX
void setup()
{
  Serial.begin(2400);
  pinMode(13, OUTPUT);
}

void loop()
{
  // if incoming serial
  if (Serial.available()) {
    readSerial();
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
  delay(10);
}

void readSerial() {
  char val = Serial.read();
  Serial.print(val);
}