This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2650:SimpleLink MCU

Guru**** 2394305 points
Other Parts Discussed in Thread: CC2650, MSP430FR5969, LM35, SYSBIOS, CC2640R2F, CC2640

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/863729/cc2650-simplelink-mcu

器件型号:CC2650
主题中讨论的其他器件: MSP430FR5969SYSBIOSLM35CC2640R2FCC2640

您好、先生、

我先前所作的以下帖子没有回复。 (我认为向 APT 专家提出正确的问题将指导我)。 我将在 SimpleLik MCU 中发帖

我使用 CC2650 launchxl 连接温度传感器(DS600)。

我使用了 TI 驱动程序示例(adcbufContinuous_CC2650_LAUNCHXL_TI_CC2650F128)从模拟引脚-Board_DIO23_ANALOG 获取传感器值。

在 ADCCC26XX 硬件属性中、 Board_DIO23_ANALOG 配置为索引0。 以下是我的配置:

ADCCC26XX_HWAttrs 结构{

.adcDIO             = Board_DIO23_ANALOG、
.adcCompBInput      = ADC_COMPB_IN_AUXIO7、
.refSource           = ADCCC26XX_fixed_reference、
.samplingDuration    = ADCCC26XX_SAMPLING_DURAY_682_US、
.inputScalingEnabled = true、
.triggerSource        = ADCCC26XX_TRIGGER_MANUAL

我无法获得正确的 ADC 值。 那么、只有我才能更改温度值。 配置正确。

我搜索了任何线程、了解了传感器控制器的理念。 供参考: RTOS/CC2650:ADC 花费50ms 获取有效结果

但是、我没有检查这些、因为我没有尝试传感器控制器示例。 因此、它很难处理。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否在上尝试 ADC 示例

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢主席先生。 是的、我使用了相同的代码来连接温度传感器。

    我能够从通道中获取数据。 但是、我得到的值不正确。 我已经使用另一个控制器尝试过相同的 IC。 它按预期工作正常。 读数。 我还通过不断收集该测试中的原始数据进行验证。 但无法从 CC2650获取。 我的配置是否正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我对您的描述感到困惑。 您能详细说明吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、抱歉。  

    我在温度下使用了另一个 MCU (MSP430FR5969)。 传感器接口->我从特定通道获取正确的数字值。

    但是、当我使用 CC2650时、我无法获得正确的值。 那么、我的配置是否正常?

    我在 CC2650_ADC 示例中进行连接。

    在将 ADC 与传感器连接时、需要完成哪些设计限制。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的温度传感器是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    温度 传感器- DS600。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据 DS600数据表、CC2650 ADC 应该能够顺利读取 DS600电压。 您能否指定从 DS600读取 ADC 时的问题是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将在中间段中指定这一点。 能不能指导我这么做。 因为重要查询应发布在主题中。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我无法理解您的描述。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、先生、请在下面找到我的代码以及从 DS600获取的原始数据。

    *==== adcsinglechane.c ===
    *
    /* XDCtools 头文件*/

    #include
    #include

    /* BIOS 头文件*/
    #include
    #include

    /*驱动程序头文件*/
    #include
    #IF 定义(CC2650DK_7ID)||定义(CC1310DK_7xD)
    #include
    #endif

    /*示例/板头文件*/
    #include "Board.h"

    #define ADC_CONV_MIN_VAL 1200
    #define ADC_CONV_MAX_VAL 4095
    #define COLOW_TEMP_MIN 2500
    #define COLOW_TEMP_MAX 3500
    #define ADC_celcius_CONV_const 509

    /* ADC 采样数*/
    #define ADC_SAMPLE_COUNT (10)

    /*特定于任务的定义*/
    #define TASKSTACKSIZE (768)

    Task_Structtask0Struct;
    char task0stack[TASKSTACKSIZE];

    /*引脚驱动器手柄*/
    静态 PIN_Handle 按钮 PinHandle;
    /* PIN_Config 表的全局存储器*/
    静态 PIN_STATE 按钮 PinState;

    //温度传感器相关变量声明
    /* ADC 转换结果变量*/
    uint16_t adcValue1[50]={0};
    const float ADC_conv_volT_const = 0.293040;
    const float ADC_cel_conv_const = 6.45;
    无符号长整型电压= 0;
    float cel = 0;
    int g_Celsius [50]={0};
    /*
    *应用按钮引脚配置表:
    *-按钮中断配置为在下降沿触发。
    *
    PIN_Config buttonPinTable[]={Board_DIO21 | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、PIN_TERMINATE};


    /*
    *==== taskFxn1 ===
    *打开一个 ADC 句柄,然后获取一组采样结果
    *调用多个转换。
    *
    void taskFxn0 (void)

    /* ADC 引脚的电路板初始化*/
    Board_initadc();
    ADC_Handle ADC;
    ADC_Params 参数;
    int_fast16_t res;
    char currVal = 0;
    字符 I = 0;
    //清除缓冲区
    对于(i = 0;i<50;i++)

    G_Celsius [i]= 0;
    adcValue1[i]= 0;


    PIN_setOutputValue (buttonPinHandle、Board_DIO21、currVal);//温度传感器处于活动状态
    ADC_PARAMS_INIT (params);
    ADC = ADC_open (Board_ADC0、params);
    //ADC = ADC_open (CC2650_LAUNCHXL_ADC0、params);

    如果(ADC ==空)

    System_abort ("初始化 ADC 通道1\n"\n 时出错);

    其他

    system_printf ("ADC 通道1已初始化\n"\});

    对于(i = 0;i<50;i++)

    RES = ADC_convert (ADC、&adcValue1[i]);
    VOLT = adcValue1[i]* ADC_CONV_MIN_VAL/ADC_CONV_MAX_VAL;
    CEL =((VOLT - ADC_celcius_CONV_CONST)/ADC_CEL_CONV_CONST);
    CEL +=2;// 2使用 LM35测量的校准因子
    CEL *= 100;//将整数转换为整数时、乘以100以保持2个小数点
    G_Celsius [i]=(int) cel;//向下转换为整数以通过 BLE 发送

    ADC_Close (ADC);

    /*
    *==== main ====
    *
    int main (空)

    Task_Params taskParams;

    /*呼叫板初始化函数*/
    Board_initGeneral();

    buttonPinHandle = PIN_OPEN (buttonPinState、buttonPinTable);
    if (!buttonPinHandle){
    System_abort ("初始化按钮引脚时出错\n");

    /*创建任务*/
    Task_Params_init (&taskParams);
    taskParams.STACKSIZE = TASKSTACKSIZE;
    taskParams.stack =_task0Stack;
    Task_construct(&task0Struct,(Task_FuncPtr) taskFxn0、&taskParams、NULL);

    /* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
    system_flush();

    BIOS_start();

    返回(0);

    原始数据:  

    adcValue1无符号短整型[20]  
    [0]无符号短整型0  
    [1]无符号短整型487  
    [2] unsigned short 422  
    [3]无符号短整型600  
    [4]无符号短整型64  
    [5]无符号短整型0  
    [6]无符号短整型0  
    [7]无符号短整型579
    [8]无符号短整型599
    [9]无符号短整型417
    [10] unsigned short 0  
    [11]无符号短整型0  
    [12]无符号短整型119  
    [13]无符号短整型7.  
    [14]无符号短整型0  
    [15]无符号短整型0  
    [16]无符号短整型105.
    [17]无符号短整型245
    [18]无符号短整型429
    [19]无符号短整型578
    [20]无符号短整型576

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果使用电压源代替温度传感器、您是否会获得预期结果?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将得到以下值:

    adcValue1无符号短整型[20]
    [0]无符号 short 3126  
    [1]无符号短整型3123  
    [2]无符号短整型3125  
    [3]无符号短整型314.  
    [4]无符号短整型3125  
    [5]无符号短整型3125  
    [6]无符号短整型3126  
    [7]无符号短整型3125  
    [8]无符号短整型314.  
    [9]无符号短整型3126  
    [10] unsigned short 3126
    [11]无符号短整型3125
    [12]无符号短整型3125
    [13]无符号短整型314.
    [14]无符号短整型3123
    [15]无符号短整型3125
    [16]无符号短整型3127
    [17]无符号短整型3125
    [18]无符号短整型3123
    [19]无符号短整型3125
    [20]无符号短整型3125

    我想知道为什么与温度传感器的接口具有错误的输出。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、输入是什么? (来源和价值)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我使用 Launchpad 电源电压为模拟引脚供电时、它为3.3V。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请确认您已运行  

    /*调整原始 ADC 值并将其转换为微伏*/
    ADCBuf_RawadjustValues (handle、completedADCBuffer、ADCBUFFERSIZE、
    完整通道);
    ADCBuf_convertAdjustedToMicroVolts (手柄、完整通道、
    完整的 ADCBuffer、microVoltBuffer、ADCBUFFERSIZE);

    完成了什么?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我看不到您在代码中打印数组值。 请在测试中发布您的确切代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    主席先生、我将使用以下示例文件:-> adcsinglechanele_CC2650_LAUNCHXL_TI_CC2650F128。 我还通过将电源电压(CC2650_LAUNCHXL_ADCVDDS)用作通道和接地电源(CC2650_LAUNCHXL_ADCVSS)来执行该代码

    我没有使用过上述代码。 它位于:->adcbufContinuous_CC2650_LAUNCHXL_TI_CC2650F128 示例文件下。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已检查表达式中的数组以获取这些结果。 @

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您在第一篇使用 adcbufcontinuous 的文章中写道、现在您写的是使用 adcsinglechaneloTM  

    如 YK 所写,请发布您正在使用的代码。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、你是对的。 我已经发布了对错误示例的引用。 但我使用的是 adcsinglechChannel 示例代码、并更改了我之前提到的代码。 很抱歉在上一个帖子中未提及错误示例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否发布您正在测试的确切代码?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我之前提到过的代码。

    *==== adcsinglechane.c ===
    *
    /* XDCtools 头文件*/

    #include
    #include

    /* BIOS 头文件*/
    #include <ti/sysbios/BIOS.h>
    #include <ti/sysbios/knl/Task.h>

    /*驱动程序头文件*/
    #include
    #IF 定义(CC2650DK_7ID)||定义(CC1310DK_7xD)
    #include
    #endif

    /*示例/板头文件*/
    #include "Board.h"

    #define ADC_CONV_MIN_VAL 1200
    #define ADC_CONV_MAX_VAL 4095
    #define COLOW_TEMP_MIN 2500
    #define COLOW_TEMP_MAX 3500
    #define ADC_celcius_CONV_const 509

    /* ADC 采样数*/
    #define ADC_SAMPLE_COUNT (10)

    /*特定于任务的定义*/
    #define TASKSTACKSIZE (768)

    Task_Structtask0Struct;
    char task0stack[TASKSTACKSIZE];

    /*引脚驱动器手柄*/
    静态 PIN_Handle 按钮 PinHandle;
    /* PIN_Config 表的全局存储器*/
    静态 PIN_STATE 按钮 PinState;

    //温度传感器相关变量声明
    /* ADC 转换结果变量*/
    uint16_t adcValue1[50]={0};
    const float ADC_conv_volT_const = 0.293040;
    const float ADC_cel_conv_const = 6.45;
    无符号长整型电压= 0;
    float cel = 0;
    int g_Celsius [50]={0};
    /*
    *应用按钮引脚配置表:
    *-按钮中断配置为在下降沿触发。
    *
    PIN_Config buttonPinTable[]={Board_DIO21 | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、PIN_TERMINATE};


    /*
    *==== taskFxn1 ===
    *打开一个 ADC 句柄,然后获取一组采样结果
    *调用多个转换。
    *
    void taskFxn0 (void)

    /* ADC 引脚的电路板初始化*/
    Board_initadc();
    ADC_Handle ADC;
    ADC_Params 参数;
    int_fast16_t res;
    char currVal = 0;
    字符 I = 0;
    //清除缓冲区
    对于(i = 0;i<50;i++)

    G_Celsius [i]= 0;
    adcValue1[i]= 0;


    PIN_setOutputValue (buttonPinHandle、Board_DIO21、currVal);//温度传感器处于活动状态
    ADC_PARAMS_INIT (params);
    ADC = ADC_open (Board_ADC0、params);
    //ADC = ADC_open (CC2650_LAUNCHXL_ADC0、params);

    如果(ADC ==空)

    System_abort ("初始化 ADC 通道1\n"\n 时出错);

    其他

    system_printf ("ADC 通道1已初始化\n"\});

    对于(i = 0;i<50;i++)

    RES = ADC_convert (ADC、&adcValue1[i]);
    VOLT = adcValue1[i]* ADC_CONV_MIN_VAL/ADC_CONV_MAX_VAL;
    CEL =((VOLT - ADC_celcius_CONV_CONST)/ADC_CEL_CONV_CONST);
    CEL +=2;// 2使用 LM35 测量的校准因子
    CEL *= 100;//将整数转换为整数时、乘以100以保持2个小数点
    G_Celsius [i]=(int) cel;//向下转换为整数以通过 BLE 发送

    ADC_Close (ADC);

    /*
    *==== main ====
    *
    int main (空)

    Task_Params taskParams;

    /*呼叫板初始化函数*/
    Board_initGeneral();

    buttonPinHandle = PIN_OPEN (buttonPinState、buttonPinTable);
    if (!buttonPinHandle){
    System_abort ("初始化按钮引脚时出错\n");

    /*创建任务*/
    Task_Params_init (&taskParams);
    taskParams.STACKSIZE = TASKSTACKSIZE;
    taskParams.stack =_task0Stack;
    Task_construct(&task0Struct,(Task_FuncPtr) taskFxn0、&taskParams、NULL);

    /* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
    system_flush();

    BIOS_start();

    返回(0);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试在 ADC_convert 之后添加函数此示例的最新版本具有以下功能:  

    您使用的示例似乎不会补偿 ADC 中的偏移/增益误差。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    顺便说一下、如果您改用 CC2640R2F、您将获得更具最新的软件产品。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    主席先生,请参阅以下链接: https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/p/404426/1433112#pi320995=1

    此链接使用适用于 CC2640 MCU 的 driverlib。 CC2650中是否有 driverlib 支持?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CC2640和 CC2650的 ADC 是相同的、因此您可以使用相同的代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我将尝试此代码、并将很快更新您。