Forum: Mikrocontroller und Digitale Elektronik Beschaltung DS3231 bei bestehendem I²C Bus


von Frank S. (hobbyist)


Lesenswert?

Ich möchte eine RTC DS3231 in einen bereits funktionierenden I²C Bus 
"nachrüsten". Abschlusswiderstände sind also bereits vorhanden. Der Bus 
arbeitet mit 5V.

Das Datenblatt schreibt die Adresse des DS3231 sei 1101000, was 0x68 
entspricht. Ich möchte lediglich die RTC nutzen. Weder das 32kHz Signal, 
noch Reset oder INT/SQW sind für meinen Zweck von Nöten. Es soll nur 
eine Lithium-Knopfzelle als Puffer angeschlossen werden.

So wie ich das Datenblatt verstanden habe, hat RST einen internen Pullup 
und muss bei Nichtnutzung somit nicht extern beschaltet werden.
Auch der 32kHz Ausgang muss nicht beschaltet werden. Gleiches gilt für 
INT/SQW.

Damit müsste ich bei meinem Einsatzzweck nur eine Betriebsspannung, die 
Knopfzelle und SCL/SDA anschließen ohne weitere externe Bauteile. Die 
N.C. Pins kämen auf Masse.

Das kommt mir "spanisch" vor. Daher meine Frage: Ist das so richtig oder 
habe ich etwas übersehen?

von chris (Gast)


Lesenswert?

Frank S. schrieb:
> Die
> N.C. Pins kämen auf Masse.

N.C. bedeutet "Not connected"
--> i.d.R. mit nichts verbinden, außer das Datenblatt sagt explizit was 
anderes

von Frank S. (hobbyist)


Lesenswert?

chris schrieb:

>
> N.C. bedeutet "Not connected"
> --> i.d.R. mit nichts verbinden, außer das Datenblatt sagt explizit was
> anderes

Genau so ist es. Im Datenblatt auf Seite 1 ist im Schaltbild "Typical 
Operating Circuit" genau diese Beschaltung abgebildet.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Frank S. schrieb:
> Das Datenblatt schreibt die Adresse des DS3231 sei 1101000, was 0x68
> entspricht.

 Und noch einer aus dem Verein...

 Adresse des DS3231 ist 0b1101000x, was
 0xD0 beim schreiben ist !!!
 0xD1 beim lesen ist !!!

von Joachim B. (jar)


Lesenswert?

Marc V. schrieb:
> Und noch einer aus dem Verein...

Danke!

Marc V. schrieb:
> 0xD0

Joachim B. schrieb:
> Nun gilt aber erst mal es gibt nur 7 Bit 127 I2C Adressen,
>
> redet einer von Adresse 0x20 was meint der ?
>
> ich habe mir angewöhnt die 127 Adressen rechts zu shiften um im
> Datenblatt bei den richtigen Bits zu bleiben

1
  for(address = 1; address < 127; address++ )

kurzform
1
      switch(address<<1)
2
      { //case 0x40:I2C_TASTATUR_8574);
3
        //case 0x70:I2C_TASTATUR_8574A);
4
        //case 0x78:I2C OLED         "));
5
        //case 0xA0:I2C EEPROM       "));
6
        case 0xD0:
7
          Wire.beginTransmission(DS1307_ID);
8
          printIIC(0x3F);
9
          (Wire.endTransmission()) ? i2c_test_flags|=(1<<I2C_RTC_3231) : i2c_test_flags|=(1<<I2C_RTC_1307);
10
          #ifdef DEBUG
11
          (i2c_test_flags&(1<<I2C_RTC_3231)) ? Serial.println(F(" DS3231 RTC ")) : Serial.println(F(" DS1307 RTC "));
12
          #endif
13
          break;
14
        default:
15
          DEBUG_PRINTLN(F(""));
16
          break;
17
      }

von Michael U. (amiga)


Lesenswert?

Hallo,

irgendwie taucht das "Adressproblem" immer wieder auf...

I2C hat (im Ursprung) eine 7-Bit-Adresse. Die belegen im Adressbyte die 
Bits 7...1 Bit 0 entscheidet, ob gelesen oder geschriben wird.
xxxx xxx0 und xxxx xxx1 sind welche bytewerte?

