Showing posts with label DIY. Show all posts
Showing posts with label DIY. Show all posts

Thursday, 12 May 2016

Buchla - Wall of Sound

Having some fun with Paul's new super easel & a small 12U buchla.
The MARF is really cool.


Working on some drones.

....


 Really loving the 294 all over again. Such a under-rated module.



Some more pics of Paul's amazing easel.




A great drop from 1995.
The name “Barwang” means “place of water”. The winery is situated in the Hilltops region of New South Wales. The water source is a natural aquifer about 300m below the surface.
http://mcwilliams.com.au/our-wine/regionality/hilltops/
Am amazed at this wine's staying power. It's 21 years old. I wish I had a few more bottles left.
It's the last one I have from this case I think :-(



Sunday, 24 April 2016

New Sound Waves Meeting - 17/04/16

It's always lots of fun to meet up with the guys from NSWaves.
I got there a bit late, so many of the guys had gone home.
Still there was much to see & it was a Sunday arvo well spent.


Justin of Metro Modular showing some of his new modules.
Plus his beautiful valve oscillators:

 Justin's facebook page for MetroModular is here:
https://www.facebook.com/Metro.Modular/info?tab=page_info

His website is here:
http://www.metro-modular.com/



They just don't build them like this anymore.




My 12u Buchla:


Tuesday, 12 April 2016

Quick & dirty DIY Buchla to Euro conversion

These are my quick and dirty DIY notes for a Buchla to Euro power converter.
This blog is my diary for ideas, projects etc that are on going. It helps me to remember details that I usually loose if I don't write down.

This will probably change as I refine the circuit. if you have any suggestions for improvements, please let me know.

Buchla provides -15,+15,+12,+5.
Euro needs +12,-12,+5.
So we need a -12V for Buchla & Euro modules to exist in the same case.
Using a L7912CV voltage regulator.
 http://www.st.com/web/en/resource/technical/document/datasheet/CD00000450.pdf


This was my first attempt using perf board.
In the first attempt, the caps were both 1uF electros

Attempt # 2 ... using a 1uf & 2.2uf cap.

I built this for a friend about a year ago and he reports that it's still happily chugging along.
It might be a good idea to add a heat sink to the regulator. C1 is required for stability. A tantalum is recommended, though in this mock up I used a straight electro.

If electrolytics are used and you are planning to run lots of euro maybe ten times (or more) value capacitors should be selected.???

AND: a high current diode from input to output (1N4001 or similar)
should be introduced to protect the device from momentary input short circuit.

29/0416
Some new pics care of Cobramatic.
Paul has used tanties and he reports no problems.
This board doesn't use a heatsink -- will see how this goes over time.

The Buchla (BEMI) power board is on the top.


Disclaimer: 
I take no responsibility if this damages any Euro or Buchla modules or starts a fire. 
Modular gear requires care and more that a casual understanding of electronics.
Don't build this if you are not totally confident with your soldering skills.
These are just working ideas that will be refined over the coming years.

Tuesday, 5 April 2016

What do you need to program a microcontroller

 Microcontrollers are getting more common in synths.
So its important to get started understanding these if you are ever to master DIY, repairs, etc.
Soldering is just the first step. once you have it on your board and are happy you don't have any shorts
you will need to program the thing.

How do I do this? There are 4 things you need.
 
1. Microcontroller
2. programmer
3. IDE (integrated development environment)
   - compiler
   - text editor
4. basic circuit building skills 


--------------
 1. Microcontroller
There are lots of companies that make microcontrollers.
Each of these companies have their own programmers, compilers,  etc.
This makes it tricky when deciding which programmer to buy, as there isn't one programmer that
works for everything.

Lets look at 2 popular companies:
Microchip & Atmel

* Microchip produces microcontrollers with three very different architectures:
   8, 16, & 32 bit
Here is their website

8-bit (8-bit data bus)]
   -PIC10 and PIC12:
  - PIC16 series 
  - PIC18
   
16-bit (16-bit data bus) 
    - PIC24F
    - PIC24H
    - ds PIC 30
    - Ds PIC 33

32-bit (32-bit data bus) 
    - PIC 32
 

Atmel were acquired my Microchip so they share the same website
You can get started here

Here is a brief list of Atmel Microcontrollers

    ATmega168PA AU Atmel Arduino IC. SKU : RM1155. ...
    ATmega328 Microcontroller for Arduino. SKU : RM2940. ...
    ATmega8 Microcontroller. ...
    ATmega16 Microcontrollers. ...
    AT89S2051 Microcontroller. ...
    ATmega16 Microcontroller with Robosapiens Boot Loader Software. ...
    ATmega168 Microcontroller. ...
    ATmega32 Microcontroller.
 
