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.

[参考译文] LAUNCHXL-CC1310:在传感器控制器代码集成方面需要一些帮助

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/973285/launchxl-cc1310-need-a-little-help-on-sensor-controller-code-integration

器件型号:LAUNCHXL-CC1310
主题中讨论的其他器件:CC1310

设置:

Win 10 PC、Code Composer Studio 版本:10.1.1.00004、Sensor Controller Studio 2.7.0.155、节点和集中器项目、使用 CC1310作为节点、使用 CC1352作为集中器。

成功:

我在3个 CC1310节点和1个集中器上成功运行了 TI 生成的代码、并通过 CCS 和 SCS 对一个 ADC 通道进行采样。 我甚至添加了2个 ADC 通道、并成功测试(任务测试)添加的 ADC 采样代码。  

失败:

现在 、当我再添加2个 ADC 通道时、我在尝试编译从 CCS 中的 SCS 生成的代码时遇到了问题。  

我是第一次深入到 Sensor Controller Studio、 我遇到问题、需要一些帮助来确定 SCS 项目运行正常的原因(我可以看到 ADC 值发生了正确的变化)、但当为 Code Composer Studio 生成相同的代码时、我会在 SceAdc.c 文件中看到错误。 我在 scif_how_to_use.html 中看不到 有关 SceAdc.c 的任何内容、节点 readme.md 文件中也没有 关于 SceAdc 文件的任何内容、因此我不确定从哪里开始。

我不是一名以行业为单位的 C 语言编程器、但我已经完成了许多涉及硬件和软件(大量汇编语言)设计的项目、但这只是我无法触及的一点。

谢谢、

