*Arduino* RTC-Modul DS1307; 2 I2C Adressen?

freak1051

Ensign
Registriert
Dez. 2012
Beiträge
197
Hallo Boardler,

hab mir ein RTC Modul für ein Projekt gekauft. Dazu noch ein paar andere I2C Geräte.


Nun dachte ich mir, ich lese mit folgendem Code mal die I2C Adressen aus, um zu sehen ob es Konflikte gibt. Damit ich falls nötig, die eine oder andere Adresse ändern kann.

Code:
#include <Wire.h>
void setup() {
Serial.begin (115200);
// Leonardo: wait for serial port to connect
while (!Serial)
{
}
Serial.println ();
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;
Wire.begin();
for (byte i = 8; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1); // maybe unneeded?
} // end of good response
} // end of for loop
Serial.println ("Done.");
Serial.print ("Found ");
Serial.print (count, DEC);
Serial.println (" device(s).");
} // end of setup
void loop() {}


Funktionieren tut der Code Wunderprächtig. Nur hat es mich gewundert, warum bei der Ausgabe vom RTC-Modul er mir 2 Geräte/Adressen Anzeigt:

Code:
I2C scanner. Scanning ...
Found address: 80 (0x50)
Found address: 104 (0x68)
Done.
Found 2 device(s).

Kann mir hierzu jemand eine Erklärung geben. (Soll keine Werbung sein, ist eh ausverkauft :)) aber falls es Wichtig ist, ich habe das RTC Modul hier gekauft:

https://www.funduinoshop.com/epages/78096195.sf/de_DE/?ObjectPath=/Shops/78096195/Products/03-31


vielen Dank für euer Feedback

grüße

Daniel
 
Hast du mal auf den Link "Anleitung" dort geklickt? Dort steht:

Zwei I²C Bauteile gleichzeitig ansteuern: Uhrzeit und Datum mit einer Real Time Clock mit I²C Bus, auf einem I²C LCD anzeigen lassen.

Um zwei I²C Komponenten gleichzeitig ansteuern zu können, muss eins der Bauteile eine andere I²C Adresse als das andere. In unserem Fall können wir nur die Adresse des LCDs ändern. Sofern es die drei Lötstellen A0, A1 und A2 auf der Rückseite des I²C Moduls hat
 
Hast du dir mal genau durchgelesen was ich/du geschrieben haben?

Ich: Ich habe ein RTC Modul, welches 2 Adressen aufweist (und NUR das eine angehängt, damit ich von allen meiner 3 Geräte die Adresse auslesen kann.

DU: Lt Anleitung muss man unterschiedliche Adressen vergeben, wenn man mehrere I2C Geräte verwenden will. Deshalb ist es wichtig, beim kauf einen I2C Displays darauf zu achten, dass das Display die Möglichkeit hat Lötbrücken zu setzen (A0, A1, A2).

Was hat das eine mit dem Anderen zu tun?? EIN Modul - ZWEI Adressen?
 
Hast du dir dein Modul mal angesehen? Was siehst du denn alles da drauf?
chips.png

Hast du dir dann die Datenblätter für diese Komponenten besorgt und dort mal etwas hinein gelesen? Oder sie zumindest nach deinen Adressen durchsucht?
24c32.png1307.png

Ist das zu viel Aufwand für dich? Lässt lieber andere für dich googlen und regst dich dann auf, wenn Leute nicht exakt genau das tun, was du willst? Komm schon, ein bisschen Eigeninitiative schadet wirklich nicht!

Gruß
BlackMark
 
Weist, wenn man etwas zum ersten mal macht, und keine Ahnung hat von der Materie, und nicht weiß was eine Slave Adresse ist oder sonstiges.. bringt einem das nichts. Auch deine Antwort bringt mir nicht viel.. wenn ich ehrlich bin.

Andererseits bin ich einer der Menschen, der gern, wenn jemand eine Frage hat, auch gern behilflich ist. und andere an meinem wissen teilhaben lässt.

zudem Geb doch mal in Google ein DS1307 2 I2C Adressen ein... da kommt nich so wirklich was.

aber ist egal. Aber Gratulation euch, bin mit diesem Thema in diesem Forum das erste mal aufs Maul geflogen. :)
 
