搜索
bottom↓
回复: 10

msp430g2553 adc10 序列通道多次采样

[复制链接]

出0入0汤圆

发表于 2012-8-3 17:41:00 | 显示全部楼层 |阅读模式
自己在论坛里放着某位大虾写的多通道程序写了一下,自己想测P1.0和P1.1的模拟电压,经过测试P1.0显示是对的,但是P1.1就有问题了,不知道为啥,敢请高手指点!小弟不胜感激
#include "msp430g2553.h"
#include "lcd1602.h"
#define uint unsigned int  
#define uchar unsigned char
float P10_v,P11_v,P10,P11;
uint shi,ge,shi_fen,bai_fen,i=6,j,P10_int,P11_int;
uchar table[]="0123456789";
uint a[],num;//,b[],num1;
//P1.0电压值
void display_v_P10(float P10_v)
{
  //取出每位数值
  P10_v=P10_v*100;//将得到的数*100为了方便取出小数部分
  P10_int=(uint)P10_v;//保留两位小数 转化为整型
  ge =P10_int/100;//取个位
  shi_fen=P10_int/10%10;//取十分位
  bai_fen=P10_int%10;//取百分位
  
  //写每位数值
//  LCD_write_char(0+i,0,table[shi]);
  LCD_write_char(1+i,0,table[ge]);
  LCD_write_char(2+i,0,'.');
  LCD_write_char(3+i,0,table[shi_fen]);
  LCD_write_char(4+i,0,table[bai_fen]);
  
  //伏特符号
  LCD_write_char(5+i,0,'V');
}
//P1.1电压值
void display_v_P11(float P11_v)
{
  //取出每位数值
  P11_v=P11_v*100;//将得到的数*100为了方便取出小数部分
  P11_int=(uint)P11_v;//保留两位小数 转化为整型
  ge =P11_int/100;//取个位
  shi_fen=P11_int/10%10;//取十分位
  bai_fen=P11_int%10;//取百分位
  
  //写每位数值
  LCD_write_char(1+i,1,table[ge]);
  LCD_write_char(2+i,1,'.');
  LCD_write_char(3+i,1,table[shi_fen]);
  LCD_write_char(4+i,1,table[bai_fen]);
  
  //伏特符号
  LCD_write_char(5+i,1,'V');
}

//主函数
void main(void)
{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  ADC10CTL1 = INCH_1 + ADC10DIV_0 + CONSEQ_3;         // Temp Sensor ADC10CLK/4
  ADC10CTL0 |= ADC10ON + ADC10IE + REFON + REF2_5V + SREF_1 + MSC + ADC10SHT_2;
  ADC10AE0 = 0X03;  //P1.0 P1.1 analog enable
  ADC10DTC1|=0X0a;
  delay_us(40);
  
  //LCD初始化
  LCD_init_first();
  LCD_init();

  while(1)
  {
   ADC10CTL0 &= ~ENC;//关闭采样使能
   while(ADC10CTL1 & ADC10BUSY);//判断是否有采样或转换动作
   ADC10SA = (uint)a;
   ADC10CTL0 |= ADC10SC + ENC;//开始采样
   _EINT();//关闭CPU,开启总中断
   LPM0;

     for(num=0;num<5;num++)
     {
        P10 += a[1+2*num];    //取采集P1.0五次的值
        P11 += a[2*num];     //取采集P1.1五次的值
     }
   //取五次的平均值
   P10=P10/5;
   P11=P11/5;  
   //根据公式换算模拟电压值
   P10_v=P10/1023*2.5;
   P11_v=P11/1023*2.5;
   //显示部分
   display_v_P10(P10_v);
   display_v_P11(P11_v);   
  }
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
  LPM0_EXIT;// Clear CPUOFF bit from 0(SR)
}

出0入0汤圆

发表于 2012-8-4 21:43:17 | 显示全部楼层
能同时显示吗?ADC10只有一个ADC10MEM,一次只能显示一个吧、。。。

出0入0汤圆

 楼主| 发表于 2012-8-5 11:29:27 | 显示全部楼层
lin562794072 发表于 2012-8-4 21:43
能同时显示吗?ADC10只有一个ADC10MEM,一次只能显示一个吧、。。。

两行都有显示,只不过只有第一行的显示时正确的,第二行的显示不正确

出20入25汤圆

发表于 2012-8-8 13:56:43 | 显示全部楼层
要用到DMA 就是把不同通道可以传送到一个块

出0入0汤圆

发表于 2012-8-22 16:06:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-4-14 11:31:46 | 显示全部楼层
看看

出0入0汤圆

发表于 2014-5-2 15:24:20 | 显示全部楼层
楼主把完整工程贴出来看看呢

出0入0汤圆

发表于 2014-5-2 23:10:41 | 显示全部楼层
ADC10SA = (uint)a;这句是什意思

出0入0汤圆

发表于 2014-5-5 01:40:48 | 显示全部楼层
怎么好像没货啊

出0入0汤圆

发表于 2014-5-23 11:24:18 | 显示全部楼层
我也碰到 DTC 搬数据的时候 一会儿在 [0]  一会儿在[1] 通道乱掉 怪哉

出0入0汤圆

发表于 2014-5-23 11:49:11 | 显示全部楼层
可以了 有一条语句 顺序错了

错的
            ADC10CTL0 &= ~ENC;                      // ADC10 disable
                   ADC10SA = (u16)adc_temp;                        // Data buffer start address in RAM
         while (ADC10CTL1 & BUSY);             // Wait if ADC10 core is active
         
         ADC10CTL0 |= ENC + ADC10SC;             // Enable and conversion start

对的
            ADC10CTL0 &= ~ENC;                      // ADC10 disable
         while (ADC10CTL1 & BUSY);             // Wait if ADC10 core is active
         ADC10SA = (u16)adc_temp;                        // Data buffer start address in RAM
         ADC10CTL0 |= ENC + ADC10SC;             // Enable and conversion start
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 03:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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