Sound Library
The mikroBasic 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 |
sub procedure Sound_Init(dim byref snd_port as byte, dim snd_pin as byte) |
|---|---|
| Returns |
Nothing. |
| Description |
Configures the appropriate MCU pin for sound generation. Parameters :
|
| Requires |
Nothing. |
| Example |
Sound_Init(PORTC, 3) ' Initialize sound at RD3 |
Sound_Play
| Prototype |
sub procedure Sound_Play(dim freq_in_Hz as word, dim duration_ms as word) |
|---|---|
| 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) |
Library Example
The example is a simple demonstration of how to use the Sound Library for playing tones on a piezo speaker.
program Sound
sub procedure Tone1()
Sound_Play(659, 250) ' Frequency = 659Hz, duration = 250ms
end sub
sub procedure Tone2()
Sound_Play(698, 250) ' Frequency = 698Hz, duration = 250ms
end sub
sub procedure Tone3()
Sound_Play(784, 250) ' Frequency = 784Hz, duration = 250ms
end sub
sub procedure 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()
end sub
sub procedure ToneA() ' Tones used in Melody2 function
Sound_Play( 880, 50)
end sub
sub procedure ToneC()
Sound_Play(1046, 50)
end sub
sub procedure ToneE()
Sound_Play(1318, 50)
end sub
sub procedure Melody2() ' Plays Melody2
dim counter as byte
for counter = 9 to 1 step -1
ToneA()
ToneC()
ToneE()
next counter
end sub
main:
ANSEL = 0 ' Configure AN pins as digital I/O
ANSELH = 0
C1ON_bit = 0 ' Disable comparators
C2ON_bit = 0
TRISB = 0xF8 ' Configure RB7..RB4 as input, RB3 as output
Sound_Init(PORTC, 3)
Sound_Play(880, 1000)
while TRUE ' endless loop
if (Button(PORTB,7,1,1)) then ' If PORTB.7 is pressed play Tone1
Tone1()
while (RB7_bit <> 0)
nop ' Wait for button to be released
wend
end if
if (Button(PORTB,6,1,1)) then ' If PORTB.6 is pressed play Tone2
Tone2()
while (RB6_bit <> 0)
nop ' Wait for button to be released
wend
end if
if (Button(PORTB,5,1,1)) then ' If PORTB.6 is pressed play Tone3
Tone3()
while (RB5_bit <> 0)
nop ' Wait for button to be released
wend
end if
if (Button(PORTB,4,1,1)) then ' If PORTB.5 is pressed play Melody2
Melody2()
while (RB4_bit <> 0)
nop ' Wait for button to be released
wend
end if
if (Button(PORTB,3,1,1)) then ' If PORTB.4 is pressed play Melody
Melody()
while (RB3_bit <> 0)
nop ' Wait for button to be released
wend
end if
wend
end.
HW Connection

Example of Sound Library connection
What do you think about this topic ? Send us feedback!



Note :
Frequency range is limited by 
