Sound is a function of frequency. This concept has been used to generate sound from the microcontroller. Different types of sounds can be produced by varying the frequency.
This article explains the concept behind generating sound from the PIC microcontroller . This concept can be used to generate sound with any MCU. It can be used to generate specific sounds or alarms. This circuit has wide applications like in cars to produce sound while reversing, in electronic piano to generate different tones, or in electronic toys to generate tones.
Sound Library
The mikroC PRO for PIC provides a Sound Library to supply users with routines necessary for sound signalization in their applications. Sound generation needs additional hardware, such as piezo-speaker (example of piezo-speaker interface is given on the schematic at the bottom of this page).
Library Routines
Sound_Init
Prototype
|
void Sound_Init(char *snd_port, char snd_pin);
|
Returns
|
Nothing.
|
Description
|
Configures the appropriate MCU pin for sound generation.
Parameters :
|
Requires
|
Nothing.
|
Example
|
// Initialize the pin RC3 for playing sound
Sound_Init(&PORTC, 3);
|
Sound_Play
Prototype
|
void Sound_Play(unsigned freq_in_hz, unsigned duration_ms);
|
Returns
|
Nothing.
|
Description
|
Generates the square wave signal on the appropriate pin.
Parameters :
Note : Frequency range is limited by Delay_Cyc parameter. Maximum frequency that can be produced by this function is Freq_max = Fosc/(80*3). Minimum frequency is Freq_min = Fosc/(80*255). Generated frequency may differ from the freq_in_hz parameter due to integer arithmetics.
|
Requires
|
In order to hear the sound, you need a piezo speaker (or other hardware) on designated port. Also, you must call Sound_Init to prepare hardware for output before using this function.
|
Example
|
// Play sound of 1KHz in duration of 100ms
Sound_Play(1000, 100);
|
Example Program
The example is a simple demonstration of how to use the Sound Library for playing tones on a piezo speaker
/************************************************************************/
/*************************Embedded Projects******************************/
/********************* fb.com/EmbeddedProjects **************************/
/********* http://microcontrollerprojects00.blogspot.in/ ****************/
void Tone1() {
Sound_Play(659, 250); // Frequency = 659Hz, duration = 250ms
}
void Tone2() {
Sound_Play(698, 250); // Frequency = 698Hz, duration = 250ms
}
void Tone3() {
Sound_Play(784, 250); // Frequency = 784Hz, duration = 250ms
}
void Melody() { // Plays the melody "Yellow house"
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3();
Tone1(); Tone2(); Tone3(); Tone3();
Tone1(); Tone2(); Tone3();
Tone3(); Tone3(); Tone2(); Tone2(); Tone1();
}
void ToneA() {
Sound_Play( 880, 50);
}
void ToneC() {
Sound_Play(1046, 50);
}
void ToneE() {
Sound_Play(1318, 50);
}
void Melody2() {
unsigned short i;
for (i = 9; i > 0; i--) {
ToneA(); ToneC(); ToneE();
}
}
void main() {
TRISB = 0xF8; // Configure RB7..RB3 as input
Sound_Init(&PORTC, 3);
Sound_Play(880, 1000); // Play sound at 880Hz for 1 second
while (1) {
if (Button(&PORTB,7,1,1)) // RB7 plays Tone1
Tone1();
while (RB7_bit) ; // Wait for button to be released
if (Button(&PORTB,6,1,1)) // RB6 plays Tone2
Tone2();
while (RB6_bit) ; // Wait for button to be released
if (Button(&PORTB,5,1,1)) // RB5 plays Tone3
Tone3();
while (RB5_bit) ; // Wait for button to be released
if (Button(&PORTB,4,1,1)) // RB4 plays Melody2
Melody2();
while (RB4_bit) ; // Wait for button to be released
if (Button(&PORTB,3,1,1)) // RB3 plays Melody
Melody();
while (RB3_bit) ; // Wait for button to be released
}
}
Circuit Diagram
MikroC Sound Library |
PIC microcontrollers are very cheap and these microcontrollers are simulated and programmed by means of circuit wizard software. PIC stands for peripheral integrated controller.PIC's are used in the electronic and robotic field. It has registers, special purpose control registers and stack,etc.
ReplyDeleteEmbedded Projects in Chennai