maoningchuan 发表于 2013-7-17 21:08:33

请教大家一个MSP430F169中DAC产生正弦波的问题

RT,小弟才学习430不久,我想用169内部的DA通过查询正弦波码表要产生正弦波,代码如下

#include <msp430x16x.h>


#define uint unsigned int
#define uchar unsigned char

uint Sin_tab = {
         0x7FF,0x880,0x900,0x97F,0x9FC,0xA78,0xAF1,0xB67,0xBD9,0xC48,0xCB2,0xD18,0xD79,0xDD4,0xE29,0xE77
,0xEC0,0xF01,0xF3C,0xF6F,0xF9A,0xFBE,0xFDA,0xFEE,0xFFA,0xFFE,0xFFA,0xFEE,0xFDA,0xFBE,0xF9A,0xF6F
,0xF3C,0xF01,0xEC0,0xE77,0xE29,0xDD4,0xD79,0xD18,0xCB2,0xC48,0xBD9,0xB67,0xAF1,0xA78,0x9FC,0x97F
,0x900,0x880,0x7FF,0x77E,0x6FE,0x67F,0x602,0x586,0x50D,0x497,0x425,0x3B6,0x34C,0x2E6,0x285,0x22A
,0x1D5,0x187,0x13E,0x0FD,0x0C2,0x08F,0x064,0x040,0x024,0x010,0x004,0x000,0x004,0x010,0x024,0x040
,0x064,0x08F,0x0C2,0x0FD,0x13E,0x187,0x1D5,0x22A,0x285,0x2E6,0x34C,0x3B6,0x425,0x497,0x50D,0x586
,0x602,0x67F,0x6FE,0x77E
};


uint num;

void main()
{
        uint t;
        WDTCTL =WDTPW + WDTHOLD;
        BCSCTL1 &=~XT2OFF;
        do
        {
                IFG1 &=~OFIFG;
                for(t=0xff;t>0;t--);
        }
        while((IFG1 & OFIFG) !=0);
        IFG1 &=~OFIFG;
        BCSCTL2 |= SELS+DIVS_3;
        ADC12CTL0 = REF2_5V + REFON;
        DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC;
        TACTL |=TACLR;
        //P6DIR |=BIT6;
        //P6OUT &=~BIT6;
        CCR0 =100-1;
        TACTL |=TASSEL_2 + MC_1;
        CCTL0 |=CCIE;
        _EINT();
        while(1)
        {
                _NOP();
        }
        //_BIS_SR(LPM0_bits);
}

#pragma vector = TIMERA0_VECTOR
__interrupt void tiemr(void)
{
        DAC12_0DAT = Sin_tab;
        num++;
        if(num==100)
        {
                num=0;
        }
        //DAC12_0CTL |=DAC12ENC;
}

我单独测得时候,不适用DA,引脚输出的频率和定时器理论上的值是一样的,但是加上DAC后,正弦波能够输出,但是频率始终上不去!最多也就几百小弟纠结好久了,还望各位大哥,各位前辈指点!谢谢了!

此致
敬礼

jetlib 发表于 2013-7-17 22:11:05

正弦波一般不是这么产生的。一般是输出方波,然后通过一个带通来得到正弦波。

maoningchuan 发表于 2013-7-17 23:31:13

jetlib 发表于 2013-7-17 22:11 static/image/common/back.gif
正弦波一般不是这么产生的。一般是输出方波,然后通过一个带通来得到正弦波。 ...

嗯,这个我知道,通过一个低通滤波器。,我是想用纯软件来实现,还是谢谢了

jlhgold 发表于 2013-7-18 07:26:20

频率还和sinrom大小有关

boat030 发表于 2016-6-12 08:26:15

单靠中断频率当然上不去,需要用DMA(不知道430有没有)才能输出频率比较高的信号

wuyya 发表于 2016-6-12 12:28:07

DAC转换需要时间的,不是一设置寄存器马上输出马上就跟着变了。

diego2003 发表于 2019-7-26 17:20:14

要用DMA用定时器触发模式。
页: [1]
查看完整版本: 请教大家一个MSP430F169中DAC产生正弦波的问题