Wenn es Funktioniert dann solltest du dich nicht weiter mit der Theorie befassen. Grundsätzlich sehe ich keinen Grund warum ein Modul nicht zwei I2C Adressen verwenden sollte. Vielleicht macht das die Programmierung einfacher oder derjenige der die Library programmiert hat war der Ansicht das der Code dann schöner/sauberer ist.

Die Frage die du stellst wird keine sachliche Antwort liefern, sondern einfach nur subjektive Eindrücke, Glauben und Meinungen. Ich bin ein großer Fan der Arduino Community, weil niemand anmaßt alles zu wissen. Du willst eine Sachliche Aussage zu einem Problem haben das hier wahrscheinlich niemand wirklich versteht. Mutmaßung: weltweit gibt es wahrscheinlich 5 Leute die deine Frage beantworten könnten.

Lies dir doch mal die Bug List vom ESP 32 durch:
https://www.espressif.com/sites/def.../eco_and_workarounds_for_bugs_in_esp32_en.pdf

Seite 5/11 Punkt 3.9: „When the dual-core CPU accesses different address spaces, a
random error occurs“

Nicht einmal der Hersteller versteht warum der Fehler auftritt.
 
freak1051 schrieb:
Weist, wenn man etwas zum ersten mal macht, und keine Ahnung hat von der Materie, und nicht weiß was eine Slave Adresse ist oder sonstiges.. bringt einem das nichts.
Du musst auch überhaupt nicht wissen, was eine slave address ist. Du musst nur alle von mir rot markierten Stellen lesen, nicht mehr. Alle von mir rot markierten Stellen beantworten und beweisen (Anspielung auf "subjektive Eindrücke, Glauben und Meinungen") deine Frage. Und wenn du meinst, dass du nicht weist was eine I2C Adresse ist, dann stellt sich mir die Frage, warum du I2C hernehmen willst, ohne grundlegend zu verstehen was es ist, oder was es macht, und dann kann es dir sowieso egal sein, ob da eine oder zwei Adressen auf dem Modul sind, wenn du es eh alles nicht verstehst.

Deine Frage war, woher kommen diese 2 I2C Adressen. Meine Antwort war, du hast 2 Chips auf dem Modul mit jeweils einer Adresse. Beweis, siehe Bild deines Moduls inkl. Auszüge aus den Datenblättern der jeweiligen Chips mit markierten I2C Adressen, die denen gleichen, die du gefunden hast. Und jetzt komm mir nicht mit "Ich kann aber Hex nicht in Binär umwandeln, im Datenblatt stehen die Adressen in Binär und ich habe aber Hex Adressen", denn dann solltest du wirklich erstmal bei den Basics anfangen, bevor du irgend einen Microcontroller angreifst.

freak1051 schrieb:
zudem Geb doch mal in Google ein DS1307 2 I2C Adressen ein... da kommt nich so wirklich was.
Doch, das führt zum Datenblatt und im Datenblatt steht alles genau beschrieben. RTFM, oder in dem Fall RTFDS. Und sonst gibt es auch noch Wikipedia Artikel zu I2C die man lesen kann, oder sonst irgend welche Tutorials zu I2C. Dann sollte man auch relativ schnell den Begriff slave address verstehen, ist nämlich recht essenziell für I2C.

freak1051 schrieb:
aber ist egal. Aber Gratulation euch, bin mit diesem Thema in diesem Forum das erste mal aufs Maul geflogen.
Bist du, weil du Fragen zu einem Thema stellst und dann behauptest die Antwort nicht zu verstehen, weil du keine Ahnung von den Grundlagen für das Thema hast. Warum dann überhaupt erst fragen?! Lern lieber die Grundlagen.

