LM75 an I2C gibt immer 0xFF zurück, aber Kommunikation geht.

OP #4095858
Lesenswert?

Hallo,
ich habe an einem ATmega32 einen LM75 dran.

Ich bekomme als Temperaturwert immer nur 255 zurück, egal ob ich das 
untere oder obere Byte lese.

Wenn ich die Adresse verändere (angeschlossen ist 0x90) auf z.B. 0x9D 
dann bekomme ich vom i2c_start eine 1 zurück, was auf Fehlerhafte 
kommunikation hinweist. Wenn ich die Datenleitungen tausche, oder den 
LM75 abstecke, bekomme ich ebenfalls die 1 zurück, was auch auf Fehler 
hinweist.
Weil ich aber 0 zurück bekomme muss die Kommunikation doch passen...

Im Anhang habe ich mein C Projekt einmal als zip gepackt.

Ich würde mich freuen wenn mir jemand helfen könnte.
Auch die Fuses sind auf Ihren 8Mhz wie eingestellt.

Grüße
Angehängte Dateien:
Gast #4095981
Lesenswert?

Du darfst das, was Maxim im Datenblatt des LM75 Table 1 als Slave 
Address bezeichnet, nicht mit der I2C Adresse verwechseln, wie sie von 
NXP/Phillips in der UM20204 I2C-bus specification and user manual 
spezifiziert ist (S.13 Fig.10 in [1]). So weit reicht die Kompatibilität 
des von Maxim verwendeten 2-wire Interfaces dann doch nicht.
Die I2C-Adresse hat nur 7 Bit (mal von der 10-Bit Erweiterung 
abgesehen).
[1] http://www.nxp.com/documents/user_manual/UM10204.pdf
#4097042
Lesenswert?

Wolfgang schrieb:
> Michael U. schrieb:
>> Maxim hat die Adrtesse doch völlig richtig mit 7 Bit angegeben.
>
> Wo? Im Datenblatt Table 1 wird das ganze Byte (incl. R/W-Bit) als "Slave
> Adress" bezeichnet.

Du hast recht, das Datenblatt in meiner Sammlung war nicht von Maxim...
Ist sicher eine Unkorrektheit, ändert ja aber nichts daran, daß 0x90 
Write und 0x91 Read ist usw.
Gerade bei I2C können da auch andere Hersteller sehr kreativ sein.

Gruß aus Berlin
Michael
Gast #4097046
Lesenswert?

Michael U. schrieb:
> Ist sicher eine Unkorrektheit, ändert ja aber nichts daran, daß 0x90
> Write und 0x91 Read ist usw.

Eben, und genau bei I2C-Libraries mit getrennten Read- und 
Write-Funktionen, die die von NXP spezifizierte 7-Bit Adresse (0x45) 
verwenden, führt das zu dem üblichen Chaos, wenn im Datenblatt 
verschiedene 8-Bit Adressen auftauchen - eine für Read (0x91) und eine 
für Write (0x90), i.e. wenn keine saubere Unterscheidung zwischen 
(7-Bit)-Adresse und Adressbyte (7-Bit Adresse + R/W-Bit) gemacht wird.

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