Beschaltung DS3231 bei bestehendem I²C Bus

OP #4630039
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?
#4630158
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
      }
#4630175
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
(Firma: Vescomp) #4630181
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.
Gast #4630183
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...
Gast #4630207
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.
(Firma: Vescomp) #4630210
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...
Gast #4630216
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.
(Firma: Vescomp) #4630254
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.
Gast #4630379
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.
(Firma: Vescomp) #4630439
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 ?
OP #4630460
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.
Gast #4635245
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
#4635251
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren