AD实验

[复制链接]
1594|21
 楼主| 开始吧 发表于 2016-7-30 17:29 | 显示全部楼层 |阅读模式
我用的是MSP430F5529LP,,,在做AD实验时,输入信号后不能出现结果,查看ADC12MEMX寄存器,显示Enable to read ,,试了一些其他程序,正常,,,这是什么情况?  我输入的模拟量用的是3.3v,5v之类的
dirtwillfly 发表于 2016-7-30 20:53 | 显示全部楼层
不懂。 显示Enable to read没什么问题啊
lihuami 发表于 2016-7-30 22:10 | 显示全部楼层
你是怎么显示的?
lihuami 发表于 2016-7-30 22:10 | 显示全部楼层
你的还有内部的报错的机制吗?
 楼主| 开始吧 发表于 2016-7-31 09:44 | 显示全部楼层
dirtwillfly 发表于 2016-7-30 20:53
不懂。 显示Enable to read没什么问题啊

解决了,是没问题,暂停一下程序,再运行就正常了。


 楼主| 开始吧 发表于 2016-7-31 09:48 | 显示全部楼层
dirtwillfly 发表于 2016-7-30 20:53
不懂。 显示Enable to read没什么问题啊

但是新的问题来了。我想换一下寄存器,结果却显示不正确了。。。请帮我看一下啊这个程序有问题么?


#include <msp430.h>

int main(void)
{
  volatile unsigned int i;
  WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
  P6SEL |= 0x04;                            // Enable A/D channel A2
  REFCTL0 &= ~REFMSTR;                      // Reset REFMSTR to hand over control to
                                            // ADC12_A ref control registers
  ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12REFON+ADC12REF2_5V;
                                            // Turn on ADC12, Sampling time
                                            // On Reference Generator and set to
                                            // 2.5V
  ADC12CTL1 = ADC12CSTARTADD_1+ADC12SHP;                     // Use sampling timer,,用ADC12MEM1存储结果
  ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_2;                 // Vr+=Vref+ and Vr-=AVss,,,选择通道2

  for ( i=0; i<0x30; i++);                  // Delay for reference start-up

  ADC12CTL0 |= ADC12ENC;                    // Enable conversions

  while (1)
  {
    ADC12CTL0 |= ADC12SC;                   // Start conversion
    while (!(ADC12IFG & BIT0));
     __no_operation();                       // SET BREAKPOINT HERE

  }
}

 楼主| 开始吧 发表于 2016-7-31 09:49 | 显示全部楼层
开始吧 发表于 2016-7-31 09:48
但是新的问题来了。我想换一下寄存器,结果却显示不正确了。。。请帮我看一下啊这个程序有问题么?

我用的是msp430f5529的板子
dirtwillfly 发表于 2016-7-31 09:58 | 显示全部楼层
开始吧 发表于 2016-7-31 09:48
但是新的问题来了。我想换一下寄存器,结果却显示不正确了。。。请帮我看一下啊这个程序有问题么?

没看出有什么问题。
你修改的哪里?哪里显示不正确?
 楼主| 开始吧 发表于 2016-7-31 14:40 | 显示全部楼层
#include <msp430.h>

int main(void)
{
  volatile unsigned int i;
  WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
  P6SEL |= 0x01;                            // Enable A/D channel A0
  REFCTL0 &= ~REFMSTR;                      // Reset REFMSTR to hand over control to
                                            // ADC12_A ref control registers
  ADC12CTL0 = ADC12ON+ADC12SHT02+ADC12REFON+ADC12REF2_5V;
                                            // Turn on ADC12, Sampling time
                                            // On Reference Generator and set to
                                            // 2.5V
  ADC12CTL1 = ADC12SHP;                     // Use sampling timer
  ADC12MCTL0 = ADC12SREF_1;                 // Vr+=Vref+ and Vr-=AVss

  for ( i=0; i<0x30; i++);                  // Delay for reference start-up

  ADC12CTL0 |= ADC12ENC;                    // Enable conversions

  while (1)
  {
    ADC12CTL0 |= ADC12SC;                   // Start conversion
    while (!(ADC12IFG & BIT0));
    __no_operation();                       // SET BREAKPOINT HERE

  }
}

这是最初的程序,在mspware里直接下的,,,用A0通道输入信号,转换结果存储在寄存器ADC12MEM0中,显示结果正常,,,之前发的程序改成了A2通道输入,转换结果存在了ADC12MEM1中,存储结果竟然不对了。。。比如我输入2.5V电压,ADC12MEM0中出现结果4095或者小一点点,而ADC12MEM1中出现仅90+。这是为什么啊?
houjiakai 发表于 2016-7-31 16:50 | 显示全部楼层
楼主这是从哪里得到的
houjiakai 发表于 2016-7-31 16:53 | 显示全部楼层
你是不是库函数没有这个寄存器的?
Rollo 发表于 2016-7-31 18:33 | 显示全部楼层
解决了,是没问题,暂停一下程序,再运行就正常了。

什么叫暂停一下程序 啊
 楼主| 开始吧 发表于 2016-7-31 19:42 | 显示全部楼层
Rollo 发表于 2016-7-31 18:33
什么叫暂停一下程序 啊

就是运行程序后,暂停运行一下,再次运行
 楼主| 开始吧 发表于 2016-7-31 19:44 | 显示全部楼层
houjiakai 发表于 2016-7-31 16:50
楼主这是从哪里得到的

是从mspware直接导入的,ADC12MEM0寄存器正常显示,但是ADC12MEM1,能显示,但是结果不正确
 楼主| 开始吧 发表于 2016-7-31 19:45 | 显示全部楼层
houjiakai 发表于 2016-7-31 16:53
你是不是库函数没有这个寄存器的?

这个库函数应该有吧,我想不会有这种问题吧
i1mcu 发表于 2016-8-1 23:15 | 显示全部楼层
你读取正确了寄存器了吗
i1mcu 发表于 2016-8-1 23:17 | 显示全部楼层
开始吧 发表于 2016-7-31 19:44
是从mspware直接导入的,ADC12MEM0寄存器正常显示,但是ADC12MEM1,能显示,但是结果不正确 ...

结果偏差是多少?
 楼主| 开始吧 发表于 2016-8-2 11:17 | 显示全部楼层
i1mcu 发表于 2016-8-1 23:17
结果偏差是多少?

偏差4000+,,,


不过已经解决了,把这段 ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_2改成 ADC12MCTL1 = ADC12SREF_1 + ADC12INCH_2就好了,,,就是 ADC12MCTL0x与 ADC12CSTARTADDx中的x一样就好了,书上还说ADC12IFGx中的x也要同步,但我试了试,这个不管也可以。。
youtome 发表于 2016-8-2 21:56 | 显示全部楼层

楼主的这个寄存器弄错了。
youtome 发表于 2016-8-2 21:59 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

68

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部