5524|8

7230

帖子

192

TA的资源

五彩晶圆(高级)

楼主
 

【课后练习】launchpad课后练习十四之单通道ADC采样显示 [复制链接]

课后练习十四之单通道ADC采样显示

 

1. ADC特性

  最大转换速率大于200kHz

  转换精度为10位。

  采样保持器的采样周期可编程设置。

  利用软件或者 TimerA 设置转换初始化。

  编程选择片上电压参考源(2.5V或者1.5V

  编程选择内部或者外部电压参考源。

  8 个外部输入通道(在MSP430x22xx上有12 个)

  具备对内部温度传感器、供电电压VCC和外部参考源的转换通道。

  转换时钟源可选择。

  多种采样模式:单通道、重复单通道、排序和重复排序

  ADC 的内核和参考源可分别单独关闭

  用于自动控制数据传输的数据传输控制器

 

2. ADC寄存器

本文只讨论单通道的,下面几个寄存器即可。

 

ADC10CTL0设置参考电压、采样保持时间、采样速率、开启ADC、中断使能、中断标志位、开始转换。

ADC10CTL1设置通道选择、时钟源选择。

 

 

3.原理图

 

 

 

4 应用

1.       应用——软件查询式的单通道单次转换,通过数码管显示

进行单通道单次转换需要注意设置通道控制寄存器,设置采样通道和参考电压

下面是软件查询式的单通道单次转换所需要对 ADC10进行的设置

课后练习十四之单通道ADC采样显示.pdf (263.37 KB, 下载次数: 524)

 

 

 

 

[ 本帖最后由 常见泽1 于 2012-6-8 16:13 编辑 ]

最新回复

  详情 回复 发表于 2016-5-30 10:33
 
点赞 关注(1)

回复
举报

7230

帖子

192

TA的资源

五彩晶圆(高级)

沙发
 

例程

  1. /***********************************************
    **** LAUNCH PAD 学习之ADC查询 ***
    **** MCU: MSP430 ***
    **** 作者: 常见泽 ***
    **** ***
    **** ***
    **** 2012.05.26.15:23 ***
    **** 实验现象:数码管显示采样值 ***
    **** ***
    **** P2.0-SRCLK P2.1-SER P2.2-RCLK ***
    **** p1.2 p1.3 p1.4 p1.5为数码管位选 ***
    ***********************************************/

    #include <msp430g2452.h>
    #define uchar unsigned char
    #define uint unsigned int

    unsigned char i;
    long result;
    uchar ge,shi,bai,qian;

    #define SER ( 1 << 1 ) //也是所谓的DS
    #define SRCLK ( 1 << 0 ) //也是所谓的SHCP
    #define RCLK ( 1 << 2 ) //也是所谓的STCP

    void delay_1ms(void)
    {
    unsigned int i;
    for (i=0;i<1000;i++);
    }
    void delay_nms(unsigned int n)
    {
    unsigned int i=0;
    for (i=0;i<n;i++)
    delay_1ms();
    }

    uchar table[]={ 0xC0,0xF9,0xA4,0xB0,
    0x99,0x92,0x82,0xF8,
    0x80,0x90,0x88,0x83,
    0xC6,0xA1,0x86,0x8E };
    void Write595(uchar data)
    {

    P2OUT &= ~RCLK;
    for( i=0;i<8;i++ )
    {
    if(data&0x80)
    {
    P2OUT |= SER;
    }
    else
    {
    P2OUT &= ~SER;
    }
    P2OUT &= ~SRCLK;
    P2OUT |= SRCLK;
    data <<= 1;
    }
    P2OUT |= RCLK;
    }

    void ADC_init(void)
    {
    P1SEL |= 0x01;
    ADC10CTL0 = SREF_1 + REFON + ADC10ON;
    ADC10AE0 |= 0x01; // P1.0 ADC option select
    ADC10CTL1 = INCH_0+ADC10SSEL_2;
    }

    void main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    P1DIR |= (BIT2|BIT3|BIT4|BIT5);
    P2DIR |= 0xff;
    ADC_init();

    ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
    while (ADC10CTL1 & ADC10BUSY); // ADC10BUSY?
    result=ADC10MEM ;
    result = result*1500/1024;
    qian = result/1000;
    bai = result/100%10;
    shi = result/10%10;
    ge = result%10;
    while(1)
    {
    P1OUT &= ~(( 1 << 2 )|(1<<3)|(1<<4)|(1<<5));
    Write595(table[ge]);
    P1OUT |= ( 1 << 2 );
    delay_nms(1);

    P1OUT &= ~(( 1 << 2 )|(1<<3)|(1<<4)|(1<<5));
    Write595(table[shi]);
    P1OUT |= ( 1 << 3 );
    delay_nms(1);

    P1OUT &= ~(( 1 << 2 )|(1<<3)|(1<<4)|(1<<5));
    Write595(table[bai]);
    P1OUT |= ( 1 << 4 );
    delay_nms(1);

    P1OUT &= ~(( 1 << 2 )|(1<<3)|(1<<4)|(1<<5));
    Write595(table[qian]);
    P1OUT |= ( 1 << 5 );
    delay_nms(1);
    }
    }

复制代码

 

 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

沙发 哦

好东西啊,沙发哦

 
 
 

回复

7230

帖子

192

TA的资源

五彩晶圆(高级)

4
 
UP 多谢楼上
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

5
 
请问如何实现多通道转化?如何获取多通道转换各个通道转化得来的数据值?
求大神指教!

点评

多通道的没试过肯定是DTC模式 你不知道怎么取数据把 单通道的DTC给个思路 ********************************#include  \"msp430x20x2.h\" unsigned char *pointer=0x00;unsigned int jieguo; void main  详情 回复 发表于 2012-7-12 14:30
 
 
 

回复

7230

帖子

192

TA的资源

五彩晶圆(高级)

6
 

回复 5楼 hxunan 的帖子

多通道的没试过肯定是DTC模式 你不知道怎么取数据把

单通道的DTC给个思路

  1. ********************************
    #include  "msp430x20x2.h"

  2. unsigned char *pointer=0x00;
    unsigned int jieguo;

  3. void main(void)
    {
      WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
      ADC10CTL1 = INCH_1 + CONSEQ_3;            // A1/A0, repeat multi channel
      ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
      ADC10AE0 = 0x03;                          // P1.0,1 ADC option select
      ADC10DTC1 = 0x20;                         // 16 conversions
      P1DIR |=  BIT6;
      P1OUT &=  (~BIT6);
     
     
      for (;;)
      {
       
     
        ADC10CTL0 &= ~ENC;
        while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active
        ADC10SA = 0x200;                        // Data buffer start
        ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion ready
       
          jieguo  = *(pointer+0x200);
        if(jieguo>1020)P1OUT|=BIT6;
        __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
        _NOP();                                 // space for debugger
        _NOP();                                 // Set Breakpoint here to read ADC
      }
    }

  4. // ADC10 interrupt service routine
    #pragma vector=ADC10_VECTOR
    __interrupt void ADC10_ISR (void)
    {
      __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
    }

  5.  

复制代码

 

至于多通道的 曾经有个网友给我发过部分例程

我发个连接你

https://bbs.eeworld.com.cn/viewthread.php?tid=331407&page=1&extra=page%3D1#pid1340308

你试试看  我没有尝试过

 

[ 本帖最后由 常见泽1 于 2012-7-12 14:35 编辑 ]
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

7
 
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

8
 
能采样显示多大范围的电压呢?新手哈别介意问题太low
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表