In Datenblätter findet man diese Darstellung auch so, ein Diagramm, wie 
das Adressbyte aufgebaut ist, war bisher auch in jedem mir begegneten 
Datenblatt.

0x76 als Adresse ist bei mir immer 0111 011x und nicht 0011 1011.
Und das war schon in den alten Philips-Unterlagen zu den 
Videotect-Decodern so, da ist mir I2C zuerst begenet.

Gruß aus Berlin
Michael

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Joachim B. schrieb:
>> ich habe mir angewöhnt die 127 Adressen rechts zu shiften um im
>> Datenblatt bei den richtigen Bits zu bleiben

 Du lernst es wohl nie ?

 Nochmals den Beitrag ganz langsam durchlesen:
 Beitrag "Re: I2C BeginnerFrage"

 Joachim B. schrieb:
>> Nun gilt aber erst mal es gibt nur 7 Bit 127 I2C Adressen,

 Es gibt 256 I2C Adressen aber jede Device auf dem Bus belegt 2 -
 eine furs schreiben und eine furs lesen.
 Es sind die höherwertigen 7 bits, so steht es auch in jedem
 DaBla, so wird es geschrieben und so wird es auch gesendet.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Marc V. schrieb:
> Und noch einer aus dem Verein...

Das Datenblatt schreibt von einer Adresse und einem r/w Bit.

> <SLAVE ADDRESS> 1101000

Wenn du das r/w Bit zur Adresse zählst, ist das dein Ding.
Aber dem Datenblatt entspricht das nicht!

Frank S. schrieb:
> Das Datenblatt schreibt die Adresse des DS3231 sei 1101000, was 0x68
> entspricht.
Ja, das ist so!


----- edit --------
Marc V. schrieb:
> Es sind die höherwertigen 7 bits,
7 Adressbit und dann kommt ein r/w Bit
So stehts ium Datenblatt!

> so steht es auch in jedem
>  DaBla, so wird es geschrieben und so wird es auch gesendet.
Ja....

Ansonsten viel Bla Bla...

von Pete K. (pete77)


Lesenswert?

Datenblatt hat immer recht!

Die ganze dusselige Diskussion kommt doch nur daher, dass es 
Bibliotheken gibt, die die Adresse mal mti 7 Bit oder mit 8 Bit 
angegeben haben wollen.

Wenn man es selbst programmiert, passiert das (normalerweise) nicht.

von holger (Gast)


Angehängte Dateien:

Lesenswert?

Alle haben recht. Selbst Philips wusste nicht so genau
wie man es definiert. Siehe Bild aus Original Datenblatt PCF8574
im Anhang;)

von holger (Gast)


Lesenswert?

> Es gibt 256 I2C Adressen aber jede Device auf dem Bus belegt 2 -
> eine furs schreiben und eine furs lesen.

Ich bevorzuge auch diese Auslegung. Da das ganze sowieso in der
Regel zusammen als Byte geschrieben werden muss war es eigentlich
von Anfang an Unsinn von 7Bit Adressen zu reden.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

U. F. schrieb:
> Wenn du das r/w Bit zur Adresse zählst, ist das dein Ding.
> Aber dem Datenblatt entspricht das nicht!

 Das entspricht sehr wohl dem Datenblatt, nur kannst du das mangels
 entsprechender Kenntnisse nicht richtig deuten.
 Alle I2C Hersteller sehen das so und jeder der ein bisschen Ahnung
 von der Sache hat, auch.
 Sogar ATMEL sieht das genauso wenn AVR Slave auf dem BUS ist:
1
The TWAR should be loaded with the 7-bit Slave address (in the seven most significant bits of TWAR)
2
The LSB of TWAR is used to enable recognition of the general call address (0x00).

