• 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;

    }

  • 相关阅读:
    UITableView多选全选
    iOS16进制设置颜色
    svg矢量图
    canvas 时钟案例
    canvas 方块旋转案例
    canvas万花筒案例
    swiper(轮播)组件
    canvas介绍(画布)
    scroll-view组件
    view组件
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194249.html
Copyright © 2020-2023  润新知