ble学习笔记六------------温度传感器温度采集

---------------------温度传感器温度采集

 在用户手册的第十二章有详细说明

ADC 结构图如下:

Adc inputs

the registers TR0.ADCTM and

ATEST.ATESTCTRL must be set as described in the register descriptions in Section 12.2.10 and

Section 23.15.3 (CC253x) or Section 24.1 (CC2540), or Section 25.12 (CC2541).

打开温度传感器

 TR0 = 0x01;

 ATEST = 0x01;

采用手动触发的方式进行ad采样

Adc有三个控制寄存器ADCCON1  ADCCON2  ADCCON3

寄存器的设置如下:00110011

最低两位始络为11

ADCCON1.EOC0

ADCCON1.ST0

ADCCON1.STSEL 11

ADCCON2的设置和ADCCON3的配置是一样的0011 1110

ADC参考电压使用内部电压采用12位精度采集,值为0x3e

示例代码如下:

复制lcd工程,添加如下代码:

ADC.h文件如下:

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

                  版权所有 (C), 2014-2020 

 ******************************************************************************

  文 件 名   : ADC.h

  版 本 号   : V1.0

  作    者   :  retacn

  生成日期   : 2014920

  功能描述   : ADC.c 的头文件

  函数列表   :

  修改历史   :

  1.日    期   : 2014920

    作    者   :  retacn

    修改内容   创建文件

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

#ifndef __ADC_H__

#define __ADC_H__

/*----------------------------------------------*

 * 包含头文件                                   *

 *----------------------------------------------*/

#include "common.h"

#ifdef __cplusplus

#if __cplusplus

extern "C"{

#endif

#endif /* __cplusplus */

/*读取温度传感器值*/

extern uint16 ADC_Read (uint8 channel);

#ifdef __cplusplus

#if __cplusplus

}

#endif

#endif /* __cplusplus */

#endif /* __ADC_H__ */

ADC.c文件

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

                  版权所有 (C), 2014-2020 

 ******************************************************************************

  文 件 名   : ADC.c

  版 本 号   : V1.0

  作    者   :  retacn

  生成日期   : 2014920

  功能描述   : ADC采样

  函数列表   :

              ADC_Read

  修改历史   :

  1.日    期   : 2014920

    作    者   :  retacn

    修改内容   创建文件

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

/*----------------------------------------------*

 * 包含头文件                                   *

 *----------------------------------------------*/

#include <ioCC2540.h>

#include "common.h"

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

 函 数 名  : ADC_Read

 功能描述  读取指定通道的电压值

 输入参数  : uint8 channel  通道号

 输出参数  

 返 回 值  :

 注意   :

            默认读取12位精度的电压,读取10次取平均值

 修改历史      :

  1.日    期   : 2014920

    作    者   :  tetacn

    修改内容   创建

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

/*channel 14*/

uint16 ADC_Read (uint8 channel)

{

    int16  reading = 0;

    /*0x01左移14,0001 1100*/

    uint8  adcChannel = 0x01<<channel;

    int16  Result = 0;

    if (channel <= 7)   // 通道0-7需要通过P0.0-P0.7输入

    {

      /*adccfg=0xf2,1111 0010*/

      /*     |     0001 1100*/

      /*          1111 1110*/

        ADCCFG |= adcChannel;

    }

    uint8 i=0;

    do{

        /*adccon3=0xb6,1011 0110*/

        /*    14     0001 0100*/

        /*          0001 1110 */

        /* | 20    0010 0000*/      

      /*          0011 1110*/

        ADCCON3 = channel | 0x20;           // 12位精度,启动转换

        while (!(ADCCON1 & 0x80));          // 等待转换完成

        // 读取采样结果

        reading = (int16)(ADCL);

        reading |= (int16)(ADCH << 8);

        reading >>= 4;                      // 丢弃低位

        Result += reading;                  // 累加

    }while(i++ < 10);   // 连续采样10

    if (channel <= 7)

    {

        ADCCFG &= (adcChannel ^ 0xFF);

    }

    return (Result/10);

}

Main.c文件

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

                  版权所有 (C), 2014-2020 

 ******************************************************************************

  文 件 名   : main.c

  版 本 号   : V1.0

  作    者   :  retacn

  生成日期   : 2014920

  功能描述   : ADC温度采集

  函数列表   :

  修改历史   :

  1.日    期   : 2014920

    作    者   :  retacn

    修改内容   创建文件

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

/*----------------------------------------------*

 * 包含头文件                                   *

 *----------------------------------------------*/

#include <stdio.h>

#include <ioCC2540.h>

#include "Lcd12864.h"

#include "adc.h"

/*----------------------------------------------*

 * 宏定义                                       *

 *----------------------------------------------*/

#define        TEMP_ADC_CHANNEL            14

int main(void)

{

    float temp=0;

    char LCDBuf[21] = {0};

    SysStartXOSC();         // 启动外部晶振

    LCD12864_Init();        // LCD初始化

    // 打开温度传感器

    TR0 = 0x01;

    ATEST = 0x01;

    while(1)

    {

        temp = (ADC_Read(TEMP_ADC_CHANNEL) - 1340) /10.0;

        sprintf(LCDBuf, "   temp : %0.1f", temp); //

        LCD12864_DisStr(3, LCDBuf);

        SoftWaitUs(100000);

    }

    return 0;

}

原文地址:https://www.cnblogs.com/retacn-yue/p/6194249.html