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.

[参考译文] MSP430FR5989:在对辐射进行计数时、需要提前计数。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1048459/msp430fr5989-when-counting-radiation-the-time-is-ahead

器件型号:MSP430FR5989

大家好、

我有辐射计数仪器、我们使用 MSP430FR5989。 我在该仪表上有显示不同参数的显示屏、如时间、计数、模式、HV 等  

当该仪器对辐射进行计数时、LCD 上显示或显示的时间比实际计时器快2.4%。 因此、如果在实际100秒内仪器速度更快、显示为102.4秒。 我尝试在 Main.c 文件中进行更改 、然后我发现、我可以使它比现在更快或更慢。 如何将此问题修复为最接近 的误差、最高可达+-0.5%?  非常感谢您的帮助或解决方案。

谢谢。

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

    您是如何计算时间的? 您有 RTC 吗? 您有晶体吗? 您是否测量了时钟频率?

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

    我不熟悉它、但我们使用了外部时钟32.768kHz。

    我想我们还使用了16MHz。

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

    由于您可能无法共享您的代码、您能否将代码剪裁为显示问题的小型应用? (通常这足以告诉您问题是什么)

    任何晶振都应该比2%好得多!

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

    "任何晶振都应优于2%!" 这话什么意思?

    下面是主文件中的时钟部分。  

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

    您好、Sandip Patil、

    以下是一些资源、可为您提供帮助、因为您说您是新手。 我们的时钟示例代码可帮助您了解系统、此 代码示例 使用32KHz 晶振、其他时钟示例以 msp430fr59xx_cs_0x.c 格式表示、因此如果您需要更多参考、可以查看。

    还有 一个 包含实时时钟的示例、您可以将其用作 RTC 的参考。 请首先运行这些示例、以确保器件正常工作、并且您的代码按照正确的步骤参考这些示例。

    此致、

    Luke

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

    2.4%的误差在 DCO 规格范围内[参考数据表(SLASE54C)表5-6]。

    尽管如此,100.0和102.4之间的区别似乎过于巧合,而是听起来像是一个小的算术错误(例如,一对一的错误)。

    您能否发布计时器设置代码?

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

    您好、Bruce、

    请看一下。

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

    我假设这会设置 TASSEL/TBISSEL 域(尽管它没有说明它设置的值)、并省略分频器(ID/CCR0/TAIDEX)和模式(MC)。 您能显示调用此函数的代码吗? (调试器显示("Registers"视图)的计时器的寄存器可能足以继续。)

    我要查找的内容有:

    1)尝试使用 ACLK (32.768kHz) 1毫秒(0.001秒与0.000977秒)"节拍"。 这不仅不起作用、还会产生您描述的症状。

    2) 2)忘记在向上计数模式下从 CCR0值减1。  

    3) 3)计算的定时器周期(CCR0)值中的取整/截断误差。

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

    实际上、我没有给您提供帮助。

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

    由于似乎不清楚 LCD 上实际显示的是什么计时器、我将从顶部的 main.c 中开始、看看我是否可以找出该部分。 我怀疑这会导致 timer.c 或 RTC_c.c (FR5989没有 RTC_B。)

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

    我在 main.c 中进行了更改、我发现我可以使它比我们的速度更快或更慢。 我只是对寄存器进行了分页。

     CSCTL2 = SELA_LFXTCLK | SELM_DCOCLK | SELM_DCOCLK;// ACLK=LFXT (32kHz)|SMCLK=DCO|MCLK=DCO、

    在上面的代码行中、我从   SELA_LFXTCLK 中更改了 SELA_VLOCLK、这是我在.h 文件中最接近的寄存     器、但它使它更快、然后、我也从 SELA_LFXTCLK 中更改了 SELA_7、这使它变得非常慢。  

    我还在 main.c 文件中更改了分频器、但它使其变得更快或更慢。

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

    LFXTCLK (额定32kHz)的运行速度确实比 VLOCLK (额定10kHz)[参考数据表(SLAS789D)表5-4和5-7]要快很多。 VLOCLK 无论如何都不适合"壁式时钟"时间(+/-50%精确)。 我不知道 SERA_7有什么作用。

    您更改了哪些分频器? 通常、这些东西可以在时钟源和目标频率已知后计算、但从外部看、我们都猜到了

    -------------- 。

    未经请求:这看起来可疑:

    > PJSEL1 &=~0x0010;//  
    > PJSEL0 |= 0x0010;//  

    因为它只启用 LFXIN、而不启用 LFXOUT。 在这种情况下、我希望看到 CSCTL4:LFXTBYPASS = 1 [参考用户指南(SLAU367P)第3.2.2]节、但该代码设置 LFXTBYPASS = 0。

    您的32kHz 使用什么时钟源? 它是外部时钟(一根线进入 PJ.4)还是外部晶振(两根线进入 PJ.4和 PJ.5)? [如果需要、请检查原理图。] 在前一种情况下、应设置 LFXTBYPASS = 1;对于后一种情况、应设置 PJSEL0中的0x0030 (而不是0x0010)位[参考数据表.6-40]

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

    我们使用32kHz 外部晶体。  

    CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;   在这里、我将分频器2从1更改为1、但同样要慢得多。

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

    我们将使用32kHz 外部晶体。  

    然后(如上所述)您应该使用  

    根据数据表、> PJSEL0 |= 0x0030;// PJ.4/5作为 LFXIN/LFXOUT 表6-40

    我不确定您的32kHz 现在是如何工作的(可能是您尚未发布的一些代码?)。

    --------------------

    除此之外,我建议您不要再更改 CS 寄存器--保留 SELA_LFXTCLK 并保留所有 DivX,就像原来一样。 如您所见、此类更改往往会进行较大的调整、您需要进行较小的调整。

    此外、在 LCD 上没有显示 CPU 时钟(ACLK/SMCLK/MCLK/VLOCLK/LFXTCLK)的机制、相反、你需要将该时钟提供给一个定时器(TimerA、TimerB、RTC)、这就是可以进行小调整的地方。

    LCD 时钟显示屏使用什么计时器? 以及如何配置它?

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

    因此、我需要进行此更改"PJSEL0 |= 0x0030"

    是否希望从 main.c 发布更多代码?

     

    我想对于 LCD、 使用 IRTC。

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

    如何配置 RTC? 我希望其中的一部分位于 main.c 中、而部分位于 RTC_c.c 中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1048459/msp430fr5989-when-counting-radiation-the-time-is-ahead/3882146 #3882146"]我不确定您的32kHz 现在是如何工作的(可能是您尚未发布的某些代码?)。

      MSP430FR58xx、MSP430FR59xx 和 MSP430FR6xx 系列的第3.2.8节 CS 模块失效防护操作用户指南(修订版 P) 包含:

    [引用]如果 LFXT 提供任何系统时钟(ACLK、MCLK 或 SMCLK)、并且检测到故障、则系统时钟会自动切换到 LFMODCLK 作为其时钟源。[/quot]

    和 第3.1节"时钟系统简介"包含:

    [引用] MODCLK:频率典型值为5MHz 的内部低功耗振荡器。 LFMODCLK 是 MODCLK 除以128。[/引用]

    也许、频率误差是由 未配置校正的32kHz 外部晶振以及 正在使用内部低容差 LFMODCLK 来解释的。

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

    那么、我应该怎么做? 我的正确方向是什么?

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

    这是 main.c 中 clock_init 之前的代码段

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="5028" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1048459/msp430fr5989-when-counting-radiation-the-time-is-ahead/3883477 #3883477">那么,我该怎么办? 我的正确方向是什么?[/引述]

    我之前说过、创建一个更小的项目来展示问题并与我们分享。 通常、当您发现问题时、您会发现问题。

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

    我在 下面一行的 system_timer 中找到了一些填充。

     System_Timer_Initialize_Timer (TMR_0、 TMR_RST_0、SYS_tmrs); //初始化计时器0

    在这里,我将 TMR_RST_0宏扩展到了不同的值,如11、9。 因此、我发现当我增加到11时、检测时间变慢、当我增加到9时、检测计时器变快。

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

    是否已修复 PJSEL0设置? 切斯特的观察表明、这可能是根本原因。