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**** 1558025 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.

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

    我将在明天进行测试并更新您的信息!

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

    我在 HalLedBlink 的参数3上有一些拼写错误、并修复了我的答复。 您应该使用 HalLedBlink (HAL_LED_1、10、50、3500)来实现这一目的。 我在我的 CC2541DK-MINI-keyfob 上对此进行测试、我确信它能够正常工作。

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

    早上好  

    我测试了该 值(HAL_LED_1、10、50、3500)、但结果与之前相同。

    此致、

    Yatin Baluja

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

    尝试删除 halSleep 函数中的"HalLedEnterSleep ();"和"HalLedExitSleep ();"以再次进行测试。

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

    在 hal_sleep.c 中???

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

    是的

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

    不工作

    但我发现了一些东西

    #define HAL_LED_BLINK DELAY ()  st ({ volatile UINT32 I;for (i=0;i<0x5800;i++){};})

    LED=1;

    HAL_LED_BLINK 延迟()   

    LED=0;

    这是一种工作方式、但速度很快、就像不到一秒、但开/关是好的。  

    对此有什么建议?

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

    我认为不建议在您的案例中使用 HAL_LED_BLINK 延迟。 您能否在项目中禁用 POWER_SAVE_SAVY 并再次测试 HalLedBlink (HAL_LED_1、10、50、3500)?

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

    好的,但是我可以在哪里找到省电,我指的是哪个文件?

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

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

    e2e.ti.com/.../20201014_2D00_114240_5F00_AvcHCj83.mp4

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

    这就是在我执行完所有操作(包括删除节电)后、它闪烁的方式

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

    您是否调用 HalLedBlink (HAL_LED_1、10、50、3500)来使 LED 闪烁?

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

    是的

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

    否则、如果((ADC_Value >= CH_BAT_H)&&(ADC_Value < CH_BAT_F))

    HalLedBlink (LED、10、50、3500);

    这是我要提供的命令

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

    您是否在 HalLedBlink 上设置一个断点以确保您的应用程序调用运行它?

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

    让我来更新一下您!

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

    您还可以确保应用程序代码中没有其他位置来控制同一 LED。

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

    e2e.ti.com/.../20201014_2D00_122648_5F00_L7p5NaZW.mp4

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

    我将在另外两个位置调用该 LED。 当我长按按钮时、此 LED 将亮起、这意味着器件已打开、然后长按按钮将关闭 LED、这意味着器件已关闭。

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

    您的代码似乎会一直调用 HalLedBlink (LED、10、50、3500)。 只能调用一次。

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

    但它将与电池值配合使用、如果电池值为高、中或低、则 LED 将闪烁。 我将调用 HalLedBlink 三次

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

    如果您尝试仅调用 HalLedBlink (LED、10、50、3500);在 init 函数中、不在其他任何地方调用它、它是否可以按预期闪烁?

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

    让我检查一下!

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

    如果(IN_5V=1)//连接充电器

    IF (ADC_Value >= CH_BAT_F)  
    {  
    LED=1;

    否则、IF (((ADC_Value >= CH_BAT_H)&&(ADC_Value > CH_BAT_L))  

    HalLedBlink (LED、10、50、3500);


    否则、如果(ADC_Value <= CH_BAT_L)  

    电源= 0;
    EN=0;
    LED_OFF ();
    }  

    问题在 Else if 语句中。 如果我不知道原因、它将始终是最后一个。

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

    您是否曾尝试在 INIT 函数中调用 HalLedBlink (LED、10、50、3500)、而不在其他任何地方调用它来查看它是否首先起作用?

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

    是的、我检查了、这可以正常工作。 如果我在 init 函数中调用 HalLedBlink 并从其他任何位置进行注释  

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

    但我不会闪烁10次、我希望它根据电池电量 HalLedBlink (LED、10、50、3500)闪烁;在该命令中、"10"是闪烁次数、但我不想修正闪烁次数

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

    因此、HalLedBlink (LED、10、50、3500)基本上可以正常工作。 您应该避免应用程序不断调用 HalLedBlink 来引起问题。

    您可以根据应用程序更改闪烁次数。 无需为10。 它只是一个演示代码。

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

    那么,如果调用 HalLedBlink (LED,10,50,3500),我将如何使 LED 闪烁?

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

    我知道我可以直接调用 LED=~LED、以使 LED 闪烁、但我需要1750ms 的延迟

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

    您可以使用 HalLedBlink (LED、1、50、3500)使 LED 闪烁一次。

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

    我们能否更改 CC2541的时钟速度。 如果是,如何? CC2541的默认时钟速度是多少?  

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

    不能,您不能分别更改 CC2541时钟以及 CPU 运行的32M 和32K 时钟以及休眠模式。

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

    好的。 谢谢!

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

    如何创建振荡器事件以使 LED 闪烁?

    假设 P1_2作为 LED 引脚、我想使用计时器事件以1750ms 的延迟使其闪烁   

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

    您可以参阅  来创建周期性事件来切换 LED。

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

    if (事件和 SBP_250ms_EVT)

    LED=~LED;
    OSAL_START_timerEx (simpleBLETaskId、SBP_250ms_EVT、1750);
    返回(事件^ SBP_250ms_EVT);

    这将起作用??

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

    您对 SBP_250ms_EVT 的定义是什么?您在哪里调用 osal_start_timerEx 来首次启动 SBP_250ms_EVT?

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

    #define SBP_250ms_EVT                    0x0800

    我将把它称为 adc.c 文件中的另一个文件

    如果(IN_5V=1)//连接充电器


    IF (ADC_Value >= CH_BAT_F)

    LED=1;
    ADC_FLAG = 1;

    否则、如果(ADC_Value <= CH_BAT_H)


    OSAL_START_timerEx (simpleBLETaskId、SBP_250ms_EVT、1750);

    ADC_FLAG = 0;

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

    但这不起作用、因为当我连接 USB 时 LED 熄灭  

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

    检查您的“else if (adc_value <= ch_BAT_H) ”案例是否保持触发状态。

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

    由于  电池值仅在该范围内、因此会触发它、但只要我连接 USB、LED 就会关闭 、并且我共享 的代码是 if (adc_value <= ch_BAT_H)、这个位于 adc.c 文件中、而事件位于 simpleBLEPeripheral.c 文件中  

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

    我假设您可以分步跟踪和调试自己的代码、以了解问题所在。

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

    YiKai 您是否有适用于 PCF8574和 CC2541的任何参考代码。 由于在 PCF8574的帮助下、很少有 LED 连接到 CC2541。 我从未使用过 PCF8574。

    此致、

    Yatin  

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

    不、我没有 PCF8574的参考代码。 但根据其数据表、使用 I2C 驱动 PCF8574似乎是非常直接的。

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

    如何操作? 你能指导我吗?

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

    我知道如何使用 ESP32、但不知道如何使用 CC2541

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

    如果您要求 I2C 示例、可以参考 sensortag 示例。

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

    但这不使用 PCF8574 IC。 如果我可以分享原理图、您能为我提供 PCF8574的帮助吗