4728|7

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:利用MSP430制作函数发生器 [复制链接]

我是一个菜鸟,目前有任务利用MSP430F1611制作一个函数发生器,信号最后经DAC12输出,函数波形方波,正弦波,三角波等,频率要求不高200Hz以下,请问各位高手应如何入手,有什么思路,小弟在此谢谢了。

最新回复

外部接了Vref吗?  详情 回复 发表于 2008-1-8 11:50
 
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1、在FLASH中存储波形数据
2、联合使用DMA和DAC12
3、DMA设定在“块到字”编址模式,“字到字重复”传输模式
4、用TA或TB的PWM功能来触发DAC12数据装载,再用DAC12的DAC12IFG来触发DMA数据传输,这样实现由TA或TB来连动DAC12和DMA
5、TA或TB的PWM周期乘以波形点数就是输出波形周期
比如TA或TB的PWM周期是0.00015625秒,而没周期波形数据为32点,那么0.00015625*32=0.05秒,即输出信号频率为200Hz
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢指导,我会一句一句的消化理解的。不过如果有相关的例子,那就太好了。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用:

谢谢指导,我会一句一句的消化理解的。不过如果有相关的例子,那就太好了。
;*******************************************************************************
; MSP430xG461x Demo - DMA2, Rpt'd ××k to DAC1, 8-Bit Sine, TBCCR2, DCO
;
; Description: DMA2 is used to transfer a sine look-up ta××e byte-by-byte
; as a repeating ××ock to DAC12_1. The effect is a sine w××e output. Timer_B
; operates in upmode with CCR2 loading DAC12_1 on the rising edge, CCR2_CCIFG
; triggering the next DMA2 transfer. Use external reference on VeRef+.
; ACLK = 32kHz, MCLK = SMCLK = TBCLK = default DCO 1048576Hz
;
; MSP430xG461x
; -----------------
; /|\| XIN|-
; | | | 32kHz
; --|RST XOUT|-
; | |
; Ext Ref->|VeRef+ DAC1/P6.7|--> ~ 1kHz sine w××e output
;
;
; A. Dannenberg/ K.Venkat
; Texas Instruments Inc.
; Dec 2006
; Built with IAR Embedded Workbench Version: 3.41A
;*******************************************************************************
#include "msp430xG46x.h"
;-------------------------------------------------------------------------------
RSEG CSTACK ; Define stack segment
;-------------------------------------------------------------------------------
RSEG CODE ; Assem××e to Flash memory
;-------------------------------------------------------------------------------
RESET mov.w #SFE(CSTACK),SP ; Initialize stackpointer
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
SetupDMA2 movx.a #Sin_tab,&DMA2SA ; Source ××ock address
movx.a #DAC12_1DAT,&DMA2DA ; Destination single address
mov.w #020h,&DMA2SZ ; ××ock size
mov.w #DMA2TSEL_2,&DMACTL0 ; DAC12IFG trigger
mov.w #DMASBDB+DMADT_4+DMASRCINCR_3+DMAEN,&DMA2CTL; Rpt, inc src, byte-byte
SetupDAC12 mov.w #DAC12SREF_2+DAC12RES+DAC12LSEL_3+DAC12IR+DAC12AMP_5+DAC12ENC,&DAC12_1CTL
;
SetupC1 mov.w #OUTMOD_7,&TBCCTL2 ; Reset/set
mov.w #01,&TBCCR2 ; PWM Duty Cycle
SetupC0 mov.w #032-1,&TBCCR0 ; Clock period of TBCCR0
SetupTB mov.w #TBSSEL_2+MC_1,&TBCTL ; SMCLK, up mode
;
Mainloop bis.b #CPUOFF,SR ; Enter LPM0
nop ; Needed only for debugger
;
;-------------------------------------------------------------------------------
; 8-bit Sine Lookup ta××e with 32 steps
;-------------------------------------------------------------------------------
Sin_tab DB 128, 152, 176, 198, 218, 234, 245, 253
DB 255, 253, 245, 234, 218, 198, 176, 152
DB 128, 103, 79, 57, 37, 21, 10, 2
DB 0, 2, 10, 21, 37, 57, 79, 103
;-------------------------------------------------------------------------------
COMMON INTVEC ; Interrupt Vectors
;-------------------------------------------------------------------------------
ORG RESET_VECTOR ; POR, ext. Reset, Watchdog
DW RESET
END
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
请问有没有C的例子,谢谢mmtcyq
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
C语言的源代码我已经找到了,谢谢!努力学习中......
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
我把程序下载到开发板中,为什么没有显示。程序见下:
#include <msp430x16x.h>

//------------------------------------------------------------------------------
// 8-bit Sine Lookup ta××e with 32 steps
//------------------------------------------------------------------------------
const char Sin_tab[32] = { 128, 152, 176, 198, 218, 234, 245, 253,
255, 253, 245, 234, 218, 198, 176, 152,
128, 103, 79, 57, 37, 21, 10, 2,
0, 2, 10, 21, 37, 57, 79, 103
};

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
DMA2SA = (int)Sin_tab; // Source ××ock address
DMA2DA = DAC12_1DAT_; // Destination single address
DMA2SZ = 0x020; // ××ock size
DMACTL0 = DMA2TSEL_2; // TBCCR2 trigger
DMA2CTL = DMASBDB + DMADT_4 + DMASRCINCR_3 + DMAEN; // Rpt, inc src, byte-byte
DAC12_1CTL = DAC12SREF_2 + DAC12RES + DAC12LSEL_3 + DAC12IR + DAC12AMP_5 + DAC12ENC;
TBCCTL2 = OUTMOD_7; // Reset/set
TBCCR2 = 01; // PWM Duty Cycle
TBCCR0 = 032 - 1; // Clock period of TBCCR0
TBCTL = TBSSEL_2 + MC_1; // SMCLK, up mode
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0
}
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
外部接了Vref吗?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表