MSP430F149的AD采样问题!!!!

2019-03-24 09:57发布

    你们谁知道msp430F149用多通道采样时为什么两个通道的采集电压会互相影响呢?




void ADC12(void)

{

  P6SEL |=0X03;  //使能ADC通道

  ADC12CTL0=ADC12ON+SHT0_15+MSC+REFON + REF2_5V;//打开ADC,设置采样时间,多次转换

  ADC12CTL1=SHP+CONSEQ_3;//使用采样定时器;多通道转换

  ADC12MCTL0 |=SREF_1+INCH_0;//通道选择

  ADC12MCTL1 |=SREF_1+INCH_1+EOS; //以EOS结束此次转换

  ADC12IE=0X03;//使能ADC中断

  ADC12CTL0 |=ENC+ADC12SC;//使能转换;开始转换



  _EINT();

}



/*ADC中断服务函数,各个通道转换值的存储*/

#pragma vector=ADC_VECTOR

__interrupt void ADC12ISR(void)

{

    k++;

    if(k==100) {k=0;}

    caltmp[k]=ADC12MEM0;

    caltmpp[k]=ADC12MEM1;

}



void xian_shi(void)

{

    int i,j ;

    ulong AVR0,AVR1;

    ulong sum0=0,sum1=0;

    for(i=0;i<100;i=i+2)

      sum0 += caltmp[i];

    AVR0 = sum0/50;

    //sum0=0;

    Temp=(AVR0*25000)/4096;          //计算十进制的电压值

    ptr[0]=(int)Temp/10000;            

    ptr[1]=(int)Temp%10000/1000;

    ptr[3]=(int)Temp%1000/100;

    ptr[4]=(int)Temp%100/10;

    ptr[5]=(int)Temp%10/1;

    ptr[6]=11;

    ptr[2]=10;

    LCD_write_com(0x88);

    DisplayCgrom(0x88,"电压:   ");

    for(i=0;i<7;i++)

    {

      delay_ms(100);

      LCD_write_data(shuzi[ptr[i]]);

     }



    for(j=1;j<100;j=j+2)

      sum1 += caltmpp[j];

    AVR1 = sum1/50;

    Temp=(AVR1*25000.0)/4096.0;

    ptr[0]=(int)Temp/10000;            

    ptr[1]=(int)Temp%10000/1000;

    ptr[3]=(int)Temp%1000/100;

    ptr[4]=(int)Temp%100/10;

    ptr[5]=(int)Temp%10/1;

    ptr[6]=11;

    ptr[2]=10;

    LCD_write_com(0x98);

    DisplayCgrom(0x98,"电压:   ");

    for(j=0;j<7;j++)

    {

      delay_ms(10);

      LCD_write_data(shuzi[ptr[j]]);

     }

}

//***********************************************************************

//      主程序

//***********************************************************************

void main(void)

{

   WDT_Init();                 //看门狗设置

   Clock_Init();               //系统时钟设置

   Port_init();                //系统初始化,设置IO口属性

   delay_ms(100);              //延时100ms

   LCD_init();                 //液晶参数初始化设置

   LCD_clear();                //清屏

   ADC12();                    //ADC初始化

   delay_ms(100);

   DisplayCgrom(0X80,"傻人 有 傻福");

   DisplayCgrom(0x90,"神啊!救救我吧");

   while(1)

   {

     delay_ms(10);

     xian_shi();

   }



}



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
qiushenghua
1楼-- · 2019-03-24 21:03
这么长的代码,让人看着眼晕,你还是简单描述一下你要干嘛吧,又是怎么实现的。
先将程序思路给一下,别人好帮你排查问题。
如果是遇到了故障,那么得先将故障现象描述清楚,别人才知道该怎么去排查。
杨福毅
2楼-- · 2019-03-25 00:26
< :TI_MSP430_内容页_SA7 --> 你用万用表测引脚的电压值,就是P6口的外围功能,从你程序看应该测量6.1和6.2引脚电压,看一看引脚的电压是否正确!还有就是单片机的上5V和3.3V之间的电压会随外界接入而影响的!你可以换用外部电源试一试!
heor小孩
3楼-- · 2019-03-25 02:22
 精彩回答 2  元偷偷看……
heor小孩
4楼-- · 2019-03-25 03:45
杨福毅 发表于 2015-7-29 09:17
你用万用表测引脚的电压值,就是P6口的外围功能,从你程序看应该测量6.1和6.2引脚电压,看一看引脚的电压是 ...

    程序里面显示的是6.0和6.1撒    ADC12MEM0和ADC12MEM1这两个是6.0和6.1端口的,                 之前我把存放的那个数组定义个数少了,我需要的次数多,所以就溢出拿其他的来充当了              谢谢你哦
你为天涯
5楼-- · 2019-03-25 07:21
我想用msp430测量外部电压   也就是当做万用表的功能   把测试的结果显示在1602的显示屏上  我应该怎么做啊?
跪求!~~~~~~~~~~~~
强仔00001
6楼-- · 2019-03-25 08:23
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章