------------------------------------------

2. programmer
The programmer is the device that is used to send the code from your
computer to the chip.
 
 Each company has many programmers.
Your choice will depend on how advanced you want to get.

Here is an example of a PIC/Microchip programmer

Below is a PIC K150 ICSP Programmer Kit

 

Here is a programmer for ATmel

...------------------------------------------

3. IDE
The integrated development environment is the software application.
It consists of at least a source code editor, build automation tools and a debugger.  

Each company will have its own IDE. There are also lots of 3rd party companies
 
MPLAB is a common IDE used for PIC microcontrollers
 
Atmel Studio is a common IDE for Atmel microcontrollers 
Atmel also uses Visual Studio from Microsoft.

-------------------------

4. Basic circuit building skills

When you buy a programmer, it will come with a manual, that shows how to connect it to your microcontroller.
You need to be able to read a basic circuit diagram and probably use a breadboard .

You will need to open up the data sheet for the microcontroller in question, and make the appropriate connections.
 

Links

+ Microcontrollers... Programmers  


Saturday, 2 April 2016

i2c LCD & Arduino - part 2

 A bit more about making graphics, how to position them
and scroll through different screens / menus

Part 1 is here
 

 
 
 The code:
// **************************************


#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// RS, E, D4, D5, D6, D7
byte heart[] = {
  0x00,
  0x0A,
  0x1F,
  0x1F,
  0x0E,
  0x04,
  0x00,
  0x00
};

byte Speaker[] = {
0b00001,
0b00011,
0b01111,
0b01111,
0b01111,
0b00011,
0b00001,
0b00000
};

byte Sound[] = {
0b00001,
0b00011,
0b00101,
0b01001,
0b01001,
0b01011,
0b11011,
0b11000
};

byte Bell[] = {
0b00100,
0b01110,
0b01110,
0b01110,
0b11111,
0b00000,
0b00100,
0b00000
};

  byte Alien[8] = {
0b11111,
0b10101,
0b11111,
0b11111,
0b01110,
0b01010,
0b11011,
0b00000
};

byte Skull[] = {
0b00000,
0b01110,
0b10101,
0b11011,
0b01110,
0b01110,
0b00000,
0b00000
};

byte Lock[] = {
0b01110,
0b10001,
0b10001,
0b11111,
0b11011,
0b11011,
0b11111,
0b00000
};
 
void setup() {
   lcd.begin(16, 2);
  lcd.backlight();             // turn backlight on
  lcd.createChar(1, heart);    // define a symbol for memory position 1
  lcd.createChar(2, Speaker);    // define a symbol for memory position 2
  lcd.createChar(3, Sound);    // define a symbol for memory position 3
  lcd.createChar(4, Bell);    // define a symbol for memory position 4
  lcd.createChar(5, Alien);    // define a symbol for memory position 5
  lcd.createChar(6, Skull);    // define a symbol for memory position 6
  lcd.createChar(7, Lock);    // define a symbol for memory position 7

 
}
 
void loop() {
  lcd.clear();                 // clear the screen

  screen1();                   // execute screen1 function
  delay(1000);                 // pause for 1 second

  lcd.clear();                 // clear the screen

  screen2();                   // execute screen2 function
  delay(1000);                 // pause for 1 second

   lcd.clear();                 // clear the screen

  screen3();                   // execute screen3 function
  delay(1000);                 // pause for 1 second

   lcd.clear();                 // clear the screen

  screen4();                   // execute screen4 function
  delay(1000);                 // pause for 1 second
}

void screen1() {
  lcd.setCursor(0, 0);         // set the cursor to position 1, line 1
  lcd.print("I ");           // write on the screen
  lcd.write(1);                // write symbol from memory position 1
  lcd.print(" Synths");  // write on the screen

  lcd.setCursor(1, 1);         // set the cursor to position 2, line 2
  lcd.print("I ");           // write on the screen
  lcd.write(2);                // write symbol from memory position 2
  lcd.print(" Synths ");  // write on the screen
   lcd.write(5);                // write symbol from memory position 5
}

void screen2() {               
  lcd.setCursor(2, 1);         // set the cursor to position 3, line 2
  lcd.print("Buchla ");             // write on the screen
  lcd.write(3);                // write symbol from memory position 3
  lcd.print(" Rules");       // write on the screen
}

