Только сейчас я понял, что линии данных и синхронизации I 2 C (SDA и SCL) должны иметь подтягивающие резисторы.
Ну, я построил пару часов с помощью DS1307 RTC (см технического описания ) согласно схеме ниже. Обратите внимание, что я опустил оба подтягивающих резистора.
Обе часы работают нормально, один из них работает уже более 3 месяцев. Как это возможно? В любом случае я хотел знать:
Что происходит, когда подтягивания I 2 C опускаются?
Может ли отсутствие подтягиваний повредить какую-либо из этих двух микросхем на моей плате?
Я отвечаю на вопросы, которые касаются моего конкретного случая подключения ATmega328P к RTC DS1307, как в приведенных мною схемах, но если вопрос не станет слишком широким, было бы полезно узнать, что происходит, когда выпадающие выпуски вообще опущены в других сценариях работы I 2 C.
PS. Я искал в Сети, чтобы найти ответ, но мог просто найти статьи о размерах подтягиваний.
Обновление: я использую Arduino IDE 1.03, и моя прошивка обрабатывает RTC, используя DS1307RTC Arduino lib (через ее функции RTC.read()
и RTC.write()
). Эта библиотека в свою очередь использует Wire.h
для общения с RTC.
Обновление 2: Ниже приведена серия снимков, которые я сделал, чтобы объяснить, как работает I 2 C без внешних подтягиваний.
Обновление 3 (после добавления подтягиваний I 2 C): Ниже приведена еще одна серия снимков прицела, которые я сделал после добавления надлежащих (4K7) подтягивающих резисторов к линиям I 2 C (на той же плате). Время нарастания уменьшилось с 5 мкс до 290 нс. Я 2 С гораздо счастливее сейчас.