U. F. schrieb:
> Ja....
>
> Ansonsten viel Bla Bla...

 Ja.
 Manchen Leuten ist einfach nicht zu helfen.

 Adresse zum schreiben ist I2C_Adress
 Adresse zum lesen ist I2C_Adress OR 1

 Du kannst die Adresse natürlich rumschieben wie du willst, aber ich
 glaube gar nicht, dass du jemals so weit kommst um überhaupt etwas
 auf dem I2C Bus zu senden oder zu empfangen...

 EDIT:
 Ausser vielleicht auf dem Arduino, mit fremdem Code...

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Marc V. schrieb:
> Das entspricht sehr wohl dem Datenblatt,
Das ist gelogen!
Stumpf gelogen!

Marc V. schrieb:
> nur kannst du das mangels
> entsprechender Kenntnisse nicht richtig deuten
>...
> aber ich
>  glaube gar nicht, dass du jemals so weit kommst um überhaupt etwas
>  auf dem I2C Bus zu senden oder zu empfangen...
> ....
> Ausser vielleicht auf dem Arduino, mit fremdem Code..

Und die zweite Blamage...
Meinst, deine Position wird irgendwie besser/höher/schöner, wenn du 
versuchst mich abzuwerten?

armer mann...

Marc V. schrieb:
> The TWAR should be loaded with the 7-bit Slave address (in the seven
> most significant bits of TWAR)
> The LSB of TWAR is used to enable recognition of the general call
> address (0x00).
Atmel sagt also auch: 7 Adressbit !!
Das haste mal ein richtig gutes Beispiel raus gesucht...
Glückwunsch.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

U. F. schrieb:
> Atmel sagt also auch: 7 Adressbit !!

 Absolut nicht nötig rumzuschreien, denn: wer schreit, hat...

 Ich versuche es noch einmal, obwohl ich nicht glaube, dass es bei
 dir etwas nutzen wird.

 0b1101000x ist entweder 0xD0 oder 0xD1 aber keinesfalls 0x68.
 Warum du unbedingt 0x68 daraus machen willst, bleibt für mich ein
 Rätsel.
 Dass da nur die höherwertigen 7 bits für die Adresse gebraucht
 werden, ändert nichts an der Sache.

 Da kannst du noch so lange rumschreien...

 P.S.

 0b1000 0111 zzzz zzzz
   ^       ^
   |       |
    Adresse

 Adresse ist immer noch 0x87zz, nicht 0xzz87 und erst recht nicht
 0x87.
 Was da mit niederwertigen 8 bits gemacht wird, interessiert keinen.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Marc V. schrieb:
> Ich versuche es noch einmal, obwohl ich nicht glaube, dass es bei
>  dir etwas nutzen wird.

http://www.wilhelm-busch-seiten.de/gedichte/schein39.html

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

U. F. schrieb:
>> Ich versuche es noch einmal, obwohl ich nicht glaube, dass es bei
>>  dir etwas nutzen wird.
>
> http://www.wilhelm-busch-seiten.de/gedichte/schein39.html

 Das haben dir deine Eltern wohl immer vor dem Schlaf vorgelesen, es
 hat aber anscheinend nichts genutzt...

von Wilhelm Busch (Gast)


Lesenswert?

Marc V. schrieb:
> 0b1101000x ist entweder 0xD0 oder 0xD1 aber keinesfalls 0x68.
>  Warum du unbedingt 0x68 daraus machen willst, bleibt für mich ein
>  Rätsel.
>  Dass da nur die höherwertigen 7 bits für die Adresse gebraucht
>  werden, ändert nichts an der Sache.

Halb richtig, denn das Datenblatt vom DS3231 (Seite 17) sagt:
The slave
address byte contains the 7-bit DS3231 address,
which is 1101000, followed by the direction bit (R/W),
which is 0 for a write.

Also address byte ist 0xD0 oder 0xD1 und address ist 0x68 (110100). Und 
jetzt hört auf euch rumzustreiten.

von Joachim B. (jar)


Lesenswert?

Marc V. schrieb:
> Du lernst es wohl nie ?

doch für deine Verständnisprobleme such einen anderen Sandkastenkumpel, 
das hier ist mein Schaufelchen.

von Joachim B. (jar)


Lesenswert?

U. F. schrieb:
> Und die zweite Blamage...
> Meinst, deine Position wird irgendwie besser/höher/schöner, wenn du
> versuchst mich abzuwerten?
>
> armer mann...

