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?
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
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
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 !!!
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 | }
|
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
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
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...
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.
Alle haben recht. Selbst Philips wusste nicht so genau wie man es definiert. Siehe Bild aus Original Datenblatt PCF8574 im Anhang;)
> 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.
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
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.
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
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
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...
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.
Marc V. schrieb: > Du lernst es wohl nie ? doch für deine Verständnisprobleme such einen anderen Sandkastenkumpel, das hier ist mein Schaufelchen.
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!
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.
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
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.
Marc V. schrieb: > @Joachim B. > Hast du in der Zwischenzeit gelernt, wieviel man mit 16bit adressieren > kann ? bestimmt lange vor dir ;)
Frank S. schrieb: > aber im Dialog miteinander gibt es > offenbar noch einige Defizite. Ja, fachliche und soziale Kompetenz divergieren oftmals.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.