void screen3() {
  lcd.setCursor(0, 0);         // set the cursor to position 1, line 1
  lcd.print("Happy Easter");           // write on the screen
  lcd.write(1);                // write symbol from memory position 1
  lcd.write(2);                // write symbol from memory position 2
  lcd.write(3);                // write symbol from memory position 3
 
  lcd.setCursor(1, 1);         // set the cursor to position 2, line 2
  lcd.print("I ");           // write on the screen
  lcd.write(4);                // write symbol from memory position 2
  lcd.print(" Synths");  // write on the screen
}

void screen4() {
  lcd.setCursor(0, 0);         // set the cursor to position 1, line 1
  lcd.write(1);                // write symbol from memory position 1

 lcd.setCursor(2, 0);         // set the cursor to position 3, line 1
  lcd.write(2);                // write symbol from memory position 2

  lcd.setCursor(4, 0);         // set the cursor to position 5, line 1
  lcd.write(3);                // write symbol from memory position 3

   lcd.setCursor(6, 0);         // set the cursor to position 7, line 1
  lcd.write(4);                // write symbol from memory position 4

   lcd.setCursor(8, 0);         // set the cursor to position 9, line 1
  lcd.write(5);                // write symbol from memory position 5

   lcd.setCursor(10, 0);         // set the cursor to position 12, line 1
  lcd.write(6);                // write symbol from memory position 6

   lcd.setCursor(12, 0);         // set the cursor to position 14, line 1
  lcd.write(7);                // write symbol from memory position 7
 
  lcd.setCursor(1, 1);         // set the cursor to position 2, line 2
 
  lcd.write(4);                // write symbol from memory position 2
 
}
// ***************************************************




 ---------------------------------
------------------------------------- 
 

Friday, 25 March 2016

Tone() function - Arduino

Arduino - The Tone function
The Tone function is an easy way to make some noise with your Arduino.
 
A basic circuit. Example 1
The resistor is 100 Ohms.
Just need a Piezo speaker, breadboard & an Uno
 
The black leads connect to GND
 
 we need just 2 arguments
  1 pin
  2 frequency in Hz - determines pitch
 
tone(Pin, Hz)
tone(piezoPin, 100)
The frequency can be any number between 0 and 65,535.
Note that most noises that can be heard with the human ears range between 2k & 5k
 

Here is the code:
//-------------------------------------
// demo of tone function

// variables
int piezoPin = 8;

void setup(){
}

void loop(){
 
  /*
  we need just 2 arguments
  1 pin
  2 frequency in Hz - determines pitch
  */
  // create a tone ... tone();
  tone(piezoPin, 100); // play around with this last number
 
}
//---------------------------------------------------
 
 Example 2
Creating a beat.
Add a duration period - the last parameter (and a delay to your code).
 
The tone function is
tone(Pin, Hz,duration in milliseconds)
tone(piezoPin, 100, 500)
 
Here is an example of your new code
 
//----------------
// demo of tone function 2

// variables
int piezoPin = 8;

void setup(){
}

void loop(){
 
  /*
  we need just 3 arguments
  1 pin
  2 frequency in Hz - determines pitch
  3 duration
  */
  // create a tone ... tone();
  tone(piezoPin, 3000, 500);
 
  delay(1500);
 
}
//-----------------------------
 
Note, to add 1 second between each sound
you need to use a duration of 500ms, and a delay of 1500ms
 
 
Limitations
Don't use analogWrite on pins 3 & 11 if you are using the tone function

 
 Links
+ https://www.programmingelectronics.com/an-easy-way-to-make-noise-with-arduino-using-tone/
+ https://www.youtube.com/watch?v=1_LMAgO14z0
 
 ---------------------------------
------------------------------------- 

Thursday, 24 March 2016

Arduino - flashing a LED - basic program - delay function.

This is the basic code that everyone learns as their first arduino project
The blinking LED
It uses the delay function.
 
This function is good for many cases, however it has a disadvantage that it can slow up the program.
However, for this sketch, its perfect.
 
 
The setup:
The cathode (short leg) of the LED connects to GND
The resistor is 220 Ohm
The anode connects to  pin 7 in this case.
 
 Here is the basic Code
 
void setup() {
// put your setup code here, to run once:
pinMode(7, OUTPUT); // configure the pin as an output
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(7, HIGH); // turn LED on
delay(1000); // wait 1 second
digitalWrite(7, LOW); // turn LED off
delay(1000); // wait one second
}
 ---------------------------------