@SupaKevin: Ich verstehe kein Wort?! Wovon redest du? Bist du im falschen Thread gelandet? Oder bist du wirklich der Meinung, dass niemand I2C versteht? Oder dass niemand mit einem Blick erkennen kann, dass auf einem Modul 2 Chips verbaut sind, und das dazu führt, dass es 2 Adressen gibt? Oder dass ein Library-Programmierer Einfluss auf die Anzahl der I2C Adressen der Hardware hat, auch wenn die Library gar nicht verwendet wird? Oder dass weltweit nur 5 Leute existieren, die sehr oberflächliche und grundlegende Kenntnisse von I2C und Microcontroller haben um das "Problem" (welches Problem? Es gibt 2 Adressen, das ist kein Problem, das ist Tatsache) zu verstehen?

Und was hat der ESP32 mit dem Ganzen zu tun? Und warum ist eine race condition im memory bus vom ESP32 das gleiche, wie 2 verbaute I2C Chips auf einem Modul? Und wieso sollte der Hersteller des ESP32 die race condition nicht verstehen, wenn dieser Bug identifiziert und mit workaround dokumentiert ist?

Leute, bitte sagt mir ihr trolled, die Frage ist wirklich nicht schwer, so dass man sie eigentlich durch etwas nachdenken und eigeninitiative lösen könnte. Trotzdem wird behauptet es wär ein unlösbares Problem, das nur eine Handvoll Menschen auf dieser Erde lösen könnten. Wirklich?

Gruß
BlackMark
 
Also erst mal sorry, wenn ich mich evtl. im Tonfall vergriffen hab.

Aber BlackMark, sei mal ehrlich. Wie Lernt man denn. Zur Info. Ich mache aktuell ne Weiterbildung zum Automatisierungstechniker. Programmiere seit 2 Jahren SPS. Klar verstehe ich nicht alles was des Ding, oder n Arduino macht. Aber darum Frage ich andere Menschen. Warum das Rad neu erfinden. Klar kann ich mir gefährliches Halbwissen aneignen, indem ich Datenblätter lese, von denen ich nur die hälfte versteh.

Mir ist schon klar (mittlerweile) dass auf dem Board 2 Chips verbaut sind, jeder mit seiner eigenen Adresse. Beim Kauf war mir das allerdings nicht klar. Ich wollte n Teil mit Batterie, welches mir das Uhrzeit und Datums Handling übernimmt.. da millis() naja doof ist wegen dem Überlauf. Nicht unmöglich aber umständlich.

Ich sags mal so. Andern wäre nie aufgefallen dass des ding 2 Adressen hat. Also schon mal nen schritt weiter als andere, oder?. Hab zwar noch nicht ganz verstanden, was der zweite Chip macht, denke es is ein reiner Eprom Speicher (?!?!), den ich für meine Anwendung evtl. Sogar hernehmen werde.

Dennoch find ich es einfach schade, (vllt weil ich es anders kenne/mache) wenn mich jemand freundlich was fragt, dass ich ihm dann ne Antwort gebe, mit der er Was anfangen kann. Evtl. stecke ich noch sein Kenntnisstand ab. Und da liegen wir meilenweit auseinander.

Dennoch Danke für deine Antwort, und vllt. denkst du auch mal darüber nach, wie du Angefangen hast. Du warst sicher auch froh, um jeden Profi, der dir etwas gezeigt hat, bevor du dich durch tonnen Datenblätter gewälzt hast, und nachher nicht viel mehr wusstest als vorher,

Und übrigens, aufgrund meiner 0,39 Cent China-Ware, steht auf den Chips nicht mal was drauf. Was für mich im ersten Moment nicht unbedingt hieß, es sind unterschiedliche Chips. Sry, bin kein 5-Voldemort und kenne die dinger beim Namen. Bin da eher de 3-Phasen-Kasper :)

grüße

Daniel
 
