arduino - 使用 avr lib 时,Arduino 无法识别外部 EEPROM
问题描述
我正在尝试使用 Arduino MEGA 2560 和 24LC256 Microchip EEPROM 在外部 EEPROM 中写入数据。我不能使用标准的 Wire 库,因为我的地址是 15 位长,我的页面是 64 字节长,但 Wire 库只有一个 32 字节的缓冲区。
因此,我尝试下载 AVR 库以更好地控制正在发生的事情,但我遇到了一个我不明白的问题:程序看不到连接的 EEPROM(即,如果它是或现在,它的行为方式相同未连接到 Arduino)。
问题是我知道我的芯片/电缆正在工作,因为我在使用“Scan_For_I2C”程序时能够看到 EEPROM。
无论如何,我不得不稍微修改一下库以允许它编译(将所有内联函数移动到 .h 中,因为它们最初位于 .c 中)但我已经能够在这个函数调用中查明问题:
//! Send an I2C start condition in Master mode
inline void i2cSendStart(void)
{
// send start condition
outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWSTA));
TWCR &= ~(1<<TWSTA);
}
在哪里 :
#ifndef inb
#define inb(addr) (addr)
#endif
和
#ifndef BV
#define BV(bit) (1<<(bit))
#endif
我可以通过调用这个来检测问题:
//! Get current I2c bus status from TWSR
inline u08 i2cGetStatus(void)
{
// retrieve current i2c status from i2c TWSR
return( inb(TWSR) );
}
有关我编写的代码、使用的库、EEPROM 的接线和芯片的数据表的完整详细信息,请使用此链接在 Mediafire上下载存档
感谢任何可能提供帮助的人
编辑:我在这里找到了 I2C 代码的扫描。
解决方案
推荐阅读
- python - GAMS 和 Python:如何在循环运行 GamsJob 时重写输出 gdx 文件
- mysql - 如何使用lua连接到主机上的MYSQL
- ios - 如何在 ios swift3 中更改特定的单元格颜色
- mysql - 如何使用 mysql 数据库列之一作为 VB.NET 的变量
- javascript - 从引导导航下拉菜单中选择下拉菜单以进行悬停
- java - java IntStream不能使用collect(Collectors.toList()),编译出错,为什么?
- python - 可以非懒惰地调用 Python 生成器吗?
- python - 与 scipy.integrate.trapz 进行数值积分会返回结果,但 scipy.integrate.simps 不会
- css - 如何在角度 6 上动态更改 css 类属性值?
- javascript - 页面未在节点中重定向