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.

[参考译文] 编译器/CC2541:ADC 读取和电池百分比

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/940366/compiler-cc2541-adc-read-and-battery-percentage

器件型号:CC2541
Thread 中讨论的其他器件: BLE-STACK

工具/软件:TI C/C++编译器

您好,  

uint16 adc=0;


P0SEL = 0x00;


P0DIR = 0x00;


P0INP = 0xFF;

APCFG = 0xC0;


ADC = HalAdcRead (HAL_ADC_CHN_VDD3、HAL_ADC_Resolution_12);//P0.7


printf ("adc:%d\n"、adc);

我将获取输出为  

ADC:4.

ADC:3.

ADC:2.

ADC:1.

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

    您是指固件或应用程序中的?

    我需要的是、我要将电池值存储在变量中、并将该变量值通知到特定 UUID。

    此致、

    Yatin Baluja  

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

    我的意思是您可以在固件中执行此操作,因为它是固件端通知应用程序。

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

    尊敬的

    我现在得到的是 ADC 值、但这些值存在波动。 例如、电池为3.5V、我得到的值是

    2670、2876、2900、2600、2630等类似产品。 我的意思是有一点变化是可以接受的、但这种大波动是不正确的、尤其是当我需要在应用中通知 ADC 值时  

    有什么建议吗?

    此致、

    Yatin Baluja  

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

    您是否确定 ADC 引脚上的输入电压稳定? 也许您可以获得10个样本、不包括那些具有较大差异的样本、并将其作为 ADC 读数进行平均值计算。 顺便说一下、您如何解决之前的 ADC 读数问题?

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

    是的、我检查了电压、它是2.83v、相当稳定。 我不使用 TI 提供的 ADC 的内部 API。 我由基准和12位通道创建、并相应地设置 PIN。  

    如何继续:

    获取10个样本、不包括具有较大差异的样本、并进行平均值计算 ADC 读数。  

    我将如何在代码中执行此操作。 任何参考或示例??

    此致、

    Yatin Baluja

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

    没有这方面的现有示例。 您必须自己实施它。

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

    尊敬的

    const int sample_count = 10;
    uint16 adc_value;
    for (int sampleIndex = 0;sampleIndex < sample_count;+sampleIndex)

    ADC_Value += Battery ADC_Check ();

    ADC_Value /= SAMPLE_COUNT;
    printf ("ADC 值:%d'\n",adc_value);

    您对平均值有何看法?

    此外、我还有一个问题。 在我使用应用程序连接 CC2541时 CC2541是否可以在单独的器件上扫描或连接任何其他 BLE 应用、因为它目前无法正常工作。  

    此致、

    Yatin Baluja  

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

    亦为  

    当我通过蓝牙发送一条命令时、CC2541与应用程序甚至 NRFConnect 断开连接。  

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

    您的代码仅对 ADC 样本求平均值、但不会删除差异较大的样本。 如果您只想求平均值、则代码是可以的。 对于断开连接问题、您发送了什么命令来导致此问题?

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

     要在代码中添加什么以删除 具有较大变化的样本??

    我将发送单个命令"3"、uint8命令使 LED 闪烁两次。 闪烁之间的延迟为13000毫秒。 LED 闪烁的最小数量在10到15个 LED 之间。

    此致、

    Yatin  

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

    正如我所回答的那样, 代码中没有用于删除差异较大的样本的样本代码。 您必须自行编写算法。 我不清楚您发送单个命令"3"的含义。 您能详细说明吗?

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

    好的。 断开连接问题实际上是由于延迟造成的。 顺便说一下、我如何在闪烁之间提供2秒的延迟。 我使用的是 DELAY (2000);但我认为它不起作用  

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

    您可以使用 osal_start_timerEx 创建计划事件来执行此操作。

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

    您好 、我有两个不同的 LED 闪烁。 第一个 LED 两次、延迟1.5秒。  

    第二个 LED 以350ms 的延迟闪烁一次。  

    如何继续?

    此致、

    Yatin Baluja

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以尝试使用 API HalLedBlink 来执行 LED 闪烁。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  

    我测试了此命令  HalLedBlink (LED、0、110、1750);但 LED 不闪烁

    此致、

    Yatin Baluja

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

    您可以将第二个参数(即闪烁次数)设置为0。 它如何闪烁?

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

    我是否需要初始化某项以激活 HalLedBlink 或添加某项?

    此致、

    Yatin Baluja

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

    可以在预定义符号中设置 HAL_LED=true。

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

    HalLedBlink (LED、1、110、1750);我编辑了之前的代码、 并且在预定义符号 HAL_LED=true 中也存在、但 LED 不闪烁。 甚至我添加了 hal_led.h 文件  

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

    您可以在 hal_board_cfg.h 中设置不同的 LED

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

    LED 引脚为 P1_6  

    #define LED1_BV BV (6)
    #define LED1_SBIT P1_6
    #define LED1_DDR P1DIR
    #define LED1_POLARITY ACTIVE_HIGH

    对吗?

    此致、

    Yatin Baluja

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

    如果您的 LED 在 P1.6上处于高电平有效状态、则这些设置是正确的。

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

    明白了。 它是 Acive_low

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

    然后、您应该将其设置为低电平有效。

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

    是的。 明白了! 谢谢

    CC2541中是否有 hal_delay_ms 或 hal_delay_us 等任何函数?

    此致、

    Yatin Baluja

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

    您可以在 hal_LCD.c 中使用 HalLCD_HW_WaitU

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

    尊敬的

    我修复了与 CC2541相关的固件中的所有问题。 还有一个与延迟相关的问题、因为我想让 LED 阵列以0f 1.5秒的延迟闪烁、但对于这一点、我在代码中定义了6秒、那么这些 LED 阵列的闪烁速度非常快、实际上我想让该阵列闪烁两次。 如果我增加延迟以更好地使阵列闪烁、然后在闪烁后、蓝牙将断开连接。 它与 CC2541的时钟速度是否相关?  

    对于延迟、我只是使用 DELAY (6000)、因为 OVL_TIMER 事件不起作用。

    此致、

    Yatin

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

    延迟(6000)? 这是什么? 您是否自行实现此功能?

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

    以使 LED 闪烁。 例如  

    LED=1;

    延迟(6000);

    LED=0;

    延迟(6000);

    LED 将每6秒闪烁一次。

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

    延迟函数的内部是什么?

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

    说明

    暂停程序以指定为参数的时间(以毫秒为单位)。 (每秒有1000毫秒。)

    语法

    delay(ms)

    参数

    ms:暂停的毫秒数。 允许的数据类型: unsigned long

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

    我在 BLE-CC254x-1.5.1.1中看不到此类 API。 您从何处获得此信息?

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

    我通常使用 ESP32、NodeMCU 等不同的微控制器、并且我通常使用延迟(毫秒)来执行所需的功能。  

    OSAL_START_TIMEREX (task_id、事件名称、事件周期)

    LED=1;

     OSAL_START_TIMEREX (task_id、事件名称、事件周期);

     OSAL_STOP_timerEX (task_id、事件名称);

    LED = 0;

     OSAL_START_TIMEREX (task_id、事件名称、事件周期);

     OSAL_STOP_timerEX (task_id、事件名称);

    您是否认为这可以使 LED 阵列闪烁?

    此致、

    Yatin Baluja  

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

    不、我认为您的代码不起作用。 我无法理解您背后的逻辑。

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

    我只想让 LED 的阵列闪烁。 我无法使用 HalLedBlink、因为我将 SCL 和 SDA 引脚用于 LED 连接。 如何使阵列闪烁?

    是否有任何方法可以使用 SCL 和 SDA 引脚使阵列闪烁?

    此致、

    Yatin  

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

    您能否指定您使用的 LED 阵列?

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

     uint8 i = 0;

    对于(I = 0;I < 5;I++)

    if (dataarr[i]= 1)

    开关(I)

    情况0:
    FIRST_Part (1、0);
    中断;
    案例1:
    second_Part (1、0);
    中断;
    案例2:
    third_Part (1、0);
    中断;
    案例3:
    第四部分(1、0);
    中断;
    案例4:
    第5部分(1、0);
    中断;
    默认值:
    中断;


    否则、如果(dataarr[i]== 2)

    开关(I)

    情况0:
    FIRST_Part (0、1);
    中断;
    案例1:
    second_Part (0、1);
    中断;
    案例2:
    third_Part (0、1);
    中断;
    案例3:
    第四部分(0、1);
    中断;
    案例4:
    第5部分(0、1);
    中断;
    默认值:
    中断;



    延迟(SBP_BBIK_EVT_PERIOD);
    FIRST_Part (0、0);
    second_Part (0、0);
    third_Part (0、0);
    第四部分(0、0);
    第5部分(0、0);
    延迟(SBP_BBIK_EVT_PERIOD);

    SBP_BBIK_EVT_PERIOD 现在为6000。

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

    我无法理解您的意思...

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

    uint8 dataarr_p[5]

    这是一个阵列、它基本上包含一组 LED  

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

    我想让"uint8 dataarr_p[5]"数组闪烁两次

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

    您的描述和问题不稳定。 我不知道您的"uint8 dataarr_p[5]是什么、您始终不会直接回答我的问题、例如您使用的 LED 硬件。 如果您的问题如此模糊、我无法通过这种方式为您提供帮助...

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

    ,我会自己解决这个问题。 但有一个简单的问题。 我有一个具有 CC2541的器件、USB 连接到该器件、我有一个按钮连接到 CC2541的 P0_3引脚。 只要连接 USB、按钮就不起作用、因为我确实执行了 PO_3 =0;当连接 USB 时、这毫无意义。  

    是否有解决方案?

    此致、

    Yatin  

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

    您可以尝试设置 P0DIR |= BV (3)以使 P0.3作为 GPO 来禁用 GPI。

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

    好的、我会尝试这个。 此外、需要对 LED 闪烁进行澄清的一点是、  

    因为我使用的是 HalLedBlink (LED、1、50、3500);

    LED 指示灯亮起约1.5秒、但闪烁的关闭持续时间非常短。 我是说它应该打开1.5秒、关闭1.5秒。  

    我是否需要这样做:

    LED=1;

    HalLedBlink (LED、1、50、3500);

    LED=0;

    HalLedBlink (LED、1、50、3500);

    或  

    HalLedBlink (LED、1、50、3500);将管理闪烁、无需定义 LED=0;和 LED=1;

    此致、

    Yatin  

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

    HalLedBlink 将管理闪烁、无需定义 LED=0;和 LED=1;

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

    那么、为什么它在正确的持续时间内打开 LED、但在关闭状态下它不能正常工作。 就像关闭后、此功能会非常快速地打开 LED、它应关闭1.5秒、打开1.5秒  

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

    尝试 HalLedBlink (LED、1、50、3000)。

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

    使用此 HalLedBlink (LED、1、1500、3000)。 LED 不闪烁、它稳定亮起  

    使用此 HalLedBlink (LED、1、50、3500)。 LED 闪烁、但并非我所希望的那样亮起1.5秒、而是熄灭不足1秒。  

    我还将分享闪烁的视频。  e2e.ti.com/.../IMG_5F00_6247.mov

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

    如果您使用 HalLedBlink (LED、5、50、2000)、您会看到什么?