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.

[参考译文] MSP430FR6989:在 Energia 中使用外部 Vref 和 ADC 过采样

Guru**** 2540720 points
Other Parts Discussed in Thread: ENERGIA, LMP91000, MSP430FR6989

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/653051/msp430fr6989-using-external-vref-and-adc-oversampling-in-energia

器件型号:MSP430FR6989
主题中讨论的其他器件:EnergiaLMP91000

你(们)好

我不熟悉编码、我使用 Energia 对 MSP4306989 Launchpad 进行编程。 我对 CCS 感到不舒服。

我无法在 Energia 中找到有关外部 Vref 和 ADC 过采样的大量信息。 我已删除将 P1.1用于外部 Vref 的按钮。 我有一个使用 LMP91000的气体传感器、Vref 为2.048V。 来自传感器板的 MENB1-MENB4被连接至 P9.0、P9.1、P9.5和 P9.6。 气体的 V-out 连接到 launchpad 上的 P8.4至 P8.7。 中的2.048 Vref 连接到 launchpad 的 P1.1。

请指导我如何使用外部 Vref、并使用 Energia 对 ADC 进行12位至16位的过采样。 我在一些论坛上读到、我需要对 Energia 库进行一些更改。

此致

Vijay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最简单的方法是将 CCS 与示例代码一起使用。 它应该具有一个用于使用 ADC 的引信。 在使示例代码正常工作后、您应该能够根据需要进行任何更改。

    与在微控制器中使用任何 ADC 一样、只需设置适当的寄存器即可。 它没有任何复杂之处、只需查看此处器件的用户手册(可跳至865页的第34章): www.ti.com/.../slau367o.pdf

    对于过采样:将数学放在一边、您需要针对每个额外的分辨率位进行4倍的采样。 因此、要获得额外的4位(从12位到16位)、您需要以更快的速度对4^4进行采样(256x)、这对于最大200kSPS 的内置 ADC 采样不应该是问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在互联网上进行了大量搜索、但在 Energia 中找不到任何有关使用外部 ADC 和过采样的有用示例。 CCS 中的示例显示、我需要设置时钟并直接从 ADC 读取样本。 Energia 库不具有设置采样频率、时钟等的访问权限 由于我不是一名常规编程人员、CCS 对我来说是一个更具挑战性的环境。 Energia 对于我的应用非常简单、我可以在 Energia 中使用一些帮助。

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

    Energia 涉及一个高级 API、用于非常简单的应用、无需对低级寄存器进行许多修改。 虽然您可以使用 Energia 直接更改寄存器、但您的项目非常复杂、因此您确实应该使用 CCS。 按照您的建议尝试和修改 Energia 库函数会更加复杂。 正如 Mike 提到的、有几个示例可供您开始使用。 下面是使用 MSP430对 ADC 进行过采样的应用手册 :www.ti.com/.../slaa694a.pdf

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

    谢谢 Ryan。 我几乎完成了编程、但对于这个过采样、我需要做的是。 我将再次尝试 CCS、但就像从头开始一样。

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

    能否让我指向 MSP430FR6989的示例代码、该代码可以从地址0x48上的 I2C 从器件的特定寄存器(0x10)读取数据? 我找不到我的 Launchpad 的任何示例
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vijay、

    这是写入和读取序列的组合、我建议将代码示例包 www.ti.com/.../slac668中的 msp430fr69xx_euscib0_i2c_master_multislave.c (不带多从器件)和 msp430fr69xx_euscib0_i2c_10.c 组合在一起

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

    尊敬的 Ryan

    我阅读您的指南"MSP MCU I2C 入门指南"。 我正在尝试使用 driverlib。 我正在尝试从从器件地址0x77的内部地址0xd0进行读取。 请告诉我以下顺序是否正确。

    #include "driverlib.h"
    #define SLAVE_ADDRESS 0x77
    #define INT_ADDRESS 0xd0

    //初始化主设备
    EUSCI_B_I2C_initMasterParam param ={0};
    param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;
    param.i2cClk = CS_getSMCLK ();
    param.datarate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS;
    param.byteCounterThreshold = 1;
    param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP;
    EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、param);

    //发送启动序列并发送 R/W 位为低电平的从器件地址
    EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);
    EUSCI_B_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Transmit 模式);

    //发送寄存器编号
    EUSCI_B_I2C_masterSendSingleByte (EUSCI_B0_BASE、INT_ADDRESS);

    //再次发送启动序列(重复启动)
    EUSCI_B_I2C_masterReceiveStart (EUSCI_B0_BASE);

    发送 R/W 位为高电平的从器件地址
    EUSCI_B_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Receive_mode);
    EUSCI_B_I2C_masterSendSingle (EUSCI_B0_BASE、SLAVE_ADDRESS);

    读取数据字节
    EUSCI_B_I2C_slaveGetData (slave_address);

    发送停止序列
    EUSCI_B_I2C_DISABLE (EUSCI_B0_BASE);