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.

[参考译文] MSP432P401R:MSP432与 Arduino MMAN8452Q 加速计 I2C 问题

Guru**** 2540720 points
Other Parts Discussed in Thread: ENERGIA

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/586712/msp432p401r-msp432-with-arduino-mma8452q-accelerometer-i2c-problem

器件型号:MSP432P401R
主题中讨论的其他器件:Energia

大家好、我最近开始了一个需要加速计来收集数据的项目。 我们挑选了 MMA 8452Q Arduino 加速计、计划使用 Energia 弥补 TI 和 Arduino 组件之间的差距。 使用教程中的配置和此处的简单设置。 并使用 Energia 参考页面将 Arduino 和 msp432之间的引脚关联起来。  

因此、除了 SCL、我们还有6.5、而不是 SDA、我们有6.4。 然后是接地和3.3V。 使用此设置、串行监视器下方的代码不显示任何内容。 我想知道 TI 器件和 Arduino 器件之间是否存在任何其他差异导致此设置无法正常工作。 我们已将接头连接到加速计的分线板、因此我不认为这是连接质量问题。  

#include //必须包含用于 I2C
#include 的线库 //包括 SFE_MMA8452Q 库

//通过创建 MMA8452Q 类的实例开始使用该库
//类。 我们将其称为"accel"。 这就是我们将在
这里从//引用的内容。
MMA8452Q accel;

//设置函数只需串行启动并初始化
//加速计。
void setup()
{
Serial.begin(9600);
Serial.println("MMA8452Q 测试代码!");

//选择您的探险!
当涉及//初始化 MMAN8452Q 时、有几个选项:
// 1。 默认初始化。 这将设置加速计//
满量程范围为+/-2g、输出数据速率
为// 800 Hz (最快)。
accel.init();
// 2. 使用满量程设置进行初始化。 您可以设置比例
// 使用 SCALE_2G、SCALE_4G 或 SCALE_8G 作为值。
// 这将分别将刻度设置为+/-2g、4g 或8g。
//accel.init(SCALE_4G);//如果您愿意,请取消注释
// 3. 使用满量程和数据速率设置进行初始化。 如果您
// 希望控制加速计的生产速度
// 数据使用第二个参数中的以下选项之一:
// ODR_800、ODR_400、ODR_200、ODR_100、ODR_50、 ODR_12、
// ODR_6或 ODR_1。
// 设置为800、400、200、100、50、 12.5、6.25或1.56 Hz。
//accel.init(SCALE_8G、ODR_6);
}

//循环函数将只检查
来自//加速计的新数据,并打印出来(如果可用)。
void loop()
{
//使用 accel.available ()函数等待
加速计中的新数据//。
if (accel.available ()
){
//首先,使用 accel.read()读取新变量:
ACCEL.READ();

// accel.read()将更新两组变量。
//* int's x、y 和 z 将存储有符号12位值
//读出加速计。
//* float cx、cy 和 cz 将存储计算值
//从这些12位值加速。 这些变量
//以 g 为单位。
//检查下面的两个函数声明以获得一个示例
//了解如何使用这些变量。
printCalculatedAccels();
//printAccels();//取消注释以打印数字读数

//库还支持纵向/横向检测
MA8452Q 的//。 请查看的此函数声明
//一个如何使用它的示例。
printOrientation();

serial.println();//每次打印新行
。}
}

//该函数演示如何使用 accel.x、accel.y 和
// accel.z 变量。
//在使用这些变量之前,必须调用 accel.read()
//函数!
void printAccels()
{
Serial.print (accel.x, 3);
Serial.print ("\t");
Serial.print (accel.y, 3);
serial.print ("\t");
serial.print (accel.z、3);
serial.print ("\t");
}

//此函
数演示如何使用 accel.cx、accel.cy、//和 accel.cz 变量。
//在使用这些变量之前,必须调用 accel.read()
//函数!
void printCalculatedAccels()
{
Serial.print (accel.cx,3);
Serial.print ("\t");
Serial.print (accel.cy, 3);
serial.print ("\t");
serial.print (accel.cz、3);
serial.print ("\t");
}

//此函

数演示如何使用 accel.readPL()//函数读取//传感器的纵向/横向状态。
void printOrientation()
{//
accel.readPL()将返回一个包含
传感器方向信息//的字节。 它可以是
//纵向 U、纵向 D、横向 R、横向 L 或
//锁定。
字节 pl = accel.readPL();
switch (pl)
{
大小写纵向:
serial.print ("纵向向上");
中断;
案例纵向_D:
serial.print ("纵向向下");
中断;
案例横向_R:
serial.print ("横向右侧");
中断;
案例横向_L:
serial.print ("左横向");
中断;
外壳锁定:
serial.print ("平面");
中断;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否验证 I2C 线路上的任何活动? 引脚6.4/6.5是 eUSCI 外设的 USCB1实例化。 我会检查您的外设配置以确定其设置是否正确。

    此致、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 加速计的分线板有6个引脚。 两个中断引脚、接地和3.3V、然后它具有串行时钟和串行数据 SCL 和 SDA。 我使用 Energia 引脚映射作为参考、以了解 TI 电路板上的哪些引脚会与这些引脚相对应。 我还可以如何验证我是否使用了正确的引脚?

    我还应该如何验证 I2C 线路上的活动。 我可以使用 DMM 还是需要示波器或其他器件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    范围。 SCL/SDA 线路上是否有上拉电阻?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我在两条线路上都有330欧姆的上拉电阻。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我设法找到了一个示波器、线路上有一些活动。 我保存了示波器的读数。 这是典型的吗?

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

    无论是上升时间还是噪声、信号质量都非常差。 在第一篇文章中查看您的图片时、您会发现电阻器与数据线串联、而不是配置为上拉电阻器。 这将解释示波器迹线上显示的噪声和缓慢上升时间以及您遇到的困难。

    正确的配置会使数据线直接位于 Launchpad 和加速计之间。 然后、一个电阻器应从这些线路中的每条线路连接到正电源轨。 电阻器的值看起来也有点低、大约4.7K 的值可能会更好。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有道理。 以确保我正确理解上拉电阻器。 它将是一个4.7K、从 SCL 和 SDA 单独进入加速计的3.3V 引脚?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、正确。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我解决了这个问题。 分线板底部有一个 SA0连接。 打开或关闭将更改程序查找数据所需的地址。 只是在计划中更改了这个、结果很好、感谢大家的所有建议。