刚才我意识到 I 2 C 数据和时钟线(SDA 和 SCL)必须有上拉电阻。
好吧,我已经根据下面的示意图使用 DS1307 RTC(参见数据表)构建了几个时钟。请注意,我省略了两个上拉电阻。
两个时钟工作正常,其中一个现在工作了 3 个多月。这怎么可能?无论如何,我想知道:
当 I 2 C 上拉被省略时会发生什么?
没有上拉可能会损坏我板上的这两个 IC 中的任何一个吗?
我正在寻找解决我将 ATmega328P 连接到 DS1307 RTC 的具体情况的答案,就像我提供的原理图一样,但是如果问题没有变得太宽泛,那么了解通常省略上拉时会发生什么会很有帮助,即在I 2 C 操作的其他情况下。
PS。我确实搜索了网络以找到答案,但只能找到有关测量引体向上尺寸的文章。
更新:我使用的是 Arduino IDE 1.03,我的固件使用DS1307RTC Arduino 库(通过其函数RTC.read()
和RTC.write()
)处理 RTC。该库反过来用于Wire.h
与 RTC 通信。
更新 2:以下是我拍摄的一系列范围照片,以帮助解释 I 2 C 在没有外部上拉的情况下如何工作。
更新 3(在添加 I 2 C 上拉后):下面是我在 I 2 C 线(在同一块板上)添加适当的 (4K7) 上拉电阻后拍摄的另一系列示波器照片。上升时间从大约 5 µs 下降到 290 ns。I 2 C 现在快乐多了。