Baru saja saya menyadari bahwa data I 2 C dan garis jam (SDA dan SCL) harus memiliki resistor pullup.
Yah, saya telah membangun beberapa jam menggunakan DS1307 RTC (lihat lembar data ) menurut skema di bawah ini. Perhatikan bahwa saya telah menghilangkan kedua resistor pullup.
Kedua jam bekerja dengan baik, salah satunya bekerja selama lebih dari 3 bulan sekarang. Bagaimana mungkin? Bagaimanapun, saya ingin tahu:
Apa yang terjadi ketika pullup I 2 C dihilangkan?
Apakah kekurangan pullups mungkin merusak salah satu dari dua IC di papan saya?
Saya mencari jawaban yang membahas kasus spesifik saya menghubungkan ATmega328P ke DS1307 RTC seperti dalam skema yang saya berikan, tetapi jika pertanyaannya tidak terlalu luas, akan sangat membantu untuk mengetahui apa yang terjadi ketika pullup dihilangkan secara umum , yaitu, dalam skenario lain dari operasi I 2 C.
PS. Saya memang mencari di internet untuk menemukan jawabannya, tetapi bisa saja menemukan artikel tentang penentuan dimensi penarikan.
Pembaruan: Saya menggunakan Arduino IDE 1.03 dan firmware saya menangani RTC menggunakan lib DS1307RTC Arduino (melalui fungsinya RTC.read()
dan RTC.write()
). Lib itu pada gilirannya digunakan Wire.h
untuk berbicara dengan RTC.
Pembaruan 2: Di bawah ini adalah serangkaian pemotretan lingkup yang saya ambil untuk membantu menjelaskan bagaimana I 2 C bekerja tanpa pullup eksternal.
Perbarui 3 (setelah I 2 C pullups ditambahkan): Di bawah ini adalah serangkaian tembakan lingkup yang saya ambil setelah menambahkan resistor pullup yang tepat (4K7) ke garis I 2 C (di papan yang sama). Waktu naik turun dari sekitar 5 μs menjadi 290 ns. I 2 C jauh lebih bahagia sekarang.