与 MSP430 Launchpad 的 I2C 通信
在庞大的嵌入式应用系统中,没有哪个微控制器可以独自完成所有活动。在某些时候它必须与其他设备通信以共享信息,有许多不同类型的通信协议可以共享这些信息,但最常用的是 USART、IIC、SPI 和 CAN。每种通信协议都有自己的优点和缺点。现在让我们关注 I2C 部分,因为这是我们将在本教程中学习的内容。
什么是 I2C 通信协议?
IIC 一词代表“内部集成电路”。它通常表示为 I2C 或 I 平方 C,甚至在某些地方表示为 2 线接口协议 (TWI),但它们的意思都是一样的。 I2C 是一种同步通信协议,意味着共享信息的两个设备必须共享一个公共时钟信号。它只有两条线来共享信息,其中一条用于时钟信号,另一条用于发送和接收数据。
I2C 通信如何工作?
I2C 通信最先由 Phillips 推出。如前所述,它有两根电线,这两根电线将连接两个设备。这里一个设备称为主设备,另一个设备称为从设备。通信应该并且将始终发生在两个主站和从站之间。 I2C 通信的优点是一个主机可以连接多个从机。
完整的通信通过这两条线进行,即串行时钟 (SCL) 和串行数据 (SDA)。
串行时钟 (SCL):与从机共享主机生成的时钟信号
串行数据 (SDA):在主机和从机之间来回发送数据。
在任何给定时间,只有主机才能启动通信。由于总线上有多个从机,主机必须使用不同的地址来引用每个从机。当被寻址时,只有具有该特定地址的从机将回复信息,而其他人则保持退出。这样我们就可以使用同一条总线与多个设备进行通信。
I2C 的电压电平没有预定义。 I2C通信是灵活的,即5v电压供电的设备可以用5v进行I2C通信,3.3v的设备可以用3v进行I2C通信。但是,如果两个运行在不同电压下的设备需要使用 I2C 进行通信怎么办? 5V I2C 总线不能连接 3.3V 设备。在这种情况下,电压转换器用于匹配两条 I2C 总线之间的电压电平。
有一些条件可以构成交易。传输初始化从 SDA 的下降沿开始,这在下图中被定义为“开始”条件,其中主机将 SCL 保持为高电平,同时将 SDA 设置为低电平。
MSP430 中的 I2C:控制 AD5171 数字电位器
Energia IDE 是对我们的 MSP430 进行编程的最简单的软件之一。它与 Arduino IDE 相同。您可以在此处了解有关使用 Energia IDE 开始使用 MSP430 的更多信息。
因此,要在 Energia IDE 中使用 I2C,我们必须只包含 wire.h 头文件。引脚声明(SDA 和 SCL)在 wire 库中,所以我们不需要在设置函数中声明。
可以在 IDE 的示例菜单中找到示例示例。下面解释了其中一个示例:
此示例说明如何控制通过 I2C 同步串行协议进行通信的 Analog Devices AD5171 数字电位器。使用 MSP 的 I2C 线库,数字电位器将逐步通过 64 级电阻,使 LED 变暗。
首先,我们将包含负责 i2c 通信的库,即 wire 库
#include <Wire.h>void setup() { Wire.begin(); } byte val = 0; void loop() {Wire.beginTransmission(44); // transmit to device #44 (0x2c) Wire.write(byte(0x00)); // sends instruction byte Wire.write(val); // sends potentiometer value byte Wire.endTransmission(); // stop transmitting val++; // increment value if (val == 64) { // if reached 64th position (max) val = 0; // start over from lowest value } delay(500);}
|