OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5913|回复: 1

msp430G2553的AD10的DTC问题

[复制链接]

20

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-5-27
在线时间
6 小时
发表于 2014-8-14 15:39:13 | 显示全部楼层 |阅读模式
5金钱

题目要求要对外部输入正弦波进行正负幅值采样,所以我使用了DTC两个通道,下面是我的代码:

[mw_shl_code=c,true]void ADC_Init(void) { /*失能ADC才能改变相关寄存器的值*/ ADC10CTL0 &= ~ENC; /*16个ADC Clock , SHI信号自动执行 , 基准电压生成器打开(2.5V),使能中断*/ ADC10CTL0 = ADC10SHT_2 + MSC + REFON + ADC10ON + ADC10IE+REF2_5V; ADC10CTL1 = INCH_5 + SHS_0 + ADC10SSEL_2 + CONSEQ_3 + ADC10DIV0; ADC10AE0 |= BIT4 + BIT5 ;//使能模拟输入脚A04,A05 ADC10AE0|=0x30; //定义了每个块中的传输量为2个。转换结果是16位的,也就是传输2个16位数据就是一个块就会把中断标志位置位,触发中断。 //因为是两个通道的,所以每个通道数据传输一次 ADC10DTC1 = 0x04; __delay_cycles(30000); ADC10CTL0&=~ADC10IFG;//清除中断标志位 ADC10CTL0 |= ENC; //ADC使能 }[/mw_shl_code]

[mw_shl_code=c,true]#pragma vector =ADC10_VECTOR __interrupt void ADC10_ISR(void) { ADC10CTL0&=~ADC10IFG;/*清除中断*/ _disable_interrupts(); printf("1=%d ",Result[0]); printf("2=%d ",Result[1]); printf("3=%d ",Result[2]); printf("4=%d \r\n",Result[3]); Channel_A=0; Channel_B=0; P1OUT^=BIT0; _enable_interrupts(); }[/mw_shl_code]

[mw_shl_code=c,true]ClockInit(); USART_Init(); ADC_Init(); P1DIR|=BIT0; while(1) { ADC10CTL0 &= ~ENC; ADC10SA = (int)Result;// 设置DTC的开始地址 while (ADC10CTL1 & BUSY); //等待忙,ADC10 忙。 该位标志着一个有效的采样和转换操作 ADC10CTL0 |= ENC + ADC10SC;//使能转换并且开始转换 _delay_cycles(1000000); }[/mw_shl_code]

现象是我把P1.4和P1.5直接接地,对应2.5V的参考电压来说应该是输出0的但是这是现象:



然后我一个接地一个结VCC是这个现象:



我的问题是:第一我试了连续转换和单次通道转换(不是单通道),都是这个值。

                    我如果直接每次采样直接输出及定义DTC块大小为0x02的时候又是正确的

                    所以想请教下搞过DTC的大神

原子哥在哪儿我就在哪儿
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-14 23:26:05 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 13:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表