Agora eu percebi que as linhas de dados e relógio I 2 C (SDA e SCL) devem ter resistores pullup.
Bem, eu criei alguns relógios usando o DS1307 RTC (consulte a folha de dados ) de acordo com o esquema abaixo. Observe que eu omiti os dois resistores de pullup.
Ambos os relógios funcionam bem, um deles está funcionando há mais de 3 meses. Como isso é possível? De qualquer forma, eu queria saber:
O que acontece quando os pullups I 2 C são omitidos?
É provável que a falta de pullups danifique algum desses dois CIs na minha placa?
Estou procurando respostas que abordem meu caso específico de conectar o ATmega328P a um DS1307 RTC, como nos esquemas que forneci, mas se a pergunta não for muito ampla, seria útil saber o que acontece quando os pullups são geralmente omitidos. , ou seja, em outros cenários da operação I 2 C.
PS. Pesquisei na Internet para encontrar a resposta, mas só consegui encontrar artigos sobre o dimensionamento dos pullups.
Atualização: estou usando o Arduino IDE 1.03 e meu firmware lida com o RTC usando a biblioteca DS1307RTC Arduino (por meio de suas funções RTC.read()
e RTC.write()
). Essa lib, por sua vez, costuma Wire.h
conversar com o RTC.
Atualização 2: Abaixo estão uma série de capturas de escopo que tirei para ajudar a explicar como o I 2 C está funcionando sem os pullups externos.
Atualização 3 (após a adição de I 2 C pullups): Abaixo está outra série de fotos de osciloscópio que eu fiz depois de adicionar resistores de pull up adequados (4K7) às linhas I 2 C (na mesma placa). O tempo de subida caiu de cerca de 5 µs para 290 ns. I 2 C está muito mais feliz agora.