找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5465|回复: 0
收起左侧

msp430多路ad采集

[复制链接]
ID:111475 发表于 2016-3-30 19:08 | 显示全部楼层 |阅读模式
    之前写过,我也是找网上程序进行修改的。我做的是基于msp430g2231的传感器平台,运用到了多路ad采集,当然我是直接采集的,另外2种方式是中断采集和dma采集,中断采集以前做过,dma采集只在stm32中使用过,msp430没有。
              我用的msp430g2231,ad多路采集有很多种方法,我只说一种。

            20150917165949_44558.jpg

         20150917170017_62151.jpg
             这个是之前发的图片,msp430g2231 4路ad采样,LED显示。
             其他的我不用说,我只写主要的代码。
        这个事初始化函数,初始化用的,当然也可以用其他的方式初始化,初始化函数尽量在系统启动之后写。
        void init_ADC10()
{
P1SEL|=BIT3+BIT4+BIT5+BIT7;
ADC10AE0|=BIT3+BIT4+BIT5+BIT7; // 使P1.0允许AD模拟输入信号
ADC10CTL0=ADC10ON+MSC+SREF_0;//+REFON 开AD内核,选择电源为参考电压
ADC10CTL1=ADC10SSEL_0+CONSEQ_0; //+INCH_1+INCH_2 选择ADC12SC为触发源,选择系统时钟为AD内核时钟,采用单通道多次采用

}
            然后就是采样函数,就这样简单,当然如果需要定时采样,可以开启ad定时器,也不是很难,仔细研究下就可以了。
           单通道多次采样几乎是4个重复的步骤,如果采集的是实时的信号,我是不建议这样写的,要么中断,要么dma,干不干就看你了。具体的意思我就不过多解释了。
        void start_ADC10()
{
ADC10CTL1|=INCH_3;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[0]= ADC10MEM;
//printf("%dn",result[1]);
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_3;
ADC10CTL1|=INCH_4;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[1]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_4;
ADC10CTL1|=INCH_5;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[2]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_5;
ADC10CTL1|=INCH_7;
ADC10CTL0|=ADC10SC+ENC;
while(ADC10CTL1&ADC10BUSY!=0);
result[3]= ADC10MEM;
ADC10CTL0&=~(ADC10SC+ENC);
ADC10CTL1&=~INCH_7;
}

传感器参数采样.zip

28.77 KB, 下载次数: 84, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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