ganz genau!

von Joachim B. (jar)


Lesenswert?

Wilhelm Busch schrieb:
> Also address byte ist 0xD0 oder 0xD1 und address ist 0x68 (110100). Und
> jetzt hört auf euch rumzustreiten.

wir streiten nicht, wir können das in allen Arten nutzen, nur einer 
meint hier den DIN Koordinator zu geben.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Joachim B. schrieb:
> U. F. schrieb:
>> Und die zweite Blamage...
>> Meinst, deine Position wird irgendwie besser/höher/schöner, wenn du
>> versuchst mich abzuwerten?
>>
>> armer mann...
>
> ganz genau!

 Auch wenn zwei Dumme derselben Meinung sind, heisst es noch lange
 nicht, dass es auch so ist...

 @Joachim B.
 Hast du in der Zwischenzeit gelernt, wieviel man mit 16bit adressieren
 kann ?

: Bearbeitet durch User
von Frank S. (hobbyist)


Lesenswert?

Ich habe Mangels besserem Wissen die Information aus dem Datenblatt 
(vielleicht) falsch interpretiert. Aber hätte man das nicht auch 
vernünftig schreiben können? Muss ein so simples Missverständnis so 
eskalieren?

Wozu, wenn nicht zum konstruktiven Austausch von Wissen ist denn solch 
ein Forum gedacht?

Manchmal stelle ich mir wirklich die Frage, ob man es hier mit 
Erwachsenen zu tun hat... Fachlich mögt ihr einer wie der andere um 
Lichtjahre besser sein, als viele, die wie ich Spaß daran haben, 
Dinge/Schaltungen/Ideen zu probieren, aber im Dialog miteinander gibt es 
offenbar noch einige Defizite.

von Joachim B. (jar)


Lesenswert?

Marc V. schrieb:
> @Joachim B.
>  Hast du in der Zwischenzeit gelernt, wieviel man mit 16bit adressieren
>  kann ?

bestimmt lange vor dir ;)

von Einer K. (Gast)


Lesenswert?

Frank S. schrieb:
> aber im Dialog miteinander gibt es
> offenbar noch einige Defizite.

Ja, fachliche und soziale Kompetenz divergieren oftmals.

von Wolfgang (Gast)


Lesenswert?

Marc V. schrieb:
> 0b1101000x ist entweder 0xD0 oder 0xD1 aber keinesfalls 0x68.
>  Warum du unbedingt 0x68 daraus machen willst, bleibt für mich ein
>  Rätsel.
>  Dass da nur die höherwertigen 7 bits für die Adresse gebraucht
>  werden, ändert nichts an der Sache.

Die Adresse sind die 7 höherwertigen Bits von dem ersten übertragenen 
Byte. Das unterste Bit ist die Datenrichtung.

Guck dir die Spezifikation des I2C an. Dort ist die Adresse als 7 Bit 
definiert. Bei Hausnummern vergibst du für die Haupteingangstür und für 
die Hinterhoftür auch keine verschiedenen Nummern.

AN10216-01 INTEGRATED CIRCUITS2C Manual
APPLICATION NOTE  AN10216-01 I2C MANUAL, Philips Semiconductor
S.15
http://www.nxp.com/documents/application_note/AN10216.pdf

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Bei Hausnummern vergibst du für die Haupteingangstür und für
> die Hinterhoftür auch keine verschiedenen Nummern.

Komisch hier war oder ist das zumindest mal so,
aus 13/15 wurde 13 aus 25 wurde 25a und 25b, es ändert sich manchmal 
alles.

Wer meint das bestimmen zu können das es nur "eine Wahrheit" gibt?
Ist I2C oder TWI die "richtige" Bezeichnung, mir ist es egal ich kann 
beide akzeptieren, ewig Gestrige mögen darüber streiten.

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> Komisch hier war oder ist das zumindest mal so,
> aus 13/15 wurde 13 aus 25 wurde 25a und 25b, es ändert sich manchmal
> alles.

Tut's bei I2C auch, wenn die an den oft vorhandenes Address Input Pins 
rumlötest ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.