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.

[参考译文] MSP430FR2676:软件问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1341225/msp430fr2676-software-questions

器件型号:MSP430FR2676
主题中讨论的其他器件:CAPTIVATE-BSWP

您好!

我的客户正在基于 FR2676_CAPTIVATE-BSWP 演示评估 CapTIvate 软件。
下面是客户提出的一些问题。

q1)在 CAPT_BSP.c 文件中的#172行、有 以下代码。
cs_clearAllOscFlagsWithTimeout(1000);

    //
    // Tune the DCO parameters
    //
    CS_initFLL((MCLK_FREQ/1000), FLL_RATIO);
    CS_clearAllOscFlagsWithTimeout(1000);

选择"1000"作为超时值的原因是什么?
客户将其改为 "1"、而不是"1000"。 有问题吗?

Q2)客户在 main.c 中测量了 while (1)后台循环周期。
(GPIO 在循环的开始和结束时切换。)
然后、他们注意到、当计数器值为8191时、while 循环花费了更长的时间。
使用8191计数时循环变长的原因是什么?

Q3)客户 在 while 循环中更改了 main()并添加了 Capt_writeGeneralPurposeData (&BTN00_E00.pRawCount[0]、15)。
void main(void)
{
                          WDTCTL = WDTPW | WDTHOLD;
             BSP_configureMCU();
             __bis_SR_register(GIE);
 
                          CAPT_appStart();
 
                          while(1)
             {
                          CAPT_appHandler();
                          CAPT_writeGeneralPurposeData(&BTN00_E00.pRawCount[0], 15);
 
                          __no_operation();
 
                          CAPT_appSleep();
                          
             } // End background loop
}


客户要求  CAPT_writeGeneralPurposeData() 输出 &BTN00_E00.pRawCount 存储在 CAPT_appHander()中。
但 计数 CAPT_writeGeneralPurposeData()输出不同于 CAPT_writeElementData()。
它们是否不同?

问题4)
CAPT_writeGeneralPurposeData 输出 CVS 数据、如下所示。
TimeStamp(ms)  v0         v1         v2         v3         v4         v5         v6             v7         v8         v9
32         1124      1087     1105     1083      1099     1113     1101      1105             1091      1115
32         1127      1088     1106     1080      1103     1116     1101      1102             1096      1116
32         1124      1089     1105     1093      1098     1114     1100      1106             1095      1113
32         1135      1088     1108     1086      1109     1120     1097      1102             1103      1114
32         1130      1085     1099     1084      1107     1117     1089      1102             1103      1115
47         1131      1084     1103     1079      1107     1111     1095      1102             1102      1110
47         1129      1093     1105     1083      1101     1119     1100      1104             1095      1120
64         1130      1080     1098     1093      1113     1115     1100      1106             1100      1111
79         1128      1088     1098     1090      1106     1113     1096      1105             1097      1108
79         1131      1089     1102     1088      1109     1110     1099      1105             1092      1110
95         1131      1082     1096     1089      1111     1117     1099      1103             1094      1109

时间戳(ms)究竟是什么意思?
-目标值更新的时间?
-访问目标值的时间?
-输出目标值的时间?
还是别的?