-------------------------------------
 
 

Midi - 3.5mm

There are 2 standards of the traditional MIDI connector to TRS (Tip-Ring-Sleeve) cable.
Both standards use pins 2, 5 & 4 of the DIN connector. 
(female DIN to male TRS)
These are called Type A & Type B.
One extra connector type uses a mono minijack.
This is referred to as Non-TRS, TS, or sometimes Type C


TRS Midi A

Korg (Electribe 2 and SQ-1, SQ-64, NTs-1), Little Bits, Make Noise (O-coast), Moog Subharmonicon, Line 6 MIDI Mobilizer, AKAI (force, MPC Touch), Critter & Guitari Organelle M,  IK Multimedia (iRig), Roland T-8, J-6,E-4 , Twisted Electrons (Acid8 MKII, TherapSid MKII), Westlicht Performer,
Teenage Engineering (OP-Z with oplab, Pocket Modular 16), SQUARP (Rample), Dirtywave (M8),
Dreadbox ( Lil’ Erebus), Intellijel (the MIDI breakout for their palette cases)
use TRS MIDI A.

The DIN schematic above is of a female type... like the pic on the right

tip to pin #5
ring to pin #4
sleeve (earth/ground/shield) to pin #2

This particular configuration makes it easy for connection between a Make-Noise O-Coast & the Korg SQ-1 for example.
You only need a 3.5mm stereo jack to connect them to each other.




---------------------------------------------------------------------------------------------------------

TRS MIDI B

Arturia (e.g. Beatstep Pro and Keystep, Microfreak) and early Novation (e.g. Circuit, Circuit MonoStation and Launchpad Pro) , Music1010 (MX4, blackbox, bitbox, synthbox), EOWAVE (Quadrantid Swarm), 
Flame (Quad CV Recorder, µQMCV), Pittsburgh Modular (Liveforms SV-1),
Analogue Solutions (Treadstone), Polyend's Tracker, Erica Synths Drum Sequencer & Future Retro (MIDI BUS), Malekko (SYNC), Faderfox SC4 & PC4, Five 12 Vector sequencer, Twisted Electrons (Crazy8) use the alternate ‘TRS MIDI B 

Note: Later Novation products like the Launchkey Mini (mk3) and  Launchpad Pro (mk3) use type A.
tip to pin #4
ring to pin #5
sleeve (earth/ground/shield) to pin #2

This particular configuration makes it easy for connection between a Arturia BeatStep Pro & the Music 1010 Synthbox for example.
You only need a 3.5mm stereo jack to connect them to each other.

==============================
To complicate things a bit more the Arturia beatstep pro uses another trs-din cable for the sync/clock adapter. It's got a black 3.5mm plug.
Don't mix this with the midi cable which is grey.


tip to pin #3
ring to pin #1
sleeve (earth/ground/sink) to pin #2
------------------------------------------------------------------------------------
Some modules such as
ALM/Busy Circuits, Shakmat Modular, Elektron (Samples) and Michigan Synth works (MSW)
support both A & B standards.
 
The 3.5mm jack can be switched between differing 3.5mm MIDI configurations 
by reversing the jack connector on the rear of the module.”
 
On the MSW  mBrane for example,
“Rev1.1 of the device … features PSImidi which allows ANY type of TRS MIDI cable to 
be used on the input.”

---------------------------------------------------------------------------------------- 

Type C

Also referred to as TS and Non-TRS
Expert sleepers (DJ1000, ES-5, ESX-8GT), Beatstep (original), MFB (Nanozwerg pro & SEQ-01 Pro)
 
This connects using just two points: Tip & Sleeve.
The tip connects to pin 4 of the midi DIN 
The Sleeve connects to pin 5 of the DIN. (sink or earth)
 

Links
+ Midi association

Saturday, 19 March 2016

If Statements , AND, OR, Equal & not Equal - Arduino

 This is all about "If Statements" in the Arduino world.
These are only executed , based on a condition
 
The if statement checks for a condition and executes the following statement or set of statements if the condition is 'true'.
 
 
 
Check out this old circuit about pots:
 
 I'll be modifying this with a if statement.
 
 

The code:
----------------
// if statement exercise
// if voltage is above 4V, the LED lights

// set up variables

int myPin=A2;
int readVal;
float V2;
int dT=250;

int redPin=9;

void setup()
{
  Serial.begin(9600);
  pinMode(myPin,INPUT);
  pinMode(redPin,OUTPUT);
 
}

