打印

AD实验

[复制链接]
1107|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
开始吧|  楼主 | 2016-7-30 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
dirtwillfly| | 2016-7-30 20:53 | 只看该作者
不懂。 显示Enable to read没什么问题啊

使用特权

评论回复
板凳
lihuami| | 2016-7-30 22:10 | 只看该作者
你是怎么显示的?

使用特权

评论回复
地板
lihuami| | 2016-7-30 22:10 | 只看该作者
你的还有内部的报错的机制吗?

使用特权

评论回复
5
开始吧|  楼主 | 2016-7-31 09:44 | 只看该作者
dirtwillfly 发表于 2016-7-30 20:53
不懂。 显示Enable to read没什么问题啊

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


使用特权

评论回复
6
开始吧|  楼主 | 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

  }
}

使用特权

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

我用的是msp430f5529的板子

使用特权

评论回复
8
dirtwillfly| | 2016-7-31 09:58 | 只看该作者
开始吧 发表于 2016-7-31 09:48
但是新的问题来了。我想换一下寄存器,结果却显示不正确了。。。请帮我看一下啊这个程序有问题么?

没看出有什么问题。
你修改的哪里?哪里显示不正确?

使用特权

评论回复
9
开始吧|  楼主 | 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+。这是为什么啊?

使用特权

评论回复
10
houjiakai| | 2016-7-31 16:50 | 只看该作者
楼主这是从哪里得到的

使用特权

评论回复
11
houjiakai| | 2016-7-31 16:53 | 只看该作者
你是不是库函数没有这个寄存器的?

使用特权

评论回复
12
Rollo| | 2016-7-31 18:33 | 只看该作者
解决了,是没问题,暂停一下程序,再运行就正常了。

什么叫暂停一下程序 啊

使用特权

评论回复
13
开始吧|  楼主 | 2016-7-31 19:42 | 只看该作者
Rollo 发表于 2016-7-31 18:33
什么叫暂停一下程序 啊

就是运行程序后,暂停运行一下,再次运行

使用特权

评论回复
14
开始吧|  楼主 | 2016-7-31 19:44 | 只看该作者
houjiakai 发表于 2016-7-31 16:50
楼主这是从哪里得到的

是从mspware直接导入的,ADC12MEM0寄存器正常显示,但是ADC12MEM1,能显示,但是结果不正确

使用特权

评论回复
15
开始吧|  楼主 | 2016-7-31 19:45 | 只看该作者
houjiakai 发表于 2016-7-31 16:53
你是不是库函数没有这个寄存器的?

这个库函数应该有吧,我想不会有这种问题吧

使用特权

评论回复
16
i1mcu| | 2016-8-1 23:15 | 只看该作者
你读取正确了寄存器了吗

使用特权

评论回复
17
i1mcu| | 2016-8-1 23:17 | 只看该作者
开始吧 发表于 2016-7-31 19:44
是从mspware直接导入的,ADC12MEM0寄存器正常显示,但是ADC12MEM1,能显示,但是结果不正确 ...

结果偏差是多少?

使用特权

评论回复
18
开始吧|  楼主 | 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也要同步,但我试了试,这个不管也可以。。

使用特权

评论回复
19
youtome| | 2016-8-2 21:56 | 只看该作者

楼主的这个寄存器弄错了。

使用特权

评论回复
20
youtome| | 2016-8-2 21:59 | 只看该作者
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

68

帖子

0

粉丝