freak1051 schrieb:
Aber BlackMark, sei mal ehrlich. Wie Lernt man denn. Zur Info. Ich mache aktuell ne Weiterbildung zum Automatisierungstechniker. Programmiere seit 2 Jahren SPS. Klar verstehe ich nicht alles was des Ding, oder n Arduino macht. Aber darum Frage ich andere Menschen. Warum das Rad neu erfinden. Klar kann ich mir gefährliches Halbwissen aneignen, indem ich Datenblätter lese, von denen ich nur die hälfte versteh.
Ich bin dann mal ehrlich, man lernt indem man Datenblätter liest, die Dinge die man nicht versteht googled und nachliest und sich somit Wissen aneignet, bis man das komplette Datenblatt verstanden hat. Das muss man aber meistens gar nicht bzw. hängt davon ab was man machen will. Um eine RTC zu verwenden, für die es schon eine Library gibt, muss man das Datenblatt eigentlich gar nicht lesen. Wenn man aber verstehen will, wie die RTC funktioniert, oder warum etwas so ist, wie es ist, muss man sich mit dem Datenblatt auseinandersetzen. Dort steht nämlich alles drin. Wenn dich I2C Adressen interessieren, dann lies eben den I2C Teil im Datenblatt. Musst auch gar nicht alles verstehen, für deine Frage reicht es den I2C Teil vom Datenblatt zu überfliegen, bis du die I2C Adresse findest. Dauert maximal ein paar Minuten. Dann siehst du nämlich, dass der RTC Chip nur eine Adresse hat und weißt, dass die zweite woanders herkommen muss. Die zweite Adresse googlen funktioniert auch, da findest du dann den EEPROM Chip, also ich hab ihn über googlen der I2C Adresse gefunden. Oder die schaust auf dein Modul, siehst den zweiten Chip und googlest nach der Bezeichnung die oben steht. Dann findest du auch das Datenblatt für den EEPROM Chip. Dort dann wieder den I2C Teil überfliegen, bis du die Adresse hast und dann weißt du, dass deine 2 I2C Adressen von den beiden Chips auf deinem Modul kommen. Dazu muss man weder professioneller Hardware Engineer, noch erfahrener Programmierer sein, das sind basic problem solving skills, die jeder haben sollte, der sich mit Microcontroller Programmierung befasst.

freak1051 schrieb:
Mir ist schon klar (mittlerweile) dass auf dem Board 2 Chips verbaut sind, jeder mit seiner eigenen Adresse. Beim Kauf war mir das allerdings nicht klar. Ich wollte n Teil mit Batterie, welches mir das Uhrzeit und Datums Handling übernimmt.. da millis() naja doof ist wegen dem Überlauf. Nicht unmöglich aber umständlich.
Hängt von deinen Anforderungen ab. Wenn dir Genauigkeit egal ist und dein Arduino immer läuft, ist es sicher einfacher mit einem Hardware timer des Arduino und einem großen Counter (uint64_t) zu arbeiten. Da gibt es dann keinen Überlauf, solange lebst du gar nicht, bis es einen geben würde. Wenn dir aber Genauigkeit wichtig ist, oder dein Arduino mit Batterie läuft und Sleep/Powerdown verwendet, dann brauchst du eh eine RTC.

freak1051 schrieb:
Ich sags mal so. Andern wäre nie aufgefallen dass des ding 2 Adressen hat. Also schon mal nen schritt weiter als andere, oder?. Hab zwar noch nicht ganz verstanden, was der zweite Chip macht, denke es is ein reiner Eprom Speicher (?!?!), den ich für meine Anwendung evtl. Sogar hernehmen werde.
Ja, ist ein EEPROM. Steht alles im Datenblatt von dem Chip. Aber du hast recht, dass andere gar nicht so weit kommen. Fast alle Tutorials, die dieses Modul behandeln, erwähnen nicht, dass dort auch ein 32K EEPROM verbaut ist, der nicht für RTC Zwecke verwendet wird, sondern frei zur Verfügung steht. Mit ein bisschen suchen, habe ich aber auch hier ein Datenblatt für das Modul gefunden, in dem beide Chips behandelt werden: TinyRTC I2C Module
Hättest du auch selbst finden können und sollen.

