Function: Generate random noise, sine wave,
sawtooth wave or a sweeping sine wave
on the C54x DSKPlus.
Location: ftp://ftp.ti.com/pub/tms320bbs/c5xxdskfiles/Func.exe
By:
William Erfurt
Function Generation Application Code: dskpfunc.exe
Starting off:
The file "dskpfunc.exe" can be downloaded from the above listed FTP site to provide generation of several different wave forms a on the C54x DSK Plus. First save dskpfunc.exe into it’s own directory. Then run the executable (either in DOS or Windows) allowing it to explode into the following list of files:
dskpfunc.exe - The original file that was downloaded Main,asm - Main assembly program Main.lst - List file Main.obj - Object file for main assembly program Ac01init.asm - Initializes the analog interface on the DSK Plus Vectors.asm - Initializes the C542 interrupt vector table readme.txt - Read me file
Using the debugger download and run the file main.obj. With this program you can generate various functions with the C54xDSK. After you load the program you must specify what function you would like to generate. To do this use the debugger interface to modify register AR3 (it is defaulted to FFFF when the program is loaded) . Modify AR3 to 1, 2, 3, 4 for the following waveforms:
- (1) sine wave
- (2) sawtooth wave
- (3) sweeping sine wave
- (4) random noise
You can connect a speaker or an oscilloscope to the output RCA jack to observe the output. The jacks are labeled on the DSK board, for more information on the jacks please see the TMS320C54x DSKPlus User’s Guide page 1-4.
For information on how to modify the code to generate different frequency waves please see the "HINTS" section on the next page.
Theory:
SINE WAVE:
The following difference equation is used to generate the sine wave:
y[n]=Ay(n-1)+By(n-2)
- y[n] is the current output
- y(n-1) and y(n-2) are previous inputs, and are initialized to and respectively
- A and B are the coefficients or gains and are initialized to and respectively
SAWTOOTH WAVE:
To generate the sawtooth wave accumulator A is continuously incremented by 80 (50 hex). The digital value of the lowest 16 bits of the A accumulator is used as the output and converted to an analog waveform. The value of accumulator A continues to grow until it overflows. When the overflow occurs the a new period of the sawtooth wave begins.
A = A + 80
This operation occurs each time the AC01 interrupts, generating a new output.
SWEEPING SINE WAVE:
The sweeping sine wave is based on the same difference equation that the sine wave generator is based on, however the coefficient A (labeled Ncoeff) is variable. Ncoeff is incremented to a max value and then dectemented to a min value which results in the wave growing in frequency and amplitude and then shrinking again.
Hints:
To change the frequency of the sine wave: look to the line:File: "main.asm" Under "VARIABLE AND GOLBAL FUNCTION DECLARATIONS" try changing the value of "coeff" the default value is 078d coeff .word 078dhObserve the changes that you have made on an oscilloscope or with a speaker.
To change the frequency of the sawtooth wave: look to the line:
File: "main.asm" Under the sawtooth code section, change the value that is used to incremented the A accumulator. The default value is "10" (when left shifted 10 it equals 80 or 50 hex) Increasing/decreasing it increases/decreases the frequency sawtooth frequency. Sawtooth A = A + #10 << 3Observe the changes that you have made on an oscilloscope or with a speaker.
To change the sampling frequency, look to the line:
File: "Ac01init.asm" REG1 .set 124h reg2 .set 20fh The sampling frequency is defined by: Sampling Frequency = MCLK/ ( 2 * A * B) where: MCLK = 10Mhz A = Bits 0 to 8 of REG1 (for example: REG1 = 124, then A = 24) B = Bits 0 to 8 of REG2 (for example: REG2 = 20f, then B= 0f)
Refer to page 2-20 in the "TLC320AC01C User’s Manual" for more information.