Forum: Mikrocontroller und Digitale Elektronik kein Zugriff auf I2C-EEPROM


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Alexander S. (knut740)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe ein AT24C512B (=I2C-EEPROM), das ich gern benutzen möchte, aber 
leider nicht ansprechen kann.

Seine Adresse ist lt. Datenblatt 0b1010xxx, wobei bei mir A0 an 5V und 
A1 und A2 mit Gnd verbunden sind. Also müßte die Adresse 0x51 sein 
(möglich wären 0x50 bis 0x57, die ich allesamt durchprobiert habe).
Ich könnte eidesstattlich versichern, daß alles richtig verdrahtes ist 
und wenigstens plus und minus konnte ich an den richtigen Stellen 
nachmessen - aber trotzdem kriege ich keine Verbindung.

Da ich den Chip gegen meine sonstige Gewohnheit direkt eingelötet habe, 
könnte man annehmen, daß das Ding beim Löten verbrannt sei, deshalb habe 
ich einen zweiten auf Sockel eingebaut, ging aber auch nicht. Den 
zweiten habe ich durch einen dritten ersetzt - auch ohne Erfolg. Nun bin 
ich ratlos.

Kann mir jemand weiterhelfen?
Vielen Dank schon mal!
Alexander

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Bei I2C-Adressen gibt es leider ein inkonsequente Zählweise. Teilweise 
wird das Write/Read-Bit als unterstes Adressbit angesehen, so dass sich 
der Adressteil um ein Bit nach links verschiebt. Also hätte Dein EEPROM 
dann die Adresse 0xA2/0xA3.

Die Inkonsistenzen findet man sowohl in Datenblätter als auch in der 
Software bzw. entsprechenden Bibliotheken. Die Krönung dessen fand ich 
vor langer Zeit in U-Boot. Dort wurde je nach I2C-Schnittstelle mal die 
eine und mal die andere Zählweise verwendet.

