I²C Adresse auslesen / Bestimmen? DS1307 oder Tiny RTC-Modul!

Hallo,

hat jemand ein Program-Code um die Adressen auf dem I²C Bus "abzuklappern"? Um festzustellen auf welcher Adresse ein Baustein Antwortet ...

Ärgere mich gerade mit einer RTC Clock rum, Single Chip DS1307 und habe das blöde Gefühl das das Lib nicht mit der Adresse klar kommt. Das gleiche habe ich mit den Tiny RTC-Modul DS1307 wo 2 Stk. Problemlos ihren Dienst tun aber 3 Stk. nicht wollen, bzw. nicht erkannt werden. Kann natürlich sein das die defekt sind aber es stutzt mich das ich den Chip mit Quarz nicht zum laufen bekomme. Der Bus ist in betrieb den das läuft ein LCD Problemlos.

Wenn jemand eine eingebung für mich hätte währe ich sehr dankbar ....

Gruss Michael

Hallo Michael,

-> http://playground.arduino.cc/Main/I2cScanner#.UzyI3I_XMgw

Gruß Reinhard

Jeder I2C Slave braucht seine Adresse. Bei den meisten ICs kann die I2C Adresse durch 2-3 Eingänge in einem kleinen Bereich eingestellt werden. der DS1307 hat keine solche Eingänge. Darum kannst Du auch nur 1 DS1307 in einem I2C Bus beteiben (außerdem habe ich keine Ahnung zu was man mehr als 1 RTC braucht). Grüße Uwe

MAC_GERMANY: Wenn jemand eine eingebung für mich hätte währe ich sehr dankbar ....

Vielleicht ist in Deiner Schaltung mit den PullUp-Widerständen am I2C-Bus etwas nicht in Ordnung?

Ist das DS1307 IC das einzige I2C-Gerät am I2C-Bus? Oder sind noch andere I2C-Geräte vorhanden und am I2C-Bus aktiv? Wie lang sind die Leitungen ungefähr, mit denen das DS1307 IC angeschlossen ist? Sind vielleicht zusätzliche PullUp-Widerstände vorhanden, die nicht in der Schaltung eingezeichnet sind? Ist sonstige andere Hardware gleichzeitig am Arduino angeschlossen? Wie hoch ist die Batteriespannung der von Dir angeschlossenen Pufferbatterie?

Hallo,

@Reinhard - Klasse, Danke - hatte ich nicht gefunden aber gesucht :)

@Uwe, klar kann ich nur einen betreiben :) es sind 5 gleiche aufbauten wovon 3 keine RTC Verbindung aufbauen aber das I²C LCD geht aber.

@Jurs - Mit und ohne Pull-UP geht es nicht. Was mich da Stutzig macht ist das ich das LCD betreibe ohne Widerstände. Verbindung ist kurz >3cm. Spannung am BAT Eingang ist um die 3.5V muss aber auch ohne gehen. Wenn ich es abfrage:

if (RTC.isrunning())

bekomme ich eine ein FALSE zurück, wie geschrieben einige gehen. Werde es nachher nochmal aufbauen und schauen was da flattert.

Danke fürs lesen ... Michael

Hallo,

MAC_GERMANY:
Mit und ohne Pull-UP geht es nicht.

Lt. Datenblatt werden Pullups gebraucht. Vielleicht hast Du die schon am I²C-Display und dort nur nicht bemerkt?
Falls es wirklich ohne geht, sollte Dich nicht stutzig machen, das drei nicht gehen, sondern das zwei gehen.

MAC_GERMANY:
Verbindung ist kurz >3cm.

Meinst Du wirklich größer 3cm oder soll das “kurz <3cm” heißen?

Interessant wäre Dein kompletter Aufbau und der Typ des Displays und I²C-Expanders am Display.

Gruß,
Ralf

Eine Batteriespannung von 3,5V für ein DS1307 kann zuviel sein, da die Umschaltung auf Betteriebetrieb bei 1,25* Ubat erfolgt. Bei einer etwas niedrigen Betriebsspannung (unter 4,5V) ist die DS1307 ständig im Batteriebetrieb. Besser eine 3,0V Li Batterie verwenden. Grüße Uwe

Hallo, ich würde den I2C-Bus erst einmal richtig aufbauen. Dazu ist es zwingend nötig, das PullUpWiederstände in der richtigen Größe zu installieren. Die angeschlossenen Geräte werden über die PlusLeitung versorgt, gegen die auch die Wiederstände geschaltet sind. Bei mehr- als einem Slave ist es angeraten, KoppelKondensatoren zu verwenden.

Wenn man das dann richtig aufgebaut hat, dann hat man eine " Definition" für I2C-Bus. Dann wäre es nicht schlecht, zum probieren, die originale Arduino RTC-Lib zu nutzen. Dann würde ich alle RTC´s an einem Arduino betreiben, am dem schon eine RTC funktioniert. Ohne I2c-Display- Ausgabe über seriell. Gruß und Spaß dabei Andreas

Da ich auch demnächst solch ein RTC I2C Modul in Betrieb nehmen möchte: Könnte es hier evtl. zu Problemen führen, daß der I2C Bus auf der Arduinoseite mit 5V läuft, und die RTC ja nur mit 3V ? Dann könnten doch kleine Tolaranzen zu Schwierigkeiten bei der Signalerkennung führen. Bei einem SPI-Bus hatte ich mit einem SD-Kartenleser auch erst Erfolg, nachdem ich einfache Pegelwandler (Widerstandsnetzwerk, bzw. 74HCT244) einsetzte.

Tütenflieger

DS1307 ist 5V

michael_x: DS1307 ist 5V

Genaugesagt Betriebsspannung von 4,5V bis 5,5V typich 5V. Spannung der Bufferbattere 2V bis 3,5V typisch 3V Wobei auf Batteriebetrieb bei Versorgungsspannung kleiner 1,25* Batteriespannung umgeschaltet wird. Grüße Uwe

Wobei auf Batteriebetrieb bei Versorgungsspannung kleiner 1,25* Batteriespannung umgeschaltet wird.

Das wäre nicht so schlimm, aber es wird das I2C-Interface abgeschaltet. D.h. wenn die Batterie-Spannung etwas hoch ist (neue Batterie) und der Arduino z.B. über einen USB-Bus versorgt wird (die Spannung ist dann meist unter 5V), wirst Du keine Verbindung zum DS1307 hinkriegen. Versuche mal, den Arduino mit einem Netzteil zu betreiben, das löst die meisten Probleme mit der DS1307-Verbindung.