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.

[参考译文] 使用修改后的软件显示设置

Guru**** 2564565 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/973994/display-settings-with-modified-software

器件型号:MSP430FR6047

我正在开发超声波流量传感器并对软件进行调制。

因为我只需要当前流值的信息、所以我删除了代码中的 statemachine 和按钮处理。 仅保留函数 LCD_statemachine_displayFlowRate()。 在心跳切换后、我在 HMI_PostAlgorithm_Update 中设置它。
我的程序可以正常工作、但当我断开芯片与电源的连接并重新连接时、显示屏保持空白。 只有灯光开始闪烁。 我调试了该程序、发现在本例中、该进程在中断中挂起:USsSwLibCommonTimer.c 中的 commonTimerWaitEvent
当我注释(或删除) commonTimerWaitEvent 中的 while 循环时、程序在各种函数中运行、但我的显示内容保持为空。

我始终必须重新刷新显示屏显示流速的代码。

您是否知道如何解决此问题?

此致、
Kathrin

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

    您好 Kathrin、

    [引用用户="Kathrin Honermann"]只有灯光开始闪亮。

    对于软件、这意味着什么? 您是否指的是板上的 LED 闪烁?

    [引用 user="Kathrin Honermann "]该进程在中断中挂起:ussSwLibCommonTimer.c中的 commonTimerWaitEvent

    "挂起"在这里意味着什么? 应用库不再生成流量测量? 我认为 这个库中的许多函数都使用了 commonTimerWaitEvent。  

    如果只关注 LCD_statemachine_displayFlowRate(),它是否正确设置 了 displayData_ptr 并通过 LCD_statemachine_writeLCD()?

    Srinivas

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

    您好 Srinivas、

    "只有灯开始闪烁":LED D101、D201和 LED3 (如果传感器中没有水)亮起、LED D202闪烁3次、然后熄灭。

    "进程在中断中挂起": 我的意思是"挂起"、当我使用调试工具暂停程序时、它始终位于例程 commonTimerWaitEvent 中。 现在、我更正确地调试并设置一些断点。 该过程通过 HMI_PostAlgorithm_Update 和 LCD_statemachine_displayFlowRate。 我不知道它是否执行了第一个计时例程、因为我需要一些时间来重新连接。

    当我单击"单步执行"时(在代码的许多部分、例如 当程序位于 USSLibGUIApp_Engine 中的 HMI_PostMeasurement_Update()时,我始终会访问 USSLIB_HAL_TIMER_INT。 很抱歉、我无法为您提供有关处理和中断行为的非常正确的信息。

    当我打开 USS-GUI 时、我能够将其连接到器件、但我没有得到任何值。 我无法请求更新、并收到错误消息:错误22 HSPLL 的输出频率无效

    我希望这些信息能提供更多帮助。

    我还有一个新问题。 我想用 l/min 而非 l/h 来测量 volumeFlowRate 我已经更改了显示屏上的装置、但在 USS 中、它仍以 l/h 为单位进行计算 在将流速发送到 USS 之前、我在代码中找不到最终校准流速的正确位置。 我想保留所有计算结果、如果可能、只需计算/60。
    此外、如果我可以像往常一样使用 USS 校准流量计、但以 l/min 键入流速、那将会很好 如何针对我的使用案例修改代码?

    有时 USS 会显示错误"测量之间的时间大于 UPS0到 UPS1的间隙"。 我发现我可以通过更改脉冲数和 UPS0到 UPS1间隙来处理此误差。 是否有规则规定这两个值的比例不会产生误差? 程序如何准确地使用这两个参数? 它是计算所有脉冲的结果平均值来计算 UPS0至 UPS1间隙时的一个流速、还是在每个脉冲之后进行计算、并且仅显示每个 UPS0至 UPS1间隙后的实际结果?

    此致、

    Kathrin

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

    您好 Kathrin、

    您能否检查 lcd_statemachine_displayFlowRate()内部是否存在,当您逐步执行时,它是否正确设置 了 displayData_ptr 并通过 lcd_statemachine_writeLCD()? 这些指针和数据是否根据数据按预期设置?

    [报价用户="Kathrin Honermann"]我在将流速发送到 USS 之前没有找到代码中最终校准流速的正确位置。

    在 HMI_PostAlgorithm_Update()中,您将看到以下代码行,用于设置要发送到 USS 设计中心 GUI 的数据:

    DC_User_Params->pla_dtof =(double) alg_results_float.deltaTOF);
    DC_User_Params->plot_abs_ups = ALG_Results_float.totalTOF_UPS;
    DC_User_Params->plot_Abs_DNS = ALG_Results_float.totalTOF_DNS;
    DC_User_Params->plot _vol_flow_rate = ALG_Results_float.volumeFlowRate;

     如果只想修改报告给 GUI 的内容、可以在 DC_User_Params->pla_vol_flow_rate 上执行乘法(float)(1/60)。

    [引用用户="Kathrin Honermann"]

    此外、如果我可以像往常一样使用 USS 校准流量计、但以 l/min 键入流速、那将会很好 如何针对我的使用案例修改代码?

    [/报价]

    您只需在 LPM 中输入值。 我认为这应该起作用。

    [引用用户="Kathrin Honermann "]有时 USS 会显示错误"测量之间的时间大于 UPS0到 UPS1的间隔"。

    您需要确保此值大于完整测量的时间。 通常、即使是100ms、相当于10次测量/秒、也应足以确保不会出现此误差。 此设置使用什么值?

    [引用 user="Kathrin Honermann"]是否有规则规定这两个值的比例不会产生错误? 程序如何准确地使用这两个参数?[/quot]

    您可以查看图31 。 TI 超声波水流量计设计在测量期间的电流消耗曲线(https://www.ti.com/tool/TIDM-02005) -> https://www.ti.com/lit/pdf/tidues5。 它给出了时序图。 您需要确保 "测量之间的时间大于 UPS0到 UPS1的间隔"大于该图中所示的所有步骤所花费的时间。

    [引用 user="Kathrin Honermann 的说法]它是计算所有脉冲的结果平均值来计算 UPS0至 UPS1间隙时的一个流速、还是计算每个脉冲后的一个流速、并且仅显示每个 UPS0至 UPS1间隙后的实际结果?[/QUERPES]

    它仅根据所有脉冲计算一次。

    Srinivas

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

    您好 Srinivas、

    很抱歉耽误你的回答。 我有一些考试需要编写、没有足够的时间逐步完成您的所有积分。
    感谢您提供的所有这些信息。 我将尽快作出充分反应。

    Kathrin

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

    您好 Srinivas、

    现在、我有时间逐步了解您的答案。

    感谢您提供有关 lpmin 校准的信息。 它现在应该可以工作。

    „您能否检查 lcd_statemachine_displayFlowRate()内部是否存在,当您逐步执行时,它是否正确设置 了 displayData_ptr 并通过 lcd_statemachine_writeLCD()? 这些指针和数据是否根据数据按预期设置?”
    我在 displayData_PTR->character[5]='L'和 LCD_statemachine_writeLCD 的 lcd_statemachine_displayFlowRate()中设置断点。 当我第一次单步执行这些点时、所有操作都是正确的。 当我断开并重新连接电路板、让它再次运行到我的任何断点并单击 Step Over 或 Step into 时、我会转到中断 USSLIB_HAL_TIMER_INT。 只有当我“步出”时,我才会转到下一个„正常”代码。 代码至少会到达断点、但似乎不会执行 LCD_statemachine_writeLCD、因为它不会达到我在 LCD_statemachine_writeLCD 中设置的任何断点。

     

    我在 USS 中的实际设置为:

    脉冲数= 25
    PS 和 DNS 差距= 3、000
    UPS0至 UPS1间隙= 1、000

    和高级:  

    我是否理解正确、我的 UPS0至 UPS1间隙必须大于我在图中所示周期的整个时间内计算的值? 我计算了我的周期时间为987、531 ms。 因此、它应该是可以的、但接近最大值。
    为了进行计算、我将图的上行/下行间隙值更改为我在 USS 中的3us。

    此致、

    Kathrin

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

    您好 Kathrin、

    [引用 user="Kathrin Honermann"]但它似乎不执行 LCD_statemachine_writeLCD,因为它不会达到我在 LCD_statemachine_writeLCD 中设置的任何断点。

    您能看到 g_lcd_statemachine.curry_state 的状态吗? 该状态可能已变为"睡眠" (LCD_STATEMACHINE_SLEEPLCD)?

    [引用用户="Kathrin Honermann"]

    我在 USS 中的实际设置为:

    脉冲数= 25
    PS 和 DNS 差距= 3、000
    UPS0至 UPS1间隙= 1、000

    [/报价]

    对于这些设置、您不应看到 错误"测量之间的时间大于 UPS0到 UPS1的间隔"。  

    [引述 USER="Kathrin Honermann "]我是否理解正确?我的 UPS0到 UPS1的差距必须大于我在图中所示期间的整个时间内计算得出的结果?[/QUERPES]

    实际上、您不必计算 该睡眠(LPM3) 985ms。 您的设置正常。 我不知道您为什么会遇到该错误。 一种可能是、当它达到该误差时、它不会找到任何 ADC 信号。 您知道这是不是发生的吗?

    Srinivas

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

    您好 Srinivas、

    我删除了 LCD_STATEMACHINE_SLEepLCD 和 CURRENT_STATE、因为我的显示屏只有一个状态。 但现在我搜索了关闭 LCD 的函数、找到了关闭显示屏的位置、并纠正了错误。

    UPS 错误可能出现,并且错误表明未检测到信号。 我经常有一条空管道。 因此、这应该是问题所在、在本例中、我将忽略更多错误。

    感谢你的帮助。

    Kathrin