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.

[参考译文] MSP430FR5969:使用附加湿度传感器实现 TIDA-00524数据记录器

Guru**** 2620655 points

Other Parts Discussed in Thread: TIDA-00524, MSP430FR5969

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/672078/msp430fr5969-implementation-of-the-tida-00524-datalogger-with-additional-humidity-sensor

器件型号:MSP430FR5969

您好!

我正在尝试使用  附加湿度传感器来实现 TIDA-00524数据记录器。 我的湿度传感器只是一个电阻与环境湿度成比例的电阻器。 如果您测量 电阻、您基本上会测量湿度。 为此、我使用了一个简单的串联 RC 电路。 我测量此电路的时间常数的方法与 J.Davies 在他的"MSP430微控制器基础知识"一书中所述的方法完全相同。 我所编写的代码只是对书中代码的修改、但用于 MSP430 FR5969微控制器。 我已经对其进行了多次单独测试、并对其工作进行了测试。 您可以找到括起来的源代码。  

当我将代码与原始数据记录器冷链代码集成时、它仍会测量电阻值、但直到我尝试使用智能手机读取数据为止。 在进行一些故障排除后、我发现 RF430_I2C.c 文件中的执行在此行停止:

_bis_SR_register (LPM_MODE + GIE);  

您还可以找到随附的集成代码。

有没有人知道集成代码为什么不再起作用? 如果有任何建议、我会很感激、因为我有几个假设、为什么它不起作用、但我不确定其中的任何一个。 所以我的想法是、要么是 I2C 通信问题、要么是时钟系统设置问题。 最初、时钟设置在冷链代码中初始化、但随后我对代码中的时钟使用其他设置。

我在 TI Designs 论坛上做过类似的主题、但建议在这里提问。

非常感谢、

Vlad

e2e.ti.com/.../RC_5F00_time_5F00_constant_5F00_book_5F00_pins-0-and-1.c