von VIA (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Kann mir jemand weiterhelfen?

Ohne Schaltplan, Layout/Bild vom Aufbau und Programmcode, zumindest in 
Teilen eher nicht.

Dir ist das alles bekannt, sonst keinem hier.
Wo sollte man da ansetzen?!


Alexander S. schrieb:
> Also müßte die Adresse 0x51 sein

Klingt erstmal richtig, R/W-Bit (LSB) beachtet?


Ansonsten bleibt nur raten:

Pullup-Widerstände an SDA und SCL vorhanden?

von Christian S. (roehrenvorheizer)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kannst Du bei irgendeiner ADRESSE ein ACK erkennen, wenn Du nacheinander 
alle 255 Adressen durchzählen läßt?

Mfg

von Christian M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Christian S. schrieb:
> alle 255 Adressen

Es sind ja sogar nur 128...

Andreas S. schrieb:
> leider ein inkonsequente Zählweise

Ja grausam, aber auch auf der Softwareseite muss man aufpassen, je nach 
Library.

Am besten bin ich immer gefahren, wenn ich nach Diagramm programmiert 
habe. Und LA dran! Das beste Werkzeug schlechthin!

Gruss Chregu

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


Bewertung
0 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Seine Adresse ist lt. Datenblatt 0b1010xxx, wobei bei mir A0 an 5V und
> A1 und A2 mit Gnd verbunden sind. Also müßte die Adresse 0x51 sein
> (möglich wären 0x50 bis 0x57, die ich allesamt durchprobiert habe).

 Oder auch 0xA2 (schreiben) und 0xA3 (lesen).

 Um nicht wieder endlos darüber zu diskutieren...
 ATMEL sagt folgendes:
1
EEPROM requires an 8-bit device address word following a start condition to
2
enable the chip for a read or write operation

 Und noch:
1
The eighth bit of the device address is the read/write operation select bit.
2
A read operation is initiated if this bit is high and a write operation is initiated if this bit is low.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Marc V. schrieb:
> Um nicht wieder endlos darüber zu diskutieren...

Man man..
Da kommt er wieder aus dem OFF und erklärt einem, dass EEPROMs die 
einzigen Speicher sind, die nicht nur 7 Adressbit mit positiver 
Zählweise haben, also A6 bis A0, sondern sogar noch ein A-1 Adressbit.
Allgemein bekannt, als R/W Bit.


Liebster Marc, ich kann deinen Unwillen über diese Adressverwirrung 
verstehen!
Ja, mich nervts auch!
Aber DU wirst es nicht mehr ändern.
1. Du bis ein paar Jahre zu spät dran
2. Hier ist der falsche Ort. Hier sind nur Opfer der Verwirrung.

Tipp:
Such dir eine Zeitmaschine, und misch die Entwicklungsabteilung bei 
Philips auf.

Kannst natürlich auch weiter einen auf Don Quijote machen...
Bringt nur keinem was. Ganz im Gegenteil.

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


Bewertung
-2 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Tipp:
> Such dir eine Zeitmaschine, und misch die Entwicklungsabteilung bei
> Philips auf.

 Tipp:
 Lass den TO beide Adressen probieren, ohne deine Kommentare...

> Kannst natürlich auch weiter einen auf Don Quijote machen...
> Bringt nur keinem was. Ganz im Gegenteil.

 Kannst natürlich auch weiter nutzlose Kommentare schicken...
 Bringt nur keinem was. Ganz im Gegenteil.

von Alexander S. (knut740)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe in den Arduino-Beispielprogrammen eines gefunden, das die 
I2C-Adressen durchzählt und dann wohl reagiert, wenn ein Ack kommt. Aber 
etwas ist da nicht richtig, denn es reagiert auch da, wo nichts ist, Ich 
habe es modifiziert auf 0-255 wegen des LSB. Unten den gefundenen 
Adressen ist A0, das könnte meinem EEPROM entsprechen (0b1010.....).
Das Programm heißt I2C_scanner, ich füge es bei. Mein Testprogramm füge 
ich anschließend an.
1
 // i2c_scanner
2
 //
3
 //
4
 // This sketch tests the standard 7-bit addresses
5
 // from 0 to 127. Devices with higher bit address
6
 // might not be seen properly.
7
 //
8
 // Adapted to be as simple as possible by Arduino.cc user Krodal
9
 //
10
 // June 2012
11
 // Using Arduino 1.0.1
12
 //
13
14
#include <Wire.h>
15
16
void setup()
17
 {
18
   Wire.begin();
19
20
  Serial.begin(9600);
21
   Serial.println("\nI2C-Scanner");
22
 }
23
24
void loop()
25
 {
26
   byte error, address;
27
   int nDevices;
28
29
  Serial.println("Scanning...");
30
31
  nDevices = 0;
32
   for(address = 0; address <= 254; address++ )
33
  {
34
     // The i2c_scanner uses the return value of
35
     // the Write.endTransmisstion to see if
36
     // a device did acknowledge to the address.
37
     Wire.beginTransmission(address);
38
     error = Wire.endTransmission();
39
40
    if (error == 0)
41
     {
42
       Serial.print("I2C-Device gefunden mit der Adresse 0x");
43
       if (address<16)
44
        Serial.print("0");
45
       Serial.print(address,HEX);
46
       Serial.println(" !");
47
48
      nDevices++;
49
     }
50
     else if (error==4)
51
    {
52
       Serial.print("Unknow error at address 0x");
53
       if (address<16)
54
        Serial.print("0");
55
       Serial.println(address,HEX);
56
     }
57
   }
58
   if (nDevices == 0)
59
     Serial.println("No I2C devices found\n");
60
   else
61
     Serial.println("fertig\n");
62
63
  delay(8000);           // wait 8 seconds for next scan
64
 }
1
//  _2_Werte_schreib_ausl_I2C_EEPROM                                   5.2.17
2
3
// aus dem I2C-EEPROM zwei Zahlenwerte, die aus je zwei
4
// Bytes bestehen, auslesen.
5
// Seriell ausdrucken: EEPROMadresse, die einzelnen Bytes und die 
6
// daraus zusammengesetzten Zahlenwerte. 
7
8
9
10
#include<Wire.h>
11
//#include<EEPROM.h>            // nur für internes EEPROM benötigt
12
const int I2CADRESSE = 0xA0;
13
int eepromadresse;
14
int Value_a, Value_b;
15
byte value1, value2, value3, value4;
16
17
void setup() {
18
int Wert;
19
   Wire.begin();
20
   Serial.begin(9600);
21
int eepromadresse = 0;
22
23
24
  Wert = 1234;
25
26
 for (eepromadresse = 0; eepromadresse < 2000; eepromadresse++){
27
  schreibEEPROM(eepromadresse, highByte(Wert));
28
  eepromadresse++;
29
  schreibEEPROM(eepromadresse, lowByte(Wert));
30
   }
31
 
32
33
 for (eepromadresse = 0;  eepromadresse < 2000; eepromadresse++){
34
  value1 = (liesEEPROM(eepromadresse));
35
  eepromadresse++;
36
  value2 = (liesEEPROM(eepromadresse));
37
  eepromadresse++;
38
  value3 = (liesEEPROM(eepromadresse));
39
  eepromadresse++;  
40
  value4 = (liesEEPROM(eepromadresse));
41
  
42
43
  Serial.print(eepromadresse);
44
  Serial.print("\t");
45
  Serial.print(value1);
46
  Serial.print("\t");
47
  Serial.print(value2);
48
  Value_a = value1 << 8 | value2;
49
  Serial.print("\t");
50
  Serial.print(Value_a, DEC);
51
  Value_b = value3 << 8 | value4;
52
  Serial.print("\t");
53
  Serial.println(Value_b, DEC);
54
  
55
  }
56
}  
57
 
58
59
void loop()
60
 {};
61
62
//  Unterprogramme
63
64
  byte liesEEPROM( unsigned int eepromaddress)   // byte datenbyte=0xFF)
65
{
66
  byte  datenbyte = 0x00;
67
  Wire.beginTransmission(I2CADRESSE);
68
  Wire.write ((byte) (eepromaddress >> 8));
69
  Wire.write ( (byte) (eepromaddress & 0xFF));
70
  Wire.endTransmission();
71
  Wire.requestFrom(I2CADRESSE, 1);         //  1 ... heißt ein Byte ???
72
  if (Wire.available())                    
73
    datenbyte = Wire.read();  // ich weiß, hier müßte man eine Fehleroutine  // einfügen, kommt später
74
  return datenbyte;           //
75
}
76
77
void   schreibEEPROM(int adresse, byte daten) 
78
  {  
79
  Wire.beginTransmission(I2CADRESSE);
80
  Wire.write ((byte) (adresse >> 8));
81
  Wire.write ( (byte) (adresse & 0xFF));
82
  Wire.write (daten);
83
  Wire.endTransmission();  
84
  delay(5);
85
  }
VG

: Bearbeitet durch User
von STK500-Besitzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alexander S. schrieb:
>Aber etwas ist da nicht richtig, denn es reagiert auch da, wo nichts ist,
Wie wäre es, wenn du uns das Ergebnis des Scans mitteilen würdest?

> Ich habe es modifiziert auf 0-255 wegen des LSB
Son Quatsch!
Das LSB gibt die Datenrichtung an.

von Alexander S. (knut740)


Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer schrieb:
>>Aber etwas ist da nicht richtig, denn es reagiert auch da, wo nichts ist,
> Wie wäre es, wenn du uns das Ergebnis des Scans mitteilen würdest?

Scanning...
I2C-Device gefunden mit der Adresse 0x00 !
I2C-Device gefunden mit der Adresse 0x20 !
I2C-Device gefunden mit der Adresse 0x7C !
I2C-Device gefunden mit der Adresse 0x80 !
I2C-Device gefunden mit der Adresse 0xA0 !
I2C-Device gefunden mit der Adresse 0xFC !
fertig

>
>> Ich habe es modifiziert auf 0-255 wegen des LSB
> Son Quatsch!
> Das LSB gibt die Datenrichtung an.

Dann scanne mal mit der Originaleinstellung des i2c-scanners (0-127)

von Alexander S. (knut740)


Bewertung
-1 lesenswert
nicht lesenswert
VIA schrieb:
> Pullup-Widerstände an SDA und SCL vorhanden?

Nein.
Habe ich da irgend wo etwas überlesen? Ich habe noch nie etwas von sda-, 
scl-Pullups gelesen.
Wenn Du sicher bist, würde ich die nachrüsten.
An den gleichen sda-scl-Ports hängt noch ein I2C-LCD dran, das sich 
nicht über mangelnde Pullups beschwert. Alledings könnten sie unsichtbar 
intern vorhanden sein. Aber dann müßten sie mein EEPROM mit"versorgen".

VG

von Arduino Fanboy D. (ufuf)


Bewertung
1 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Aber dann müßten sie mein EEPROM mit"versorgen".
Das tun sie!
Wenn sie denn da sind.

von VIA (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Habe ich da irgend wo etwas überlesen?

Scheint so.

I2C-Devices besitzen "nur" Open-Collector Ausgänge.
Zusammen mit den Pullup-Widerständen, ergibt sich dadurch ein Wired-AND,
sodass jeder Teilnehmer den Bus auf LOW ziehen kann.

Anders herum ist der Bus nur HIGH, wenn alle Teilnehmer den Bus 
"freigeben".


Lesen kann man das zum Beispiel hier:
https://de.wikipedia.org/wiki/I%C2%B2C#Elektrische_Definition

und auch eigentlich in jedem Datenblatt, in dem ein I2C beschrieben 
wird...

von S. Landolt (Gast)


Bewertung
1 lesenswert
nicht lesenswert
> Anders herum ist der Bus nur HIGH ...
Und abhängig von der Größe dieser Widerstände dauert es eben mehr oder 
weniger lang bis zum Erreichen dieses HIGH.

von Alexander S. (knut740)


Bewertung
-1 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Wenn sie denn da sind.

Stimmt! Ich habe aber bei sda/scl noch nie pullups gesehen

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Habe ich da irgend wo etwas überlesen? Ich habe noch nie etwas von sda-,
> scl-Pullups gelesen.

Auf die Verwendung und Dimensionierung wird doch in der 
I2C-Spezifikation explizit hingewiesen. Oder hast Du die etwa nicht 
gelesen?

von S. Landolt (Gast)


Bewertung
2 lesenswert
nicht lesenswert
> Stimmt! Ich habe aber bei sda/scl noch nie pullups gesehen
So kann es gehen mit "eidesstattlichen" Erklärungen - aber solange es 
kein Ehrenwort ist...

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:
>> Stimmt! Ich habe aber bei sda/scl noch nie pullups gesehen
> So kann es gehen mit "eidesstattlichen" Erklärungen - aber solange es
> kein Ehrenwort ist...

Vor allem sollte man bei solch einer gewichtigen Erklärung davon 
ausgehen können, dass bei der Kontrolle sämtliche Sorgfaltspflichten 
erfüllt wurden. Und bei der Behauptung, es handele sich um eine 
I2C-Schnittstelle, gehört eben eine formale Prüfung dazu. Und diese kann 
man natürlich nur anhand der offiziellen Spezifikation im Originaltext 
oder einem gleichwertigen Dokument durchführen.

Letztendlich bleibt also nur die Feststellung, dass der Threadersteller 
schon bei der Implementierung hemmungslos gepfuscht hat und nun 
versucht, das ganze auch noch schönzureden. Im Bereich der Elektronik 
geht so etwas aber nach hinten los. Stattdessen sollte er lieber eine 
Parteikarriere anstreben. Dort wäre er mit einem derart oberflächlichen 
Gelaber hochgradig angesehen. Und wenn die Behauptungen nicht der 
Realität entsprechen, kann man sie trotzdem noch schönreden, 
vorzugsweise unter Verwendung möglichst verbindlich wirkender Worte, die 
sich dann aber doch als hohle Phrasen erweisen.

Und spätestens seit Barschel ist das Gewicht eines sog. Ehrenwortes doch 
auch bekannt geworden.

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Bewertung
-1 lesenswert
nicht lesenswert
Hi

Der mit dem Ehrenwort war der Kohl - und hat's Ihm geschadet?

Wurde schon geklärt, WOMIT über I2C mit dem EEProm und dem LCD-Display 
geschwätzt wird?
Beim Arduino sind entweder die chipinternen PullUps aktiv oder es wurden 
auf dem Shield zwei Widerstände versteckt, Die genau dafür da sind.

Da das Display wohl funktioniert (nehme ich jetzt so an), sollte es dem 
Bus gut gehen.

Die Überprüfung aller 256 IDs scheint aber nicht geglückt zu sein:

Alexander S. schrieb:
> Scanning...
> I2C-Device gefunden mit der Adresse 0x00 !
> I2C-Device gefunden mit der Adresse 0x20 !
> I2C-Device gefunden mit der Adresse 0x7C !
> I2C-Device gefunden mit der Adresse 0x80 !
> I2C-Device gefunden mit der Adresse 0xA0 !
> I2C-Device gefunden mit der Adresse 0xFC !
> fertig

Ich sehe da nur Geradzahlige IDs

Zu den 127 prüfbaren IDs:
An diese ID wird jeweils ein 0-Bit angehangen und dieses Byte in den 
I2C-Bus gesendet.
Fühlt sich jetzt wer angesprochen, gibt's das ACK - damit findet man 
alle Busteilnehmer, Die eine Adresse haben (ein Single-Master braucht 
normal Keine).

Zeig Mal ein Bild von Deinem Aufbau, die ganzen I2C-Slaves müssen ja 
irgendwo sein, wenn schon eine Erkennung statt findet.

MfG

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Patrick J. schrieb:
> Der mit dem Ehrenwort war der Kohl - und hat's Ihm geschadet?

Kohl hat meines Erachtens niemals die Begriffe "Eidesstattliche 
Versicherung" und "Ehrenwort" in einem Kontext zusammen verwendet. 
Außerdem hat er auch nicht gelogen, sondern einfach weitere Auskünfte 
verweigert. Außerdem war das wesentlich später als bei Barschel.

Ganz im Gegensatz dazu hat Barschel gnadenlos gelogen:
https://www.youtube.com/watch?v=PCn-C6AkLm0

von Christian M. (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Ich habe noch nie etwas von sda-,
> scl-Pullups gelesen.

Kam schon im dritten Beitrag:

VIA schrieb:
> Pullup-Widerstände an SDA und SCL vorhanden?

Ich bin raus!

Gruss Chregu

von Alex W. (a20q90)


Bewertung
0 lesenswert
nicht lesenswert
Patrick J. schrieb:
> Der mit dem Ehrenwort war der Kohl - und hat's Ihm geschadet?

Das war Uwe Barschel! Später war er tot!

In den 90er gab es die Zeitschrift PC-Player. Da waren mal CDs mit 
Audiofiles im OGG-Format dabei und einen DOS-Player.

Da war eine Audiodatei mit Musik und dem Text "Ich bin. Ich bin wieder 
da. Barschel Bar Bar Barschel".

Eventuell kann sich jemand daran erinnern.

: Bearbeitet durch User
von Alexander S. (knut740)


Bewertung
-1 lesenswert
nicht lesenswert
Wieder etwas gelernt (wegen dieser Möglichkeit schätze ich ja dieses 
Forum)!

Im Datenblatt des AT24C512B habe ich auf S. 6 nur einen verschämtem 
Hinweis gefunden, den man weitherzig als Pullups deuten kann:
1
3.   Device Operation
2
CLOCK and DATA TRANSITIONS:
3
The SDA pin is normally pulled high with an external device.
4
Data on the SDA pin may change only during SCL low time periods (see
5
Figure 3-4 on page 8
6
).
7
Data changes during SCL high periods will indicate a start or stop condition as defined below.
Zugegeben, das Datenblatt hatte mir gereicht und erst der Beitrag von 
VIA hat mich wieder an die open collector Ausgänge erinnert.

Nachdem ich nun Pullups eingelötet habe, funktioniert es.

Vielen Dank für Eure Hilfe!

VG
Alexander

PS da hat sich jemand über eidesstattliche Erklärungen und genaue 
Formulierungen erregt: Ob es vielleicht möglich ist, einen Text  g e n a 
u  zu lesen? Oder ist die Bedeutung das Konjunktivs unbekannt?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Im Datenblatt des AT24C512B

wird an keiner Stelle die Abkürzung I2C o.ä. verwendet!

> Zugegeben, das Datenblatt hatte mir gereicht

Du hast also ein Datenblatt, in dem an KEINER Stelle I2C erwähnt wird, 
als normative Referenz für den I2C-Bus verwendet? Das ist schon äußerst 
gewagt.

von VIA (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Im Datenblatt des AT24C512B habe ich auf S. 6 nur einen verschämtem
> Hinweis gefunden, den man weitherzig als Pullups deuten kann:


Das Datenblatt soll dir aber auch nicht die Grundlagen des I2C 
vermitteln, sondern dir die Eigenschaften und Funktionen des Bauteils 
erklären ;-)

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Und letztendlich war/ist der I2C-Bus auch mit Patenten und Markenrechten 
von Philips belastet. Das bedeutet aber auch, dass andere Hersteller 
zwingend entsprechende Patentumgehungen einbauen müssen, so dass an 
irgendwelchen Stellen die strikte Kompatibilität zu I2C sogar verletzt 
werden muss.

Ein Zweidrahtbus, der nicht mindestens eine relevante Komponente von 
Philips/NXP oder einem offiziellen Lizenznehmer beinhaltet, kann somit 
gar kein I2C-Bus sein. Und da Atmel die Verwendung von I2C strikt 
vermeidet, ist Atmel offenbar auch kein Lizenznehmer von Philips/NXP. 
Natürlich versuchen solche Hersteller, so weit kompatibel zu I2C zu 
bleiben, dass in den meisten Fällen der reibungslose Betrieb 
sichergestellt ist, aber die Abweichungen müssen so groß sein, dass ein 
Richter und ggf. Gutachter ganze klar erkennen können, dass die 
entsprechenden Patente eben nicht verletzt werden.

von Alexander S. (knut740)


Bewertung
0 lesenswert
nicht lesenswert
Eine Frage am Rande hätte ich noch - aus reiner Neugier, das eigentliche 
Problem ist ja gelöst:

Das oben gepostete Programm "i2c-scanner" sieht für meine bescheidenen 
Kenntnisse sehr schön aus, aber es liefert eigenartige Ergebnisse:

I2C-Scanner
Scanning...
I2C-Device gefunden mit der Adresse 0x00 !
I2C-Device gefunden mit der Adresse 0x20 !
I2C-Device gefunden mit der Adresse 0x51 !
I2C-Device gefunden mit der Adresse 0x7C !
I2C-Device gefunden mit der Adresse 0x80 !
I2C-Device gefunden mit der Adresse 0xA0 !
I2C-Device gefunden mit der Adresse 0xD1 !
I2C-Device gefunden mit der Adresse 0xFC !
fertig


Wie ich das sehe, liefert der Ausdruck
Wire.endTransmission()
eine 0, wenn ein Ack empfangen wird.
Dies sollte nur bei 0x20 und 0x51 der Fall sein. Woher kommt dann das 
übrige Ack-Geschrei?

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Woher kommt dann das
> übrige Ack-Geschrei?
Weiterhin den Ardiono Scanner?
Dann: Verwende das Original.
Das mit der 127.

Damit halbiert sich die Menge.

Die 0x00 kann von einem Baustein stammen, welcher auf den General Call 
hört.

: Bearbeitet durch User
von m.n. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alexander S. schrieb:
> Dies sollte nur bei 0x20 und 0x51 der Fall sein. Woher kommt dann das
> übrige Ack-Geschrei?

Arduino Programme sind eben von Hause aus kreativ ;-)

von Alexander S. (knut740)


Bewertung
0 lesenswert
nicht lesenswert
Stimmt,
I2C-Scanner
Scanning...
I2C-Device gefunden mit der Adresse 0x00 !
I2C-Device gefunden mit der Adresse 0x20 !
I2C-Device gefunden mit der Adresse 0x51 !
I2C-Device gefunden mit der Adresse 0x7C !
fertig

aber 0x7C ist  immer noch unberechtigt

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


Bewertung
1 lesenswert
nicht lesenswert
Alexander S. schrieb:
> aber 0x7C ist  immer noch unberechtigt

 Diese Adresse ist sowieso reserviert.
 Und über 0x78 sollte man nicht abfragen.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Marc V. schrieb:
> Diese Adresse ist sowieso reserviert.
Wohl wahr...

Aber trotzdem komisch, dass die und auch die 00 belegt sind.
Ist mir so noch nicht untergekommen.

Bisher war I2C frei von Magie

von Patrick J. (ho-bit-hun-ter)


Bewertung
1 lesenswert
nicht lesenswert
Hi

Die 00 ist eine Art Broad-Cast, ein Rundruf - darauf müssen/sollen ALLE 
SLaves ein ACK senden.

Wieso/weshalb über 0x78 ... eine weiterführende Erklärung, daß man nicht 
jedes Datenblatt dutzende Male neu erkunden muß, hätte auch zukünftigen 
Lesern bestimmt weiter geholfen als diese lappidare Aussage, wo noch 
nicht Mal sicher gestellt ist, daß Diese ein Fakt ist (oder auch nicht).

Denke mir zwar gerade, daß Das in RIchtung 10bit oder reservierte 
Adressen geht, aber Denken heißt nun Mal nicht Wissen.

MfG

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


Bewertung
1 lesenswert
nicht lesenswert
Patrick J. schrieb:
> Denke mir zwar gerade, daß Das in RIchtung 10bit oder reservierte
> Adressen geht, aber Denken heißt nun Mal nicht Wissen.

 Das man nicht über 0x78 abfragen soll, ist nur meine Empfehlung,
 verboten ist es nicht.

 0x78 bis 0x7B ist reserviert für 10-bit Adressen.
 0x7C bis 0x7F ist reserviert für zukünftige Erweiterungen.

von Alexander S. (knut740)


Bewertung
0 lesenswert
nicht lesenswert
Marc V. schrieb:
> 0x78 bis 0x7B ist reserviert für 10-bit Adressen.
>  0x7C bis 0x7F ist reserviert für zukünftige Erweiterungen.

ok, aber wieso senden die ein ack?
Ob vielleicht irgend etwas von den beiden DS18B20 als Ack mißverstanden 
wird?

von Patrick J. (ho-bit-hun-ter)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Was suchen 1-wire-Sensoren auf dem I2C-Bus?

Dann kann es natürlich sein, daß Alles bunt durcheinander schwätzt und 
Keiner wirklich was versteht.

MfG

von Joachim B. (jar)


Bewertung
1 lesenswert
nicht lesenswert
Marc V. schrieb:
>  Das man nicht über 0x78 abfragen soll, ist nur meine Empfehlung,
>  verboten ist es nicht.
>  0x78 bis 0x7B ist reserviert für 10-bit Adressen.
>  0x7C bis 0x7F ist reserviert für zukünftige Erweiterungen.

hmmm die Idee kam mir auch schon nur ist dann der Arduino Scanner mit

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

eher ungünstig sollte also < 121 heissen, aber bis jetzt hatte ich keine 
Probleme und heute
dachte ich ich erwische mal einen mit erweiterter I2C Adress einen

PT2258


der wird beworben mit Address 0x88 / 88hex

durch den Scanner gejagt 0x84 nanu? Takt auf 100kHz runtergesetzt, dito.

Tiefer geschürft, aha die typischen Addressleitungen Ax und Ay heissen 
Code und geben merkwürdige Kombinationen aber egal zwischen 8hex 80hex 
84hex und 88hex kann man wählen, warum nur wird der mit 88hex default 
beworben? Dazu muss man Code 1/2 schon speziell beschalten weder beide 
high noch beide low.

Richtig beschaltet also auf "0x88" geshiftet 0x44

Ich mag die verschiedene Bezeichnungwirrwar nicht, eigentlich sind 
(fast) alle ICs die ich bis jetzt hatte deutlich unter 77hex

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.