Tim

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

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

    您好、Tim、

    首先、您是否了解过有关此主题的 SimpleLink Academy 实验?

      

    然后、对于您遇到"未定义"错误的 C 代码、请检查您在中定义了这些对象的文件文件、并确保其导入使用位置。

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

    当我们不知道您在 SCS 中实施了哪些更改时、您无法说出为什么会遇到 CCS 问题。

    Siri

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

    感谢 Marie 的帮助。 我确实看了这个例子、但已经有一段时间了。 我要再看一下。 我将查看导入的 C 文件、再次感谢。

    Tim

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

    您好、Marie、

     我不得不说、我在自己的生活中开发了很多产品(使用 ADC 硬件)、但我从未用模数转换器软件开发过如此困难的时间。 有趣的是、我可以让 TI 提供的 SCS 应用程序在 SCS 中工作、但一旦我将它们导入传感器项目、我就会遇到各种问题。 看起来很难读取代码以及包含从 Sensor Controller Studio 生成的代码的注释。

    我的问题是、是否有方法可以修改 TI 提供的传感器代码、或者只需为简单的 ADC 任务添加新代码。 任务包括:

    初始化 ADC 和 ADC 输入端口

    2.触发 ADC

    3.从 ADC FIFO 读取

    我真的不想使用 SCS 代码、除非这是获得这个简单结果的唯一方法。 如果您有我可以使用的示例代码、那将是极好的。

    非常感谢、

    Tim

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

    顺便说一下、我在 SCS、电容开关和几个 ADC 任务上做了几个 Simplelink Academy 课程、都很棒。  但是、现在我要看一下使用 RTOS 的 adcsinglechChannel、它看起来是我可能需要的。 现在、了解如何将其与我的传感器/集中器项目集成。

    因此、我似乎需要 ADC 执行两项操作。  

    1.它已对通道进行采样,请将输出值与容器进行比较(5个容器- 4096/5或???是默认值) 因此,我不仅需要对一个通道进行采样,还需要对两个通道进行采样。 我确实有传感器控制器代码在工作、它只是让我的应用传感器软件读取/报告 ADC 值。

    2.在应用中、我想对一些 ADC 通道进行模拟采样。 现在、我在这里也没有取得很大的成功。

    再次感谢!

    Tim

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

    好的、更新。

    在 SCS 中、我将获得一个非常接近2个通道的工作状态。 这是 TI 在传感器项目中提供的 ADC 项目。

    下面是执行代码、Init 和 Termination 代码不变。 我的问题是 adcValue 和 adcNew 都读取了相同的 adcNew 值。

    //启用 ADC
    adcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_2P7_US、ADC_TRIGGER_MANUAL);
    // adcEnableSync (ADC_REF_FIXED、FW_DELAY_RANGE_20_US、 ADC_TRIGGER_MANUAL);
    
    
    //对 ADC
    S16 adcValue 进行采样;
    adcGenManualTrigger ();
    adcReadFifo (adcValue);
    output.adcValue = adcValue;
    
    //调试
    S16 adcValue2;
    //选择 ADC 输入--建立新的输入通道= DIO30
    adcSelectGpioInput (0);
    adcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_2P7_US、ADC_TRIGGER_MANUAL);
    adcGenManualTrigger ();
    adcReadFifo (adcValue2);
    output.adcNew = adcValue2;
    //调试
    
    //禁用 ADC
    adcDisable ();
    
    //如果更改掩码
    U16、则警告驱动器 adcMaskedbits = adcValue & cfg.changeMask;
    if (adcMaskedbits!= state.adoldAdcMaskedByedits){
    fwGenAlertInterrupt();
    State.samplesSinceLastReport = 0;
    }否则{
    state.samplesSinceLastReport = state.samplesSinceLastReport + 1;
    }
    
    //如果最小报告间隔已过期
    ,则提示驱动程序 if (cfg.minReportInterval!= 0){
    if (state.samplesSinceLastReport >= cfg.minReportInterval){
    fwGenAlertInterrupt();
    State.samplesSinceLastReport = 0;
    }
    }
    
    //保存旧的屏蔽 ADC 值
    state.oldAdcMaskebits = adcValue & cfg.changeMask; 

    这里是任务测试 Graph...please 请注意、adcValue 输入连接到 GND。

    当我删除"//debug"注释之间的所有代码时、代码在一个通道上运行得非常完美:

    //调试
    S16 adcValue2;
    //选择 ADC 输入--创建新的输入通道= DIO30
    adcSelectGpioInput (0);
    adcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_2P7_US、ADC_TRIGGER_MANUAL);
    adcManualTrigger ();
    adcReadFifo (adcValue2);
    output.adcNew = adcValue2;
    //调试 

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

    测试图没有显示...所以这里是这样的

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

    确定修正了 SCS 输出

    //启用 ADC
    adcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_2P7_US、ADC_TRIGGER_MANUAL);
    // adcEnableSync (ADC_REF_FIXED、FW_DELAY_RANGE_20_US、 ADC_TRIGGER_MANUAL);
    
    //选择 ADC 输入(A3/DIO26)
    adcSelectGpioInput (AUXIO_A_AD_INPUT);
    
    //对 ADC
    S16 adcValue 进行采样;
    adcGenManualTrigger ();
    adcReadFifo (adcValue);
    output.adcValue = adcValue;
    
    现在、让我们在我的传感器应用中开始工作吧!
    t //debug //更改 ADC 输入--创建新输入通道= DIO30 adcSelectGpioInput (0); adcGenManualTrigger (); adcReadFifo (output.adcNew); //调试 //禁用 ADC adcDisable (); //如果更改掩码 之外,则警告驱动器 U16 adcAdcobstate= cfg.changeMask; addobstate.addbed.addbedValue (AdcAdcAdcAdcybednates= AdcAdcAdcydbed.adkead ) fwGenAlertInterrupt(); State.samplesSinceLastReport = 0; }否则{ state.samplesSinceLastReport = state.samplesSinceLastReport + 1; } //如果最小报告间隔已过期 ,则提示驱动程序 if (cfg.minReportInterval!= 0){ if (state.samplesSinceLastReport >= cfg.minReportInterval){ fwGenAlertInterrupt(); State.samplesSinceLastReport = 0; } } //保存旧的屏蔽 ADC 值 state.oldAdcMaskedByits = adcValue & cfg.changeMask; //安排下一次执行(以秒为单位 ) fwScheduleTask (2);

    。 现在、我有两个通道采样、这里是代码。

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

    好的、Sensor Controller Studio 代码的问题是、我需要更改在执行代码内采样的模拟通道、而不是 Init 代码。 因此、这是固定的、SCS 现在具有2个通道采样。 这里是 SCS 执行代码、请注意、实际上不需要 Init 或 Term 代码。

    //启用 ADC
    adcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_2P7_US、ADC_TRIGGER_MANUAL);
    
    //选择 ADC 输入(A3 / DIO26)
    adcFiftGpioInput (ADC_SAMPLE_INPUT);
    
    //对 ADC
    S16 adcDisable (adcGennable
    )进行采样;adcValue
    
    (ADCADC0)
    
    = ADCADC0 (ADC0)
    ;ADCADC0 (ADCADC0);ADC0 (ADCADC0)输入;ADCADCADC0 (ADCADC0);ADCADCADC0 (ADCADC0);ADCADC0 (ADCADCADCADC0)
    
    
    
    
    
    
    //如果更改掩码
    U16 adcMaskedbits = adcValue & cfg.changeMask;
    if (adcMaskedbits!= state.oldAdcMaskedbits){,则警告驱动程序
    fwGenAlertInterrupt();
    State.samplesSinceLastReport = 0;
    }否则{
    state.samplesSinceLastReport = state.samplesSinceLastReport + 1;
    }
    
    //如果最小报告间隔已过期
    ,则提示驱动程序 if (cfg.minReportInterval!= 0){
    if (state.samplesSinceLastReport >= cfg.minReportInterval){
    fwGenAlertInterrupt();
    State.samplesSinceLastReport = 0;
    }
    }
    
    //保存旧的屏蔽 ADC 值
    state.oldAdcMaskebits = adcValue & cfg.changeMask; 

    现在、CCS 上运行的代码与 TI 提供的传感器代码类似、但第二个通道的代码除外:

    静态空 adcCallback (uint16_t adcValue、uint16_t adcNew);
    
    静态空 adcCallback (uint16_t adcValue、uint16_t adcNew)
    {
    /*保存最新值*/
    latestAdcValue = adcValue;
    latestAdcValueFromVcellHI = adcNew;
    
    /*事件后*/
    EVENT_POST (nodeEventHandle、NODE_EVENT_NEW _ADC_VALUE);
    }
    
    ***** 然后读取 SCE 输出.....
    /*获取 SCE"输出"结构*/
    scif_adc_sample_output_t* pOutput = scifGetTaskStruct(scif_adc_sample_task_id, scif_struct_output);
    
    /*通过回调向应用发送新的 ADC 值*/
    IF (adcCallback)
    {
    adcCallback (pOutput->adcValue、pOutput->adcNew);
    } 

    我希望这对其他人有所帮助、因为我花了太多的时间尝试弄清楚 TI 提供的软件在做什么(我不会说多少时间!)。

    Tim

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

    Marie、如果您仍在听、我真的需要一些帮助来了解 ADC 通道值上有如此多噪声的原因、如任务测试输出中所示。 我有一个通道跳接地、另一个通道悬空、我希望内部多路复用器开关出现大尖峰、但该值是否会被忽略? 然后残余噪声水平对我来说似乎很高、在输入接地的情况下最多可达12-13个计数。 如果我进行原始 ADC 输入所需的输入缩放、该值是否为零? 如果是、我在哪里可以找到相关文档?

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

    最后一个问题首先是:请参阅 https://dev.ti.com/tirex/explore/node?node=ABO7T5VshSOTTVANhMb1NQ__eCfARaV__LATEST

    ADC_convert (... );与传感器控制器相同。 然后您必须运行 ADC_convertRawToMicroVolts (... );获取调整后的值。  

    您还可以运行我指向的示例、并在 ADC 输入接地时比较增益/偏移调整前后的数据。  

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

    之三、感谢您:

    您说"adc_convert (... );与传感器控制器相同。 然后您必须运行 ADC_convertRawToMicroVolts (... );获取调整后的值。 "

    您是否说 我需要使用 adcReadFifo()函数而不是 adcReadFifo()函数来进行增益和比例校准?  

    我不清楚如何将3.0V 信号转换为微伏、大约为3M 微伏、从而适合应用使用的16位存储器。 您能不能让我更好地了解这项功能?

    我将尝试您指向的代码 、看看这是否会降低噪声、但在我的应用中读取大约10位的 ENOB 以及大约60dB 的 SNR 后、您可以帮助照亮输入接地时的实际本底噪声。  

    我要说、TI 提供了大量的材料、包括有关该论坛的资源、但我发现自己每天晚上都在阅读、以尝试吸收所有内容。 对于一个小3降压芯片、这个东西肯定会很多、而且非常复杂。 我完全明白为什么、非常感谢 TI 编写了大量射频通信软件。 这是一项艰巨的工作、我非常感谢我们为使应用开发人员更轻松所做的大量工作。 我希望我可以完成这项"简单的模拟"工作、并一路前进!

    t

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

    如果您使用相同的电路板和相同的输入,则如果您运行 ADC_convert()与使用 adcReadFifo()读取输出之间的关系,您应该得到相同的结果。  

    WO 函数以相同的方式使用 ADC、区别在于首先使用 cm3、另一个使用传感器控制器的 ADC。  

    ADC_convertRawToMicroVolts 的结果(...) 是一个32位值、请参阅 dev.ti.com/.../_a_d_c_8h.html

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

    所以您说要使用 ADC_convertToMicroVolts (),它必须在 ADC_convert ()之后的主应用程序代码中运行,对吧?

    因为如果我尝试  从 SCS 运行 ADC_convertToMicroVolts (),它会给我一个语法错误。 如果这是真的、那么我必须重写我的所有 ADC 代码、这些代码使用平均值计算和一些数学运算来进行限制检查、这将使我完全不高兴。 所以请告诉我 有一个与 ADC_convertToMicroVolts ()等效的函数 ,我可以从 Sensor Controller Studio 代码运行。

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

    我这边的措辞略差。  

    传感器控制器代码运行 adcReadFifo()。 然后、它必须将该值传递到运行 ADC_convertMicroVolts ()的 cm3端(这就是我链接到示例的原因)

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

    之三、

    感谢你的帮助。 是否有方法在 Sensor Controller Studio 内进行校准?

    t

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

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

    好的,要校准 ADC,需要在转换为微伏例程之前运行 ADC_convert()。 但是 adc_converter()与 adcReadFifo()不同,所以对于我的应用程序,我需要使用 adc_converter()进行大量采样。 这是 根据 TI 文档定义的 ADC_convert()。

    此外、是否可以提供使用 SCS 进行 ADC 采样、然后使用 CCS 代码进行校准的示例或文档?  

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

    我将尝试重新措辞。  

    如果您只有 CCS 项目(传感器控制器未使用):此流程如 https://dev.ti.com/tirex/explore/node?node=AKW5AKwnAYE1tS0FZ14ixw__eCfARaV__LATEST 所示

    为了简化:执行 ADC_convert (),然后 使用 ADC_convertRawToMicroVolts ()来调整增益和偏移误差。

    如果您使用传感器控制器:  

    adcGenManualTrigger();要执行 ADC 转换,则 使用 adcReadFifo();读出该值。 此值通常传递到 cm3可以访问的存储器部分。 请参阅 在 SSC 中使用代码生成器时生成的 scif_how_to_use.html 文件。  

    如果您查看 ADC 数据记录器示例并打开 main_tirtos.c 文件:在这个示例中、您可以在此行之后运行 ADC_convertRawToMicroVolts: uint16_t value = scifTaskData.adcDataLogger.out.pSamples[tail];

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

    我很喜欢这里。 我感觉自己被派往做繁忙的事情、而不是解决我的问题、这就是尝试获得校准的 ADC 值、同时还使用传感器控制器(SC)进行其他 ADC 工作。 我将以3项的形式总结您最近的帮助。

    1."传感器控制器未使用"。 正如我们在前面所讨论的、我使用的是 SC、因为我需要低功耗 ADC 样本。

    使用 adcReadFifo、然后 使用 SCIF_How-TO_use 完成校准。 两个问题、首先是我们在上面讨论过的问题、您说必须首先使用 ADC_convert、我可以找到的所有 TI 文档也是如此。 那么、这是什么? 其次 、SCIF_How-To_use 既没有提到 adcReadFifo、也没有提到如何使用 ADC_convertRawToMicroVolts 或任何其他校准方法。  

    3.我可以在 SCS 中找到 ADC 数据记录器示例,但没有 main_tirtos.c 文件。 在 CC1310 Launchpad 下的 SimpleLink 目录中以及 Simplelink Academy 中、没有 ADC 数据记录器示例。 您能更具体地说明在哪里找到吗?

    也许您可以让 CC1310 ADC 专家查看我的代码(几乎完全是收集器/节点代码)、并描述我可以如何以及在哪里对模拟引脚 A7进行校准? 我很幸运地收到了以下代码、但它只能在 SC 启动之前起作用:

    #include "dkboards.h"
    #include 
    
    //导入 ADC 驱动程序定义
    #include 
    
    
    /* ADC 转换结果变量*/
    
    static uint32_t resultUv_hi; //来自高侧
    静态 uint32_t resultUv_LO 的校准模拟值; //低侧
    
    void adc_calibration (void)
    的校准模拟值{
    //定义 ADC 通道索引的名称
    #define VCELL7PT4V 7.
    #define VCELL3PT7V 5.
    静态 uint16_t adcValue9 = 0; //从 ADC 读取的模拟值
    // ADC 驱动程序的一次性初始化
    // adc_init(); //在 BIOS_start()之前在 main 中完成;
    
    //初始化可选的 ADC 参数
    ADC_Params 参数;
    ADC_PARAMS_INIT (params);
    params.isProtected = true;
    //打开要使用的 ADC 通道
    ADC_Handle adcHandle = ADC_open (VCELL7PT4V、params);
    
    
    //对7.4V 高侧模拟进行采样
    ADC_convert (adcHandle、&adcValue9);
    //将样本转换为微伏
    resultUv_HI = ADC_convertToMicroVolts (adcHandle、adcValue9);
    
    //对3.7V 低侧模拟进行采样
    adcHandle = ADC_open (VCELL3PT7V、params);
    ADC_convert (adcHandle、&adcValue9);
    //将样本转换为微伏
    resultUv_LO = adc_convertToMicroVolts (adcHandle、adcValue9);
    
    // adc_close (adcHandle);
    
    if (resultUv_LO =resultUv_HI) adcValue9=1+1;
    }
    

    非常感谢、

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

    (从上方起飞)

    实际上、我想我找到了最简单的方法。  

    如果您可以描述如何在 Node 项目中校准 adcValue 样本(NodeTask.c)、这将是宏伟的。 如果我可以将校准调用到全局函数、效果会更好。

    我在切换输出引脚时遇到类似的问题。 我正在使用以下代码、但它仅运行一次。

    PIN_Config 端口表[]={
    LO_FAN_CNTRL | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MED、
    HI_FAN_CNTRL | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MED、
    HI_SHUNT_CNTRL | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MED、
    LO_SHUNT_CNTRL | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MED、
    PIN_TERMINATE
    };
    PIN_STATE 引脚状态;
    PIN_Handle PinHandle = PIN_OPEN (&PinState、portTable);
    PIN_setOutputValue (PinHandle、LO_FAN_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、HI_FAN_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、HI_SHUNT_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、LO_SHUNT_CNTRL、OFF);
    

    因此、我想我正在寻找能够在传感器节点上运行的最简单的代码、该代码将校准 ADC 并允许 I/O 引脚切换。 我拥有最短的时间来获得在提供的函数之外运行最简单的代码。

    非常感谢

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

    您在这里是否参考了 EasyLink 下的 rfWsnNode 示例?  

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

    是的...此主题中的所有消息都基于 EasyLink 中的节点/集中器项目。

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

    在 SceADC.c 中:

    从下面的行可以看到、ADC 值是通过回调从传感器控制器发送的:

    /*通过回调向应用发送新的 ADC 值*/
    IF (adcCallback)
    {
    adcCallback(pOutput->adcValue);
    } 

    ADC 值在 nodeTask.c 中使用、如下所示:

    静态空 adcCallback (uint16_t adcValue)
    {
    /*保存最新值*/
    latestAdcValue = adcValue;
    
    /*事件后*/
    Event_post (nodeEventHandle、node_event_new_adc_value);
    } 

    该值通过无线发送在此处:

    /*向集中器发送 ADC 值*/
    NodeRadioTask_sendAdcData (latestAdcValue); 

    这意味着您可以通过在前面的行中插入所需的代码来补偿 ADC 值。  

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

    谢谢 ter。

    当您说"这意味着您可以通过在前面的行中插入所需的代码来补偿 ADC 值。 "、

    您是指...在 NodeRadioTask 之前的行上插入所需代码、还是在回调中的一行之前插入所需代码?

    在 I/O 端口切换时、我将在 LED 引脚状态更改(TI 提供的节点代码)后立即执行端口引脚更改、但我仍然只执行一次切换、然后不再进行进一步更改、而不是连续切换。 您能否建议端口输出驱动程序在节点代码中的哪个位置?

    //TI 提供
    的#IF!已定义 Board_CC1350STK
    /*切换活动 LED */
    PIN_setOutputValue (ledPinHandle、NODE_ACTIVE_LED、!PIN_getOutputValue (NODE_ACTIVE_LED));
    
    //TI 提供
    
    //离网代码
    /*启用 DK 电路板上的 I/O 端口*/
    PIN_Config 端口表[]={
    LO_FAN_CNTRL | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MED、
    HI_FAN_CNTRL | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MED、
    HI_SHUNT_CNTRL | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MED、
    LO_SHUNT_CNTRL | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MED、
    PIN_TERMINATE
    };
    
    PIN_STATE 引脚状态;
    PIN_Handle PinHandle = PIN_OPEN (&PinState、portTable);
    
    PIN_setOutputValue (PinHandle、LO_FAN_CNTRL、ON);
    PIN_setOutputValue (PinHandle、HI_FAN_CNTRL、ON);
    PIN_setOutputValue (PinHandle、HI_SHUNT_CNTRL、ON);
    PIN_setOutputValue (PinHandle、LO_SHUNT_CNTRL、ON);
    
    PIN_setOutputValue (PinHandle、LO_FAN_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、HI_FAN_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、HI_SHUNT_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、LO_SHUNT_CNTRL、OFF);
    //离网格代码
    

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

    希望此屏幕截图能更好地显示您可以在哪里插入代码:

    对于引脚切换:您是否插入了上图中红色箭头上方显示的代码? 这在一个 while (1)循环内、这意味着每次在 while 循环上启动时都要重新定义 pintable 和 pinHandle、这不是一个很好的实现方法。  

    我迟到了。 由于 rfWsnNode 示例使用传感器控制器、您更改 SCS 代码的方式是什么?  

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

    感谢 ter、

    我现在在 SCS 样本上运行了一个工作校准!! 非常感谢。 我最终使用的代码是按照您的指示进行操作。

    while (1)
    {
    /*等待事件*/
    uint32_t 事件= Event_pend (nodeEventHandle、0、node_event_all、BIOS_wait_forever);
    
    
    /*如果是新的 ADC 值,则发送此数据*/
    if (event & node_event_new_adc_value){
    
    
    /*切换活动 LED */
    PIN_setOutputValue (ledPinHandle、NODE_ACTIVE_LED、!PIN_getOutputValue (NODE_ACTIVE_LED));
    
    
    
    
    //在此处执行新鲜采样后立即执行 ADC 校准
    ADC_CALIBRATION ();//获取电压样本和校准以获得精确度,保存结果
    latestAdcValue = resultMv_HI;//读取校准后的 Vcell hi
    latestAdcValueFromVcellLO = resultMv_LO;//读取校准后的 Vcell lo
    
    PIN_setOutputValue (ledPinHandle、RED_LED、!PIN_getOutputValue (RED_LED));
    PIN_setOutputValue (ledPinHandle、GREEN_LED、!PIN_getOutputValue (GREEN_LED));
    PIN_setOutputValue (ledPinHandle、Yellow、!PIN_getOutputValue (Yellow _LED));//此处没有黄色 LED、因为 SCS 具有控制权
    
    PIN_setOutputValue (PinHandle、LO_FAN_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、HI_FAN_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、HI_SHUNT_CNTRL、OFF);
    PIN_setOutputValue (PinHandle、LO_SHUNT_CNTRL、OFF);
    
    
    
    NodeRadioTask_sendAdcData (latestAdcValue);
    

    我希望 SCIF_HAS_TO_USE 示例文件准确地展示如何校准 ADC、这将是一个很好的添加功能、并且可以节省大量时间。

    再次感谢...但我不理解您的最后一行...

    "我迟到了。 由于 rfWsnNode 示例使用传感器控制器、您更改 SCS 代码的方式是什么? "

    现在就到这里了...