void loop()
{
  readVal=analogRead(myPin);
  V2=(5./1023.)*readVal;
  // converts to a voltage -- remember to place the decimal
  // points after the 5 & 1023 ... these may be floating points
 
  Serial.print("Potentiometer Voltage is ");
  Serial.println(V2);
 
  if(V2>4.0){
    digitalWrite(redPin, HIGH);
  }
  if (V2<4.0) {
    digitalWrite(redPin, LOW);
  }
 
  delay(dT);
}
------------------------------------
Here is a variation of the if statement using equal (==)
and not equal(!=)
 

 if(V2==5.0){
    digitalWrite(redPin, HIGH);
    // "==" is equal
  }
 
  if (V2!=5.0) {
    digitalWrite(redPin, LOW);
    // != is not equal
 
----------------------------------------------------------------------
 Compound Conditionals
You can also use AND , OR

 if(V2>2.0 && V2<3.0){
    digitalWrite(redPin, HIGH);
    // "&&" is and
  }
 
  if (V2<2 || V2>3) {
    digitalWrite(redPin, LOW);
    // "||" is OR
  }
 
  delay(dT);

 ----------------------
if you are combining great than and equal, you don't use "=="
eg:
 if(V2>=2.0 && V2<=3.0){
    digitalWrite(redPin, HIGH);
    // "&&" is and
  }
 
  if (V2<=2 || V2>=3) {
    digitalWrite(redPin, LOW);
    // "||" is OR
--------------------------------------------
 
 
Thanks to Paul McWhorter for the great video.

 ---------------------------------
-------------------------------------

Thursday, 17 March 2016

analogRead - Arduino

 The Arduino can read analog voltages.
It can be used to help analyse circuits.


This can only be done with the analog pins (A0 to A5)

In this example I'll use pin A3
 

Open your serial monitor.

We are getting the number 238
This is not a voltage
It's the scaled number between zero & 1023
I call this the readValue.
It's a 10bit number (1024 is 2 to the 10th)

0V = 0
5V = 1023

You can test this is we move out test probe to measure the reading @ the 5 volt rail.
We would expect a reading of 1023.
This is exactly what we get.
 
To calculate the voltage from the readValue use this formula.

Voltage  = (5/1023) x ReadValue

thus in this example,  V = (5/1023) x 238 = 1.163

The code:
------------------------------------------------
// declare your variables
int readPin=A3;
int V2=0;
int delayTime=500;

void setup()
{
  pinMode(readPin,INPUT);
  Serial.begin(9600);
}

void loop()
{
  V2=analogRead(readPin);
  Serial.println(V2);
    delay(delayTime);
}
----------------------------------------------------------

A useful variation of the program would be for the monitor to display the value in Volts.
To do this we need to do a few changes:
Add a new variable (readVal)
V2 must be a float
 
 readVal=analogRead(readPin);
  V2=(5./1023.)*readVal;
 

 The improved code:

------------------------------------------------
// declare your variables
int readPin=A3;
int readVal;
float V2=0;
int delayTime=500;

void setup()
{
  pinMode(readPin,INPUT);
  Serial.begin(9600);
}

void loop()
{
  readVal=analogRead(readPin);
  V2=(5./1023.)*readVal;
  Serial.println(V2);
    delay(delayTime);
}
-------------------------------------------------

Thanks to Paul McWhorter for his great inspirational videos
 
 
 ---------------------------------
-------------------------------------
 

Saturday, 5 March 2016

arp 2500 - VCO 1023 Module tests

I thought I'd share some pics and a video of the 1023 VCO.
The shape of the pulse & square waves in particular are very interesting.
I have a few 1023s in my system and each has 2 oscillators. So I did compare
one with the other and found lots of variation.

This oscillator features the same waveforms as the 1004 module with a switch for high and low frequency ranges.

The VCO was tuned to A (440Hz).


Pulse from 1023# 1

The second Pulse wave from 1023# 2 looked like this:

The plugin is from jaggedplanet.com
My favorite oscilloscope vst.

 Ramp/Sawtooth from 1023# 1




The second saw from 1023# 2 looks thus:


And the Square:
 Square of VCO #1


The square of 1023# 2

There doesn't appear to be much variation among sine & triangle waves between the various oscillators.

 Triangle

Sine

These VCOs are nearly 50 years old so it doesn't surprise me to see variations. Those old caps and resistors all add up to give these beautiful differences that add to the richness of the 2500's sound.