freak1051 schrieb:
Dennoch find ich es einfach schade, (vllt weil ich es anders kenne/mache) wenn mich jemand freundlich was fragt, dass ich ihm dann ne Antwort gebe, mit der er Was anfangen kann. Evtl. stecke ich noch sein Kenntnisstand ab. Und da liegen wir meilenweit auseinander.
Kenntnisstand kommt gar nicht ins Spiel. Eigeninitiative unterscheidet uns. Du stößt auf eine Kleinigkeit die du nicht verstehst und machst einen Thread auf, anstatt dich hinzusetzen, brain.exe zu starten und zu versuchen selbst die Lösung zu finden. Man lernt immer am meisten, wenn man selbst seine Probleme löst, anstatt andere dies machen zu lassen. Ich würde aber auch nichts sagen, wenn deine Frage "Mein RTC Modul speichert die Uhrzeit richtig, aber das Datum falsch, aber nicht immer um gleich viel, und ich komme nicht drauf warum." wäre. Das hatte ich mal mit einem DS3231 und hat mich einen Tag arbeit gekostet um den Fehler zu finden. Dazu findet man auch nichts im Internet, aber dein Problem kann man mit Google allein lösen, das ist keinen Thread wert.

freak1051 schrieb:
Dennoch Danke für deine Antwort, und vllt. denkst du auch mal darüber nach, wie du Angefangen hast. Du warst sicher auch froh, um jeden Profi, der dir etwas gezeigt hat, bevor du dich durch tonnen Datenblätter gewälzt hast, und nachher nicht viel mehr wusstest als vorher,
Ich erinnere mich noch gut an meine Anfangszeit mit Hardware und Microcontroller, mir kommt es vor, als wär das keine 5 Jahre her, vielleicht weil dem so ist. Wie viel Spaß ich daran hatte (und habe) mich durch Datenblätter zu arbeiten und für meine Projekte meine Libraries selber zu schreiben, anstatt auf fertige Libraries zu setzen. Man kann so viel lernen, wenn man Datenblätter liest und Protokolle selbst implementiert. Niemals würde ich zu einem Profi gehen und mir meine Probleme lösen lassen, außer ich habe alle anderen Optionen ausgeschöpft und komme trotzdem nicht auf die Lösung, aber soweit ist es noch nie gekommen. Klar, wenn das Ziel "Ich will so schnell wie möglich etwas funktionierendes haben und möglichst wenig dafür arbeiten" dann ist meine Herangehenweise die falsche, aber wenn man etwas lernen will, gibt es nichts besseres als jedes Mal das Rad neu zu erfinden.

freak1051 schrieb:
Und übrigens, aufgrund meiner 0,39 Cent China-Ware, steht auf den Chips nicht mal was drauf. Was für mich im ersten Moment nicht unbedingt hieß, es sind unterschiedliche Chips. Sry, bin kein 5-Voldemort und kenne die dinger beim Namen. Bin da eher de 3-Phasen-Kasper
Die Chips sind sicher bedruckt. Die billig China Chips sind meistens nur schwer lesbar bedruckt, musst mit viel Licht und im richtigen Winkel drauf schauen, dann findest du die Schrift. Und ich kenn die Namen auch nicht alle auswendig. Deshalb steht ja was auf den Chips drauf, das man in Google eingeben kann und so zum Datenblatt kommt.

Überleg dir, ob du lernen, oder schnell Ergebnisse haben, willst. Bei ersterem, lern die Grundlagen und lies die Datenblätter, bei zweiterem, mach dir keine Gedanken solange eh alles funktioniert.

Gruß
BlackMark
 
Zurück
Oben