e2e.ti.com/.../Integrated-RH-sensor-code.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vlad、
    在更详细地了解您的代码之前、我想更好地理解您关于代码执行停止的说法意味着什么。 这是否意味着 CPU 在"_bis_SR_register (LPM_MODE + GIE)"处暂停、并且永远不会再次唤醒?
    在本例中、我将看到以下可能的根本原因:
    -中断源旨在将 MSP 从输入的 LPM_MODE 唤醒、可通过新添加或修改的代码禁用。
    -中断不会发生,因为中断源需要一个时钟源,在某些其他代码段/函数中已经关闭了该时钟源。
    -如果使用某些 IO 中断、IO 功能可能已被修改、因此不再提供相应的功能。

    我建议您检查原始代码、功能代码中的哪个中断在给定指令"_bis_SR_register (LPM_MODE + GIE)"下进入 LPM 后唤醒器件、并检查在修改代码的情况下为什么不会发生这些中断。

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

    非常感谢您的反馈。 是的、恰好是在尝试从该行读取传感器数据后、CPU 在该行停止。


    "中断不会发生、因为中断源需要一个时钟源、在某些其他代码段/函数中已经关闭了该时钟源。" 我想这可能是一个问题。 在原始数据记录器代码中、时钟初始化如下:

    CSCTL0_H = 0xA5;
    CSCTL1 |= DCOFSEL0 + DCOFSEL1;//设置最大值 DCO 设置= 8MHz
    CSCTL2 = SELA_VLOCLK + SELS_3 + SELM_3;//设置 ACLK = DCO、VLOCLK = 10kHz
    CSCTL3 = DIVA__1 + DIVS__1 + DIVM_1;//设置 VLOCLK /1 SMCLK = DCO /32 = 250kHz
    CSCTL4 &=~LFXTOFF; //启用 LFXT1

    操作

    CSCTL5 &=~LFXTOFFG; //清除 XT1故障标志
    SFRIFG1 &=~OFIFG;
    } while (SFRIFG1&OFIFG); //测试振荡器故障标志
    CSCTL0_H = 0; //锁定 CS 寄存器
    基本上、DCO 被用作 ACLK 的基准。

    在我已经写入的函数中、时钟被重新初始化、因为我需要更高的时钟频率来实现精确采样:
    CSCTL0 =(CSKEY);//访问寄存器

    CSCTL1 =(DCORSEL|DCOFSEL_4);// DCOFSEL_4 = 0x0040;设置16MHz DCO 参考时钟

    CSCTL2 =(SELS _3);// SELS _3 = 0x0030;选择 DCO 作为 SMCLK 的时钟源
    CSCTL3 =(DIVS__1);
    CSCTL4 =(LFXTOFF|VLOOFF|HFXTOFF);//关闭除 SMCLK 之外的所有时钟源

    您认为这可能会导致问题吗? 如果我要使用连接到 MSP430FR5969引脚42和43 (HFXOUT 和 HFXIN)的外部高频时钟源、该怎么办? 如果我理解正确的话、在这个情况下、DCO 被用作原始代码中的一个基准、将不会受到影响、并且中断将开始正常工作。 它是否正确?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Vlad、

    非常感谢您提供的更多信息。

    当然、使用来自外部晶体或陶瓷谐振器的高频也可能替代 DCO。 但是、如果您不需要比 DCO 更精确的时钟源、DCO 是最安全和最可靠的解决方案、当然、它还可以为外部器件/秒节省成本 因此、我认为这不会解决问题。

    我会检查代码和设置、以了解时钟系统配置的差异。 查看上一篇文章中的时钟设置、我看到原始代码正在启用32kHz 振荡器。 我认为、这是出于目的发生的、这意味着原始代码中的某些功能需要它。 通常、32kHz 时钟用于使器件能够在 LPM3模式下运行、并定期使用 RTC 精确时序唤醒器件、以执行某些活动。

    在代码中、您将禁用32kHz 振荡器。 这是我首先要研究的问题、将32kHz 更改为活动、看看问题是否仍然存在。

    此致

    Peter

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

    您好、Peter、

    很抱歉我的回答很长。 我修复了时钟系统设置、现在实际上我编写的函数中甚至没有任何设置。 但是、当我尝试从智能手机读取数据时、数据记录器仍然不工作。 我将对其进行一点澄清。 我在 Android 手机上使用 NFC 工具应用程序。 当我在仅温度模式下读取数据时、它工作正常。 当我将模式更改为温度和湿度时、PCB 卡在您无法再读取数据或写入任何命令的意义上。 如果我移除电池、通过 JTAG 接口为电路板供电并运行软件、那么在 PCB 卡死后、我暂停程序执行、我可以看到程序在"RF430_I2C.c"文件中的行停止、我之前提到过这一点。 如果我将代码包含在此处修改的 CS 设置中、请执行以下操作:

    e2e.ti.com/.../Integrated-RH-sensor-code_5F00_CS-modified.zip

    此致、

    Vlad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vlad、
    因此、如果我理解正确、它仍然是旧状态、这意味着、一旦您将附加代码插入到最初的仅温度示例中、代码执行就会在您提到的位置停止。 是这样吗?

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

    您好、Peter、

    是的、您已经正确理解了它。

    此致、

    Vlad

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

    当与 CC430通信时、FR6989看起来会停止运行。 是否可以使用示波器测量 I2C 上的波形并与仅温度模式进行比较?

    此致
    Kc
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vlad、
    如果您仍在努力解决通信问题、可参阅应用报告 slaa734a www.ti.com/.../slaa734a.pdf 、其中提供了有关如何使用 MSP430 USCI 或 eUSCI 模块跟踪与通信相关的问题的大量有用建议。 请尝试按照建议的调试步骤进行操作。

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

    您好、Peter、

    非常感谢你的帮助。 我查看了应用手册、然后从一开始就再次检查了代码、发现了错误、这真的很愚蠢。 在两个分配之前缺少按位和运算符、因此寄存器 P1SEL0和 P1SEL1在我的代码中被重新配置、而在原始代码中、它们被用于 I2C 通信。

    此致、

    Vlad

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

    您好、Vlad、

    非常感谢您的澄清!

    此致

    Peter