CPE 301 Embedded Systems Design LAB #07

$30.00

Category: Tags: , , , , You will Instantly receive a download link for .zip solution file upon Payment || To Order Original Work Click Custom Order?

Description

5/5 - (4 votes)

Objective:
To become familiar with the use of timers in computer applications. Specifically, to implement a piano
like keyboard program using the ATmega2560 timer1 in Normal mode and an external speaker.
Procedure:
1. Starting with the file Echo1.ino using the Arduino serial port library functions copy/pasted from:
/* Simple Serial ECHO script : Written by ScottC 03/07/2012 */
http://arduinobasics.blogspot.com/2012/07/arduino-basics-simple-arduino-serial.html
write a C program for the Arduino Mega SBC which will monitor the keyboard for inputs of A, B, C, D,
E, F, and G. Depending upon which key was pressed use the timer to generate a square wave on PortB.6
of the ATmega2560 (Arduino Digital pin 12) of the appropriate frequency for the middle octave of that
musical note (see Table). The note should last until another key is pressed, at which time the new note
will be played. If the escape key is pressed the note will be turned off.
2. Connect the lab speakers to PortB.6 and ground to actually play the notes so you can hear them.
BE SURE TO ALWAYS TURN OFF THE SBC POWER BEFORE CONNECTING OR
DISCONNECTING ANYTHING TO IT.
3. Connect a sine wave signal generator to one of the lab speakers, set it to one of the musical note
frequencies, and listen to it. Compare the sound of this note with the same frequency note generated from
the SBC speaker. Explain why they sound different.
The Sharp notes are included in the Table for completeness. If you
choose to implement all of the notes including sharps you will
need to decide on an interface protocol which will distinguish
between regular and sharp notes. For example, you might define
regular notes as upper or lower case and sharps as the opposite.
If you choose to implement all of the notes you will receive up
to 50 points (on a scale of 100) extra credit on this lab.
HINT: You can probably write a single subroutine which outputs
the notes and checks for input. Then, you can call this single
subroutine with different timer “load” values for the different
notes.
NOTE FREQUENCY
A 440 Hz
A# 466 Hz
B 494 Hz
middle C 523 Hz
C# 554 Hz
D 587 Hz
D# 624 Hz
E 659 Hz
F 698 Hz
F# 740 Hz
G 784 Hz
G# 831 Hz