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.

[参考译文] CC2640R2F:如何将传感器控制器 ADC_LEVEL_TRIGGER 示例与 simple_peripheral 合并? (分步指南)

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1133663/cc2640r2f-how-to-merge-a-sensor-controller-adc_level_trigger-example-with-simple_peripheral-step-by-step-guide

器件型号:CC2640R2F

如何将传感器控制器 ADC_LEVEL_TRIGGER 示例与 simple_peripheral 合并?

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

    您好、Sai、

    请问您是否已尝试使用所需的传感器控制器示例遵循链接线程中提供的指导?

    您能否指定您要阻止的步骤? 确保包括问题说明、如果相关、请提供有关错误的详细信息。

    最后但同样重要的是、请确保指定您正在使用的 SDK 版本和使用的堆栈(BLEStack 或 BLE5STACK)。

    此致、

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

    感谢您的回复。

    SDK 版本:5.30.00.03

    ble5stack

    是的、我使用传感器控制器示例尝试了链接线程中提供的指导、并成功获得闪烁 LED 示例的输出。 我需要定期读取 ADC。

    因此、我为 https://dev.ti.com/tirex/explore/node?node=ADLsixZlQbUmRcaDRv27gQ__krol.2c__LATEST 中给出的 ADC 级触发器示例生成了 SC 代码

    我创建了新的服务和字符来读取16位 ADC 值。

    SC 集成到 CCS 代码中,成功构建并上载,没有错误。 阈值的 LED 操作正常、但无法读取正确的 ADC 值。

    我附加了 simpleperipheral.c 的以下代码

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /******************************************************************************
    @file simple_peripheral.c
    @brief This file contains the Simple Peripheral sample application for use
    with the CC2650 Bluetooth Low Energy Protocol Stack.
    Group: WCS, BTS
    Target Device: cc2640r2
    ******************************************************************************
    Copyright (c) 2013-2021, Texas Instruments Incorporated
    All rights reserved.
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好、Sai、

    感谢您提供的详细信息。 您看起来是在正确的方向上。

    当您说"我无法读取正确的 ADC 值"时、这是否意味着该值卡在0 (或任何其他值)、或者该值不准确?  如果在 processTaskAlert()函数中停止执行,是否在 MyData 中有预期值?

    如果前面的内容 没有帮助、我建议您首先将传感器控制器代码与不太复杂的项目(例如空项目)集成、这样您就可以验证 ADC 读取工作是否符合预期。

    此致、

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

    请参阅下面的博文。 博客中使用的 SDK 很旧、因此需要进行调整。

    https://markelthinkslearnscreates.wordpress.com/2022/08/23/sensor-controller/

    -kel

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

    谢谢、我尝试了空项目...我能够读取预期值... 但无法在 BLE 项目中读取。

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

    感谢您分享@Markel。 我跟在你的教学中。 我成功构建并运行了代码。 但我无法在 ble app 中读取 ADC 值、它显示为零。  

    以下是我的代码:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /******************************************************************************
    @file simple_peripheral.c
    @brief This file contains the Simple Peripheral sample application for use
    with the CC2650 Bluetooth Low Energy Protocol Stack.
    Group: WCS, BTS
    Target Device: cc2640r2
    ******************************************************************************
    Copyright (c) 2013-2021, Texas Instruments Incorporated
    All rights reserved.
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:
    * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好、Sai、

    您似乎已将传感器控制器项目正确集成到 CCS 项目中。 下面是一些问题。 您能否将非 BLE5简单外设示例程序作为基础进行尝试。 也不建议使用使用 CC2640R2F 的 BLE5堆栈。

    1. 您是否使用传感器控制器项目和任务测试读取了模拟传感器?
    2. 您正在使用什么模拟输入?
    3. 您是否在传感器控制器项目任务中选择了基于 RTC 的执行调度?

    博客文章中的程序是 simple_poter。 安装 SDKv3.30、并将应用程序和堆栈项目导入 CCSv9.20、同时使用复制到工作区选项。 它可以正常工作、我只是对它进行了测试。 简单电位器不使用基于 RTC 的执行调度。 它使用应用周期计时器通过传感器控制器读取电位计。

    另一件事是、许多 TI BLE 项目或产品开发使用简单外设并进行修改。 我要做的是在将简单外设示例导入到 CCS 工程之前、将其正确重命名为简单电位器。 然后、我准备低功耗示例程序。 这似乎需要大量工作、但这是必要的。 我已经为此发布了一篇博文。

    https://markelthinkslearnscreates.wordpress.com/2022/08/21/creating-your-first-custom-bluetooth-application/

    -kel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 您是否使用传感器控制器项目和任务测试读取了模拟传感器? 是的。
    2. 您正在使用什么模拟输入? 来自函数发生器的模拟信号。
    3. 您是否在传感器控制器项目任务中选择了基于 RTC 的执行调度? 是的。 我正在使用模拟电平触发示例传感器控制器程序。 SDK 版本:5.30.00.03,CCS v11.I 调用此函数                                                    “MyData_SetParameter (MyData_data_ID、MyData_data_LEN 和 adcData)”;//在  SensorController_taskalertCallback 函数中添加了“。现在,我能够通过 ble 读取预期值。 在这里调用该函数的方法是否正确?我认为我需要更新 char 值,所以我在这里调用了。
      Fullscreen
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      /*********************************************************************
      * @fn SensorController_taskalertCallback
      *
      * @brief
      */
      void SensorController_taskalertCallback(void){
      adcData = 0;
      uint32_t bvAlertEvents = 0;
      // Clear the ALERT interrupt source
      scifClearAlertIntSource();
      bvAlertEvents = scifGetAlertEvents();
      if(bvAlertEvents & BV(SCIF_ADC_LEVEL_TRIGGER_TASK_ID))
      {
      // ... Access Sensor Controller task data structures here ...
      // adcData = scifTaskData.adcLevelTrigger.output;
      adcData = scifTaskData.adcLevelTrigger.output.adcValue;
      MyData_SetParameter(MYDATA_DATA_ID, MYDATA_DATA_LEN,&adcData); //ADDED
      }
      // Acknowledge the ALERT event
      scifAckAlertEvents();
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用传感器控制器集成有什么优点? 禁用 ADC 后、它是否会进入待机模式?

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

    您好、Sai、

    我再次查看了您的原始代码。 您所做的错误是处理 Event_post (syncEvent、SP_SCTASK_EVT);。 发布事件时,应 在 SimplePeripheral_taskFxn()中处理该事件,如下所示。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void SensorController_taskalertCallback(void){
    uint32_t bvAlertEvents = 0;
    // Clear the ALERT interrupt source
    scifClearAlertIntSource();
    bvAlertEvents = scifGetAlertEvents();
    if(bvAlertEvents & BV(SCIF_ADC_LEVEL_TRIGGER_TASK_ID))
    {
    // ... Access Sensor Controller task data structures here ...
    // adcData = scifTaskData.adcLevelTrigger.output;
    adcData = scifTaskData.adcLevelTrigger.output.adcValue;
    }
    // Acknowledge the ALERT event
    scifAckAlertEvents();
    Event_post(syncEvent,SP_SCTASK_EVT);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static void SimplePeripheral_taskFxn(UArg a0, UArg a1)
    {
    // Initialize application
    SimplePeripheral_init();
    // Application main loop
    for (;;)
    {
    uint32_t events;
    // Waits for an event to be posted associated with the calling thread.
    // Note that an event associated with a thread is posted when a
    // message is queued to the message receive queue of the thread
    events = Event_pend(syncEvent, Event_Id_NONE, SP_ALL_EVENTS,
    ICALL_TIMEOUT_FOREVER);
    if (events)
    {
    ICall_EntityID dest;
    ICall_ServiceEnum src;
    ICall_HciExtEvt *pMsg = NULL;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="505260" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1133663/cc2640r2f-how-to-merge-a-sensor-controller-adc_level_trigger-example-with-simple_peripheral-step-by-step-guide/4213952 #4213952]使用传感器控制器集成有什么优点? 禁用 ADC 后、它是否会进入待机模式?[/quot]

    传感器控制器可以与主应用并行运行。 使用传感器控制器非常有利、尤其是当您对模拟传感器进行多次采样并在将数据发送到主应用之前对其进行处理时。

    当没有事件时、主应用程序将进入待机模式。 一个事件示例是蓝牙广播、应用事件。

    -kel  

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

    我在 SimplePeripheral_taskFxn ()中添加了"MyData_SetParameter (MyData_data_ID、MyData_data_LEN、&adcData);//added "、但我无法在 BLE 应用中读取数据、只有零才会出现、这是因为我们将 char 值初始化为零。它不会更新。

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

    adcData 需要是最上层的、并且对所有 c 函数都可见。

    静态 uint16_t adcData = 0;//已添加

    SimplePeripheral_taskFxn()中的代码需要与此类似   

    IF (事件和 SP_SCTASK_EVT)

    MyData_SetParameter (MyData_data_ID、MyData_data_LEN、&adcData);//添加  

    您可以在 MyData_SetParameter 和 watch 变量 adcData 中添加断点。

    -kel

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

    是的、我将 adcData 初始化为全局变量。

    我发现我们需要插入此代码,

    "IF (事件和 SP_SCTASK_EVT)

    MyData_SetParameter (MyData_data_ID、MyData_data_LEN、&adcData);//添加  
    }"

    在该 IF 条件之后

    "IF (事件和 SP_queue_EVT)

    }"

    您似乎错过了"IF (EVENT & SP_SCTASK_EVT)"之前的一个"}"

    非常感谢 Markel 的帮助。

    现在我能够读取 BLE 数据。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /*********************************************************************
    * @fn SimplePeripheral_taskFxn
    *
    * @brief Application task entry point for the Simple Peripheral.
    *
    * @param a0, a1 - not used.
    */
    static void SimplePeripheral_taskFxn(UArg a0, UArg a1)
    {
    // Initialize application
    SimplePeripheral_init();
    // Application main loop
    for (;;)
    {
    uint32_t events;
    // Waits for an event to be posted associated with the calling thread.
    // Note that an event associated with a thread is posted when a
    // message is queued to the message receive queue of the thread
    events = Event_pend(syncEvent, Event_Id_NONE, SP_ALL_EVENTS,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好!

    我想降低 cc2640r2的功耗、因此我计划使用传感器控制器收集 ADC 数据20分钟、并在20分钟后通过 BLE 发送数据。我尝试了、但我正面临 issues..ca、您将指导我如何正确执行此操作。

    谢谢。

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

    您好、Sai、

    我建议您创建有关此新问题的新帖子。

    -kel

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

    好的、谢谢

x 出现错误。请重试或与管理员联系。