430F5438A的ADC内部参考电压问题

2019-03-24 11:16发布

最近在搞ADC,把5438的ADC这章看了一遍,然后用例程去仿真了一下,发现一个问题,就是用内部参考电压的时候在寄存器CTL0设置了2.5V,REFON也置1了,然后MCTL1里的SREF为1,这都是按例程里来设置的,结果在A0输入的时候,得到的仿真结果是0X0FFF,也就是4095,这说明我的输入是超过或者是等于参考电压,但我实际测的A0的输入电压为1.1V左右,跟2.5V都差很多啊,为什么是满的值。
我把参考电压选择SREF改为0,也就是参考电压为AVCC跟AVSS,这样转换的值就正确了,3.3V的参考转换后在1453左右,误差不大,就是内部参考2.5V或者1.5V都不行,始终转换为满值4095,不知道问题出在哪,请大大指教。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
柠檬酸钠
1楼-- · 2019-03-24 16:58
 精彩回答 2  元偷偷看……
zh2244ou
2楼-- · 2019-03-24 19:07
< :TI_MSP430_内容页_SA7 --> 程序我贴下:
#include <msp430.h>
volatile long temp;
void AD_Init(void)
{
  int i;
  P6SEL |= 0x01;                            // Enable A/D channel A0
  ADC12CTL0 = ADC12ON+ADC12SHT0_4+ADC12REFON+ADC12REF2_5V; // Turn on ADC12, set sampling time,选用内部参考2.5V
  ADC12CTL1 = ADC12SHP;       // Use sampling timer, set mode
  ADC12MCTL0 = ADC12SREF_1+ADC12INCH_0;                 // Vr+=Vref+ and Vr-=AVss
  for ( i=0; i<0x30; i++);                  // Delay for reference start-up
  ADC12CTL0 |= ADC12ENC;                    // Enable conversions
}
void AD_Start(void)
{
  ADC12CTL0 |= ADC12SC;                     // Start conversion
}
int main(void)
{
  WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
  AD_Init();                                             //AD初始化
  while(1)
  {
    AD_Start();                                        //开始AD转换
    while (!(ADC12IFG & BIT0));               //判断转换完成与否
    temp = ADC12MEM0;                        //读取转换数据,IFG自动清零
     __no_operation();                         // For debugger
  }
  
}
在修改ADCMCTL0中的ADC12SREF_1这个参数,当为0时,转换数据正常,当为1时,得到的结果就是4095,而不管CTL0中的REF_2.5V置1与否。
zh2244ou
3楼-- · 2019-03-24 22:19
有专家们知道问题出在哪里么?
zh2244ou
4楼-- · 2019-03-25 00:23
 精彩回答 2  元偷偷看……
zh2244ou
5楼-- · 2019-03-25 03:47
这个,没有技术人员分析下?
zjhzyhfqm
6楼-- · 2019-03-25 04:23
楼主找到原因能不能发个消息给我,我也蛋碎了。。。感觉程序挺对的,到底哪里不对啊

一周热门 更多>

相关问题

    相关文章