Go to the MSP430 Yahoo group website and click on FILES. There is a file
in there which allows both recoridng and playback of sounds at
reasonable quality. The memory requirement is 2K/second at 16k samples a
second. As an alternative you can simply create a table of values that
represent a single cycle of a sine wave (you actually only need a
quarter cycle, but you must then apply a little logic and maths to 'walk
the table'.
These values, output sequentially to a DAC, or used as the values for a
PWM will give a single tone whose frequency is dependant upon the period
of the PWM signal, or time between outputting each value. You can also
make the tabel smaller, or, instead of incrementing the table pointer by
1, you could use a larger value to deal with higher frequencies.
Unlike the recording software this is limited to tones, and 'chords',
but it requires very little memory to implement.
the following code shows a simple program to generate a single tone
using a 64 entry sine table. The output frequency at 8MHz is
8,000,000/(TONE * 64) or 125,000/TONE. Uisng the full table at a minimum
INT period of 100 clock cycles this gives a maximum frequency of
1.25kHz, but by using a step size of up to 16, and a simple output
filTER FREQUENCIES UP TO 20kHz could readily be produced. using a 12 bit
table and DAC or PWM would give better results. With a dedicated data
port for the DAC, and DAC operation restricted to the ISR this program
can be reduced even further, as shown below the first example.
;****** Timer_B 0 is Buzzer tone
TB0_ISR:
ADD &TONE,&CCRB0. ;TONE holds ISR period
BIS #CCIE,&CCTLB0 ;make sure int is enabled
PUSH &P5OUT ;PRESERVE PORTS IN CASE THEY
PUSH &P4OUT ;WERE IN USE
MOV.B SINE_TABLE(R10),&P5OUT ;OUTPUT NEXT VALUE
INC R10 ;R10 IS THE TBLE POINTER
AND #003FH,R10 ;LIMIT TO 6 BITS
BIC.B #DACSEL,&P4OUT ;SELECT THE DAC
NOP ;
BIS.B #DACSEL,&P4OUT ;BY STROBING IT
POP &P4OUT
POP &P5OUT
RETI
TB0_ISR:
ADD &TONE,&CCRB0 ;TONE holds ISR period
BIS #CCIE,&CCTLB0 ;make sure int is enabled
MOV.B SINE_TABLE(R10),&P5OUT ;OUTPUT NEXT VALUE
INC R10 ;R10 IS THE TBLE POINTER
AND #003FH,R10 ;LIMIT TO 6 BITS
RETI
SINE_TABLE:
DB 128,140,153,165,177,188,199,209,218,227,234,241,246,250,253,255
DB 255,253,250,246,241,234,227,218,209,199,188,177,165,153,140,128
DB 127,116,103,91,79,68,57,47,38,29,22,15,10,6,3,1
DB 0,3,6,10,15,22,29,38,47,57,68,79,91,103,116,127
This is, of course, a sinusoidal tone generator. The output is
surprisingly good, depending upon the speaker quality, however if you
only wanted square wave signals there are other ways to do it. For
example you could decide that you wanted a maximum of 4 tones, and
assign a timer to each (simplest but wasteful of resources) by
outputting a square wave tone on the timer output pin and OR'ing the 4
pins you would get the effect of crude polyphony. But, since Fout now
equals CLOCK/2*period an 8MHz clock gives you a 40kHz tone when the
period between interrupts is 100 clocks. You could also make use of this
fact to use asingle timer to create a similar polyphony. Either using 4
pins, and OR'ing them (each pin controlled by the baseline timer, or by
doing a little calculation and controlling a single pin. For clues onn
how to do this, creating complex polyphony from a single timer study the
operation of the CVSD like algorithm I first pointed you at on the FTP
site. This uses a binary pattern to reproduce complex waveforms.
Calculating the waveforms is simply a case of adding calculations for
multuiple pure tones together. This method can be almost as good quality
as a 12 bit sinusoidal table based system, yet it handles higher
frequencies. It is a bit more compute intensive though, so it is best
used in systems with plenty of processing averhead.
Well, enough about sounds, the granddaughter is screaming to be fed, so
I'd better leave the rest to your imagination.
cheers
Al
Ahh,
now everything is clear to me.
Thank you,
Gerd
--- In msp430@msp4..., "Rolf F." <rolf.freitag@d...> wrote:
> Hi,
>
> with google you can find descriptions with algorithms:
>
> http://centauri.ezy.net.au/~fastvid/picsound.htm
>
> Rolf
>
>
> gerdknese schrieb:
>
> >Hi Rolf,
> >
> >sorry but I couldn't find the archive.
> >Can you please help me to find it!
> >
> >Gerd
> >
> >--- In msp430@msp4..., "Rolf F." <rolf.freitag@d...>
wrote:
> >
> >
> >>Hi,
> >>
> >>in the archive you should find 1-bit-sound.
> >>
> >>Rolf
> >>
> >>gerdknese schrieb:
> >>
> >>
> >>
> >>>Hi Folks,
> >>>
> >>>does anybody have a simple sourcecode for a sound generator (if
> >>>possible in "C").
> >>>Connecting a piezo via a FET to a port of the MSP it's no
problem
> >>>
> >>>
> >to
> >
> >
> >>>produce a sounds, but I'm searching for a code to produce
good,
> >>>music like, sounds folling the scale to play a melody.
> >>>The MSP430 is runnig with MCLK=8MHz so it should be no problem
> >>>
> >>>
> >for
> >
> >
> >>>higher frequencies.
> >>>
> >>>See you,
> >>>Gerd
> >>>
> >>>
> >>>
> >>>
> >>>.
> >>>
> >>>
> >>>Yahoo! Groups Links
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >
> >
> >
> >
> >.
> >
> >
> >Yahoo! Groups Links
> >
> >
> >
> >
> >
> >
> >
> >
Reply by Rolf F.●June 17, 20042004-06-17
Hi,
with google you can find descriptions with algorithms:
http://centauri.ezy.net.au/~fastvid/picsound.htm
Rolf
gerdknese schrieb:
>Hi Rolf,
>
>sorry but I couldn't find the archive.
>Can you please help me to find it!
>
>Gerd
>
>--- In msp430@msp4..., "Rolf F." <rolf.freitag@d...> wrote:
>
>
>>Hi,
>>
>>in the archive you should find 1-bit-sound.
>>
>>Rolf
>>
>>gerdknese schrieb:
>>
>>
>>
>>>Hi Folks,
>>>
>>>does anybody have a simple sourcecode for a sound generator (if
>>>possible in "C").
>>>Connecting a piezo via a FET to a port of the MSP it's no
problem
>>>
>>>
>to
>
>
>>>produce a sounds, but I'm searching for a code to produce good,
>>>music like, sounds folling the scale to play a melody.
>>>The MSP430 is runnig with MCLK=8MHz so it should be no problem
>>>
>>>
>for
>
>
>>>higher frequencies.
>>>
>>>See you,
>>>Gerd
>>>
>>>
>>>
>>>
>>>.
>>>
>>>
>>>Yahoo! Groups Links
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
Reply by gerdknese●June 17, 20042004-06-17
Hi Rolf,
sorry but I couldn't find the archive.
Can you please help me to find it!
Gerd
--- In msp430@msp4..., "Rolf F." <rolf.freitag@d...> wrote:
> Hi,
>
> in the archive you should find 1-bit-sound.
>
> Rolf
>
> gerdknese schrieb:
>
> >Hi Folks,
> >
> >does anybody have a simple sourcecode for a sound generator (if
> >possible in "C").
> >Connecting a piezo via a FET to a port of the MSP it's no problem
to
> >produce a sounds, but I'm searching for a
code to produce good,
> >music like, sounds folling the scale to play a melody.
> >The MSP430 is runnig with MCLK=8MHz so it should be no problem
for
> >higher frequencies.
> >
> >See you,
> >Gerd
> >
> >
> >
> >
> >.
> >
> >
> >Yahoo! Groups Links
> >
> >
> >
> >
> >
> >
> >
> >
Reply by onestone●June 9, 20042004-06-09
Not C asm, but simple. This code generates sine waves in 64 steps.
rather than use PWM, because I didn't want to use the full count of
CCRx0, and because I already had a spare DAC channel I wrote this little
thing. The output is RC filtered then fed to an LM386 via a digital POT
volume control. It uses quite a decent speaker, and the results are
quite good. To change the frequency simply change the interval between
interrupts, or, alternatively chanbge the step size, ie use a fixed
interval and have different pointers for each tone. this allows multiple
tones to sound together. For example tone (the lowest tone) 1 will
incre,ment the step through the table by 1 each time, while tone 2 might
increment by 2 steps, or even 3/7 steps (in this case a real time table
helps spread the steps to get a mean of 3/7) It's all easier than it
sounds.
Cheers
Al
;****** Timer_B 0 is tone
TB0_ISR:
ADD &TONE,&CCRB0 ;SET NEXT INT TIME
BIS #CCIE,&CCTLB0 ;COMPARE MODE OUT DISCONNECTED
PUSH &P5OUT ;PRESERVE THE ORIGINAL PORT DATA
PUSH &P4OUT
MOV.B #SINE_TABLE(R10),&P5OUT ;R10 RESERVED AS TONE POINTER
INC R10
AND #003FH,R10 ;64 ENTRIES?
BIS.B #A0+A1,&P4OUT ;SELECT CHANNEL 4 ON QUAD DAC
NOP
BIC.B #DACSEL,&P4OUT
NOP
POP &P4OUT
POP &P5OUT
POP R10
RETI
EVEN
SINE_TABLE:
DB 128,140,153,165,177,188,199,209,218,227,234,241,246,250,253,255
DB 255,253,250,246,241,234,227,218,209,199,188,177,165,153,140,128
DB 127,116,103,91,79,68,57,47,38,29,22,15,10,6,3,1
DB 0,3,6,10,15,22,29,38,47,57,68,79,91,103,116,127
gerdknese wrote:
> Hi Folks,
>
> does anybody have a simple sourcecode for a sound generator (if
> possible in "C").
> Connecting a piezo via a FET to a port of the MSP it's no problem to
> produce a sounds, but I'm searching for a code to produce good,
> music like, sounds folling the scale to play a melody.
> The MSP430 is runnig with MCLK=8MHz so it should be no problem for
> higher frequencies.
>
> See you,
> Gerd
>
>
>
>
> .
>
>
> Yahoo! Groups Links
>
>
>
>
>
>
Reply by Rolf F.●June 9, 20042004-06-09
Hi,
in the archive you should find 1-bit-sound.
Rolf
gerdknese schrieb:
>Hi Folks,
>
>does anybody have a simple sourcecode for a sound generator (if
>possible in "C").
>Connecting a piezo via a FET to a port of the MSP it's no problem to
>produce a sounds, but I'm searching for a code to produce good,
>music like, sounds folling the scale to play a melody.
>The MSP430 is runnig with MCLK=8MHz so it should be no problem for
>higher frequencies.
>
>See you,
>Gerd
>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
Reply by gerdknese●June 9, 20042004-06-09
Hi Folks,
does anybody have a simple sourcecode for a sound generator (if
possible in "C").
Connecting a piezo via a FET to a port of the MSP it's no problem to
produce a sounds, but I'm searching for a code to produce good,
music like, sounds folling the scale to play a melody.
The MSP430 is runnig with MCLK=8MHz so it should be no problem for
higher frequencies.
See you,
Gerd