Sound Library

The mikroBasic 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

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 RC3

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(500, 200)       ' Frequency = 500Hz, Duration = 200ms
end sub

sub procedure Tone2
    Sound_Play(555, 200)       ' Frequency = 555Hz, Duration = 200ms
end sub

sub procedure Tone3
    Sound_Play(625, 200)       ' Frequency = 625Hz, Duration = 200ms
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(1250, 20)
end sub
  
sub procedure ToneC
    Sound_Play(1450, 20)
end sub
  
sub procedure ToneE
    Sound_Play(1650, 80)
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:

  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                      ' endless loop
    if (PINB7_bit <> 0) then      ' If PORTB.7 is pressed play Tone1
      Tone1()
      while (PINB7_bit <> 0)      ' Wait for button to be released
       nop
      wend
    end if

    if (PINB6_bit <> 0) then      ' If PORTB.6 is pressed play Tone2
      Tone2()
      while (PINB6_bit <> 0)      ' Wait for button to be released
        nop
      wend
    end if
      
    if (PINB5_bit <> 0) then      ' If PORTB.5 is pressed play Tone3
      Tone3()
      while (PINB5_bit <> 0)      ' Wait for button to be released
        nop
      wend
    end if
      
    if (PINB4_bit <> 0) then      ' If PORTB.4 is pressed play Melody2
      Melody2()
      while (PINB4_bit <> 0)      ' Wait for button to be released
        nop
      wend
    end if
      
    if (PINB3_bit <> 0) then      ' If PORTB.3 is pressed play Melody
      Melody()
      while (PINB3_bit)           ' Wait for button to be released
        nop
      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