Sound Library
The mikroPascal PRO for AVR 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 |
procedure Sound_Init(var snd_port : byte; snd_pin : byte); |
---|---|
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 |
procedure Sound_Play(freq_in_hz, duration_ms : word); |
---|---|
Returns |
Nothing. |
Description |
Generates the square wave signal on the appropriate pin. Parameters :
![]() 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); |
Library Example
The example is a simple demonstration of how to use the Sound Library for playing tones on a piezo speaker.
program Sound; procedure Tone1(); begin Sound_Play(659, 250); // Frequency = 500Hz, Duration = 200ms end; procedure Tone2(); begin Sound_Play(698, 250); // Frequency = 555Hz, Duration = 200ms end; procedure Tone3(); begin Sound_Play(784, 250); // Frequency = 625Hz, Duration = 200ms end; procedure Melody(); // Plays the melody "Yellow house" begin Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone1(); Tone2(); Tone3(); Tone3(); Tone3(); Tone2(); Tone2(); Tone1(); end; procedure ToneA(); // Tones used in Melody2 function begin Sound_Play(880, 50); end; procedure ToneC(); begin Sound_Play(1046, 50); end; procedure ToneE(); begin Sound_Play(1318, 50); end; procedure Melody2(); // Plays Melody2 var counter : byte; begin for counter := 9 downto 1 do begin ToneA(); ToneC(); ToneE(); end; end; begin DDRB := 0x00; // Configure PORTB as input Delay_ms(2000); Sound_Init(PORTC,3); // Initialize sound pin Sound_Play(2000, 1000); // Play starting sound, 2kHz, 1 second while TRUE do // endless loop begin if (PINB7_bit <> 0) then // If PORTB.7 is pressed play Tone1 begin Tone1(); while (PINB7_bit <> 0) do nop; // Wait for button to be released end; if (PINB6_bit <> 0) then // If PORTB.6 is pressed play Tone2 begin Tone2(); while (PINB6_bit <> 0) do nop; // Wait for button to be released end; if (PINB5_bit <> 0) then // If PORTB.5 is pressed play Tone3 begin Tone3(); while (PINB5_bit <> 0) do nop; // Wait for button to be released end; if (PINB4_bit <> 0) then // If PORTB.4 is pressed play Melody2 begin Melody2(); while (PINB4_bit <> 0) do nop; // Wait for button to be released end; if (PINB3_bit <> 0) then // If PORTB.3 is pressed play Melody begin Melody(); while (PINB3_bit) do nop ; // Wait for button to be released end; end; end.
HW Connection
Example of Sound Library connection
What do you think about this topic ? Send us feedback!