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 :

  • snd_port: sound output port address
  • snd_pin: sound output pin

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 :

  • freq_in_Hz: signal frequency in Hertz (Hz)
  • duration_ms: signal duration in miliseconds (ms)

  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.

Copy Code To ClipboardCopy Code To Clipboard
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

Example of Sound Library connection

Copyright (c) 2002-2012 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
Want more examples and libraries? 
Find them on LibStock - A place for the code