Professional Documents
Culture Documents
FACULTY OF ENGINEERING
Session Student ID
Contents
1. Abstract 2. Introduction 3. Software Overview 4. Hardware Overview 5. Testing 6. Conclusion 7. References 2 2 2 4 5 6 7
1.
Abstract
The
basis
of
this
module
was
the
design
and
crea5on
of
a
microcontroller-based
embedded
system
-
in
my
case
a
MIDI-controlled
synthesiser.
This
is
a
complete
self-contained
product
that
can
interpret
an
incoming
MIDI
signal
from
a
5-pin
DIN
connec5on
and
translate
it
into
a
pitched
square-oscillator.
The
sound
output
is
then
either
sent
through
an
in-built
speaker
or
sent
to
a
3.5mm
audio
outlet
that
can
be
plugged
into
many
devices
(mixer,
headphones).
The
output
can
be
selected
by
the
user
by
a
toggle
switch.
The
user
can
further
manipulate
the
sound
by
dening
a
note
length
using
the
knob
on
the
top
of
the
enclosure.
This
report
outlines
the
dierent
stages
involved
in
the
comple5on
of
this
project.
2.
Introduc1on
The
Arduino
is
a
popular
device
for
prototyping
projects
that
integrate
hardware
and
soKware
by
programming
a
microcontroller.
The
device
is
accompanied
by
a
piece
of
simple
desktop
soKware
that
allows
the
user
to
create
programs
for
the
microcontroller
in
an
easy
program
language
called
Wiring,
a
modied
version
of
C/C++
that
makes
designing
input/output
applica5ons
much
easier.[1]
This
method
of
designing
embedded
systems
can
bring
together
many
dierent
areas
of
electronics
without
having
to
create
new
interfaces
between
them.
The
Arduino
microcontrollers
can
operate
a
variety
of
components
from
servos
to
LCD
displays
-
most
commonly
using
logic
func5ons
in
and
out
of
the
microcontroller
pins
or
a
stream
of
serial
data
from
a
single
pin.
The
fact
that
I
am
enrolled
as
an
M.M.E
student
was
major
factor
in
the
process
of
deciding
what
my
project
was
going
to
be.
I
thought
it
would
be
interes5ng
to
research
dierent
musical
opportuni5es
available
using
the
Arduino.
There
are
many
websites
where
people
share
and
discuss
ideas
rela5ng
to
Arduino
projects,
and
a
large
selec5on
of
these
are
musically
related.
In
the
wiring
library
for
the
Arduino.
3. So4ware
Overview
The
most
basic
form
of
musicality
is
available
in
the
form
of
the
tone()
func5on;
this
is
a
modied
version
of
wirings
pulse-width
modula5on
library,
where
instead
of
being
able
to
adjust
the
duty
cycle,
the
user
can
change
the
frequency
and
length
values
of
a
note
at
a
par5cular
output
pin.
This
is
the
main
func5on
that
my
project
u5lises.
The
soKware
sec5on
of
the
code
relies
on
a
small
sec5on
of
the
Arduino
MIDI
library.[2]
This
library
makes
it
easy
to
set
the
baud
rate
to
31250
(MIDI-compliant),
interpret
and
generate
MIDI
serial
data.
The
only
MIDI
data
I
am
concerned
with
in
my
project
is
note
data.
This
comes
as
two
bytes
in
the
serial.
Firstly,
my
program
analyses
all
incoming
MIDI
messages
and
lters
out
NoteOn
messages.
When
a
NoteOn
message
is
received,
the
sound()
func5on
is
called.
If
the
second
byte
(MIDI.getData2
-
this
contains
the
velocity
and
dura5on
informa5on)
is
not
greater
than
0,
the
func5on
will
end.
Since
the
tone()
output
only
has
one
velocity,
I
dont
use
the
data
from
the
second
byte.
Instead
I
have
a
poten5ometer
to
adjust
the
dura5on
of
the
notes.
The
program
then
analyses
the
rst
byte
(MIDI.getData1)
to
get
the
pitch
of
the
note
(between
0-127).
The
corresponding
frequency
is
then
determined
from
my
array
declared
at
the
start
of
the
code
(int
MIDI[128]).
This
frequency,
combined
with
the
current
mapped
value
of
the
poten5ometer
is
applied
to
a
tone()
func5on
with
two
variables
and
the
note
indicator
LED
is
ac5vated.
Here
is
an
overview
of
the
program:
2
Start/Stop
sound() Func?on
Start
Declare Local Variables setup() Func?on If M IDI.getData2 > 0 Set Outputs, Inputs YES Digital Pin 2 = HIGH
(Note L ED)
loop() Func?on
NO
(Speaker
Pin)
MIDI.read
int n = MIDI.getData1
MIDI.getType
If type = NoteOn
(Poten?ometer input)
loop() Func?on
Stop
Before deciding on using an array to store the frequency values, I experimented with an algorithm that converted the MIDI number into the actual frequency:
(Where n is the MIDI number) This gave a frequency accurate to as many decimal places as you need but I ran into errors when tes5ng it out on the hardware. I believe that it is because of physical limita5ons in the microcontroller, that it cant calculate indices of that scale on the y.
4. Hardware
Overview
Most
of
the
components
in
my
project
are
housed
in
the
enclosure,
away
from
the
board.
OUTSOURCED COMPONENTS -On switch -Output toggle -MIDI connector -Audio jack -Speaker -Potentiometer -Red LED -Blue LED -Battery Clip / 9V Battery CIRCUIT BOARD COMPONENTS -Voltage regulator (9V -> 5V) -16MHz crystal oscillator -ATMega328P chip -Op amp -Resistors / Capacitors
19 connections
This sec5on of the schema5c outlines the power regula5on in the circuit. The IC in the centre converts a 9V baferys voltage to 5V - a safe opera5ng level for the ATMega328.
Here, you can see the rest of my circuit. Except for the op amp, oscillator and a few resistors, the components that appear to be afached to the main IC are just through-holes for external components. The poten5ometer is connected between ground and +5V so the user can dene a voltage between the two points, it is processed by the 10 bit analog to digital converter on-board the ATMega328 and mapped to desired values in the programming code. The Op amp circuit required no feedback or bias resistors as it na5vely gave a gain of 20, and this was a reasonable volume for the built -in speaker. The alterna5ve output at the 3.5mm jack has a 220 resistor in series to reduce the volume at the output. it creates a comfortable volume for headphones and a decent line volume also. The power and note indicator LEDs have 220 current-reducing resistors in series to supply them with the appropriate current level. The Reset switch works as a pull-up resistor when the switch is pressed. The serial input from the MIDI socket is allocated the the Rx pin on the ATMega328, this is the only pin that can read incoming serial data there is also a Tx pin that is reserved for transmiing serial data.
5.
Tes1ng
When
assembling
the
project,
I
discovered
there
were
errors
with
the
PCB,
largely
due
to
the
fact
I
mis-labelled
signal
paths.
I
tested
the
circuit
with
basic
programs
to
switch
on
LEDs
or
make
a
noise
through
the
speaker.
When
I
discovered
the
circuit
was
not
playing
any
of
the
test
programs,
I
knew
there
was
something
wrong
with
the
PCB,
so
I
translated
the
design
into
veroboard
that
worked
as
planned.
I
corrected
my
PCB
design
for
this
report:
One dierence between the two circuits is the absence of the op amp in the veroboard design. I used a dierent voltage regulator to the one used on the PCB. This new regulator provided less current than the original and wasnt quite enough to fuel the amp without turning the whole synth o. The speaker s5ll gives a reasonable volume and the 3.5mm socket didnt use the op amp, so that s5ll works as it should. To test the actual func5onality of the synthesiser, I connected up a MIDI cable from my laptop and had a complete range of notes playing at various speeds, I tested both the speaker output and the 3.5mm jack output. The connec5on in the jack was a lifle loose, so you have to play around with the cable to get sound through both channels. I also tested a direct MIDI connec5on from my keyboard to the synth, this worked just as well.
6. Conclusion
If
I
were
to
con5nue
on
this
project
and
improve
it
somehow,
I
would
try
to
incorporate
some
further
signal
processing
to
create
5mbres
other
than
a
square
wave.
This
would
probably
require
other
ICs
to
process
the
pulse
wave.
subtrac5ve
synthesis
would
be
a
viable
op5on.
I
could
create
modular
eects
that
the
user
could
dene,
such
as
an
LFO
or
envelope.
The
output
signal
could
also
be
modied
to
be
at
a
more
suitable
level
for
digital
audio
by
using
a
biased
op
amp
to
limit
the
output
dB.
I
quite
like
the
idea
of
a
project-in-progress
to
be
on
veroboard,
as
this
is
much
easier
to
expand
on
and
create
new
sec5ons
-
unless
the
project
uses
surface
mount
components
or
it
requires
a
high
component
density,
veroboard
is
a
good
way
to
design.
A
PCB
would
be
preferable
once
it
is
complete
because
it
can
be
replicated
with
the
soKware
design
and
they
are
usually
of
a
higher
build
quality
to
veroboard,
meaning
they
will
last
longer.
References
[1]
"Wiring
Language
(API)".
17
May
2011.
<
h/p://wiring.org.co/reference/
>. [2]
"Arduino
MIDI
Library".
17
May
2011.
<h/p://sourceforge.net/projects/arduinomidilib/
>.