谢谢。此致、
田代浩一郎

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

    你好,Koichiro

    Q1 -关于"1000"、这用作时钟配置中的延迟、以便为 XT1启动留出一些时间。  此函数是 MSP430 Driverlib 的一部分。  如有兴趣查看、客户可以下载。  为了方便起见、我在这里复制了函数。  第1000章不是什么魔法。  我怀疑 Driverlib 开发人员可能选择了一个足够大的值、以使 XT1上的32KHz 晶振有足够的启动时间。   如果客户使用带有32kHz 晶体的 XT1、可能希望将其保留为1000。  问题可能是当 CPU 退出此功能时、它们的32kHz 晶体未就绪。

    客户所指的代码似乎是 CAPT_bsp.c 文件中使用的旧版本。

    新版本如下所示。  他们正在使用哪个版本的 CapTIvate 库?  此信息位于 CAPT_UserConfig.h 文件中、类似于以下内容:
    //! 版本:1.83.00.05

    	//
    	// Attempt to start the low frequency crystal oscillator
    	//
    	CS_setExternalClockSource(XT1_OSC_FREQ);
    	if (CS_turnOnXT1LFWithTimeout(CS_XT1_DRIVE_0, XT1_OSC_TIMEOUT) == STATUS_FAIL)
    	{
    		//
    		// If a crystal is not present or is failing, switch the LF
    		// clock definition to the internal 32kHz reference oscillator.
    		//
    		ui8LFOsc = CS_REFOCLK_SELECT;
    	}

    Q2 -这表示电容式外设已执行8191 (允许的最大电荷传输周期。  测量8191计数需要很长的时间、因此这就是客户看到较长时间的原因。  这通常表明校准或传感器存在问题。  由于看起来他们正在使用 BSWP、因此校准应该可以。

    客户使用的目标转换计数是多少?  它们是否具有.ui16ConversionCount = 250?

    Q3 -这两个函数是不同的。  两者都旨在向 GUI 发送数据以供显示。  CAPT_writeElementData 会将传感器中每个元素的所有数据传输到 GUI。  CAPT_writeGeneralPurposeData 允许将自定义数据发送到 GUI。

    客户是否正在尝试使用终端应用程序向 GUI 发送数据或在 PC 上发送数据?

    Q4 -时间戳是 GUI 接收数据时的时间。  老实说、我不知道有任何客户使用这些信息、因此我不认为它很有用。

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

    您好、Dennis、

    感谢您的快速回复!
    Q1) 理解。

    Q2)客户使用他们的定制传感器、这就是需要更长时间的原因。
    如果时间过长、他们希望终止测量。 你有什么想法吗?

    Q3)他们需要&BTN00_E00.pRawCount 值。
    从 CAPT_getCyclePacket ();在 CAPT_writeElementData ()中返回的值为"Element touch/prox state"、"Current count"和"Current LTA"。
    "当前计数"是否与 &BTN00_E00.pRawCount 中存储的值不同?

    Q4)客户希望 目标值更新时使用时间戳。
    是否有任何方法可以输出该时间戳?

    谢谢。此致、
    田代浩一郎

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

    你好,Koichiro

    Q2)客户使用自定义传感器,因此需要较长的时间。
    如果时间过长、他们希望终止测量。 您有什么想法吗?

    是的、让客户在 CAPT_UserConfig.c 文件中的传感器结构中设置.ui16ErrorThreshold。  默认值为8191。  实际上、我会将~2000设置得更低。  如果他们将.ui16ConversionCount 设置为大约500或更少的值、则可以将 ui16ErrorThreshold 减小为1000。

    Q3)他们需要&BTN00_E00.pRawCount 值。
    从 CAPT_getCyclePacket ();在 CAPT_writeElementData ()中返回的值为"Element touch/prox state"、"Current count"和"Current LTA"。
    "当前计数"是否与 &BTN00_E00.pRawCount 中存储的值不同?

    是的、当前计数是已经用 beta = 1来过滤的 rawCount、而 Current LTA 是使用 beta = 7来过滤的 rawCount。  除非他们需要 rawCount、否则我建议他们使用 currentCount、因为滤波功能会消除一些噪声。

    Q4)客户需要 目标值更新时的时间戳。
    是否有输出该时间戳的方法?

    在这种情况下、我建议使用 MSP430而不是 GUI 来跟踪时间。  GUI 的时间戳存在延迟(由于 Java 和 OS)、并且与实际测量时间不准确。  客户可以利用以下事实:CapTIvate 测量以固定的时间间隔进行、即20ms 或33ms、或者他们在 g_uiApp.ui16ActiveModeScanPeriod 中设置的任何时间间隔进行、并且他们可以将其用于时间戳。

    我很好奇为什么客户使用时间戳?  我不知道有任何其他客户将其用于 HMI 应用。  您能说客户在做什么吗?

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

    您好、Dennis、

    很抱歉我迟到了回复。
    Q2)客户确认它工作正常。
    Q3)他们仍在检查它。
    Q4)它们正在尝试 通过 SPI 模拟 CAPT_writeGeneralPurposeData 来输出时间戳、但运行不正常。
    您能告诉我如何通过 SPI 输出时间戳吗?

    谢谢。此致、
    田代浩一郎

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

    你好 Koichiro -

    很抱歉耽误你的时间。  CAPT_writeGeneralPurposeData 将用户定义的数据(声明的内容类似于 uint16_t data[8])发送到 GUI,以便在 UserDataLog 窗口中显示这些值。  该数据只能通过 USB 通过调试器通过 UART 或 I2C 发送。

    无法使用 SPI 向 PC 发送数据。

    让客户在 GUI 中选择 UART 或 I2C、并在 CAPT_UserConfig.h 中设置相应的设置

    示例:

    如果使用 UART

    #define CAPT_INTERFACE ( __CAPT_UART_INTERFACE _)

    如果使用 I2C

    #define CAPT_INTERFACE ( __CAPT_BULKI2C_INTERFACE _)