MSP430 中ADC12用法

1.1.    介绍

Figure 4  AD模块图

在处AD时,我们关注的对象有如下几个,参考源、通道、存储地址、时钟、触发方式、精度,速度(200k)。

在上图中我们都可以找到,msp430f149的参考正电源有VRFE+ VeREF+ ,Vcc,同时有对应的负电源。采样通道有16个,存储地址则有对应16个通道,时钟则是有内部时钟及3种时钟源的分频,触发方式有4种。

因此,对于这些特点我们可以实现4种模式,单通道单次采样,单通道多次采样,多通道单次采样,多通道多次采样。

1.2.    相关寄存器

ADC12CTL0:前面8位是对采样保持时间的设置。后8位分别对应8种设置

ADC12CTL1:4位进行通道选择,后12位中有其它设置

ADC12MEMX:存储地址

ADC12MCTLX:通道,是否结速,在ENC=0时才可写

1.3.    样例代码

单通道单次采样:

P6SEL |= 0x01;                        // 使能A/D 通道A0

ADC12CTL0 = ADC12ON+SHT0_2; // 打开 ADC12, 设置采样时钟

ADC12CTL1 = SHP;                      // 使用采样时钟

//ADC12MCTL0 = SREF_2;            // Vr+ = VeREF+ (外部)

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

While(1)

{

   ADC12CTL0 |= ADC12SC;               // 开始转换

   while ((ADC12IFG & ADC12BUSY)==0);

   value=ADC12MEM0;

}

单通道多次采样:

P6SEL |= 0x01;                        // 使能A/D 通道A0

ADC12CTL0 = ADC12ON+SHT0_2; // 打开 ADC12, 设置采样时钟

ADC12CTL1 = SHP+CONSEQ_2;                      // 使用采样时钟

//ADC12MCTL0 = SREF_2;            // Vr+ = VeREF+ (外部)

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

While(1)

{

  while ((ADC12IFG & ADC12BUSY)==0);

           value=ADC12MEM0;

}

多通道单次采样

P6SEL |= 0xff;                        // 使能A/D 通道A0

   ADC12CTL0 = ADC12ON+SHT0_2; // 打开 ADC12, 设置采样时钟

   ADC12CTL1 = SHP+CONSEQ_1;                      // 使用采样时钟

   //ADC12MCTL0 = SREF_2;            // Vr+ = VeREF+ (外部)

   ADC12MCTL4|=INCH_5;

   ADC12MCTL6|=EOS+INCH_4;

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

While(1)

{

   ADC12CTL0 |= ADC12SC;               // 开始转换

   while ((ADC12IFG & ADC12BUSY)==0);

   value=ADC12MEM0;

  // value=ADC12MEM1;

}

多通道多次转换

P6SEL |= 0xff;                        // 使能A/D 通道A0

   ADC12CTL0 = ADC12ON+SHT0_2; // 打开 ADC12, 设置采样时钟

   ADC12CTL1 = SHP+CONSEQ_3;                      // 使用采样时钟

   //ADC12MCTL0 = SREF_2;            // Vr+ = VeREF+ (外部)

   ADC12MCTL4|=INCH_5;

   ADC12MCTL6|=EOS+INCH_4;

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

   ADC12CTL0 |= ADC12SC;               // 开始转换

while(1)

 

   while ((ADC12IFG & ADC12BUSY)==0);

         value=ADC12MEM0;

    Delay_nop(1000);

  }

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值