Sound Library

mikroBasic PRO for dsPIC30/33 and PIC24 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, snd_pin as word)

Description

Configures the appropriate MCU pin for sound generation.

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

Nothing.

Requires

Nothing.

Example
' Initialize the pin RD3 for playing sound
Sound_Init(PORTD, 3)
Notes

None.

Sound_Play

Prototype

sub procedure Sound_Play(dim freq_in_hz, duration_ms as word)

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)
Returns

Nothing.

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)
Notes

None.

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:
  ADPCFG = 0xFFFF                       ' Configure AN pins as digital I/O
  
  TRISB  = 0xF8                         ' Configure RB7..RB3 as input

  Sound_Init(PORTD, 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)              ' Wait for button to be released
        nop
      wend
    end if

    if (Button(PORTB,6,1,1)) then       ' If PORTB.6 is pressed play Tone1
      Tone2()
      while (RB6_bit <> 0)              ' Wait for button to be released
        nop
      wend
    end if

    if (Button(PORTB,5,1,1)) then       ' If PORTB.5 is pressed play Tone1
      Tone3()
      while (RB5_bit <> 0)              ' Wait for button to be released
        nop
      wend
    end if

    if (Button(PORTB,4,1,1)) then       ' If PORTB.4 is pressed play Tone1
      Melody2()
      while (RB4_bit <> 0)              ' Wait for button to be released
        nop
      wend
    end if

    if (Button(PORTB,3,1,1)) then       ' If PORTB.3 is pressed play Tone1
      Melody()
      while (RB3_bit <> 0)              ' Wait for button to be released
        nop
      wend
    end if
  wend
end.

HW Connection

Example of Sound Library

Example of Sound Library

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