2

我有一个 Arduino Mega,想将 SDA&SCL 引脚从 A4&A5 更改为 A14&A15。

这样我就可以从那里控制 I2C LCD,我有库,但看不到引脚设置在哪里;但是,我会想象它们必须设置在某个地方......

我是 C++ 和库的新手,所以我的眼睛可能只是跳过它

4

3 回答 3

2

标准 i2c 库使用与特定引脚绑定的专用硬件。要以这种方式发送一个字节,您的程序将一个字节写入某个寄存器(这将只需要几个时钟周期),硬件负责将 SDA 引脚上的位逐个移出并切换 SCL自动固定。

您可能正在寻找的是软件 i2c,它在软件中实现了相同的协议,并且应该允许您使用任意引脚。这个库很可能比标准库慢得多并且使用更多资源:当您的程序想要发送一个字节时,该库必须提取一个位,查找您定义的数据引脚,将位值写入该引脚引脚,查找您为时钟定义的引脚,切换该引脚,稍等,再次切换时钟等等,所有这些都在软件中。这将花费大量时间,但也许您不在乎您的应用程序。

于 2014-05-22T03:16:27.583 回答
1

I 2 C 引脚在 AVR 的硬件中设置;除了使用完全不同的 I 2 C 总线之外,没有其他方法可以更改它们,假设 MCU 甚至首先有任何其他总线。

如果您想使用硬件中可用的引脚以外的引脚,那么您需要找到一个库,该库可以通过普通 GPIO 对 I 2 C 进行位爆炸,然后修改 LCD 库以使用该库而不是硬件 I 2 C。

于 2014-05-22T03:01:20.187 回答
1

这个问题很老了,但我想推荐这个LiquidCrystal Software I2C库,因为我没有在网上找到很多其他工作资源,而且这个库在软件中实现了 I2C 协议,所以你可以使用你的 Arduino 的任何输入/输出引脚.

只需在创建 LiquidCrystal_I2C 对象时将 SDA 和 SCL 引脚指定为第 4 和第 5 个参数,然后具有与标准 LiquidCrystal_I2C 库相同的功能。

因此,例如,如果您想使用引脚 3 和 4,分别作为 SDA 和 SCL,您的问候语将是:

// https://github.com/francesco-scar/LiquidCrystal_Software_I2C
// Based on https://github.com/johnrickman/LiquidCrystal_I2C project

#include <LiquidCrystal_Software_I2C.h>     // Include library

LiquidCrystal_I2C lcd(0x3f, 16, 2, 3, 4);   // Set the LCD address to 0x27 for a 16 chars and 2 line display

void setup() {
  lcd.init();                               // LCD initialization
  lcd.backlight();                          // Turn on backlight
  lcd.print("Hello, world!");               // Print Hello, world!
}

void loop() {
}
于 2021-04-06T08:38:24.040 回答