LM75 <-> LM75A

Seiten: (1)
Zurück zur Übersicht

Kuddel

10.05.13 18:22

Ich bin mir nicht sicher, ob ich es als Frage "Was tun" oder unter "Bilder von Störungen" einstellen soll:
Habe hier meine Thermochecker:
http://f3.webmart.de/f.cfm?id=1663923&t=3973801&pg=2&r=threadview
Die haben als Sensor einen LM 75. Soweit, so gut. Sechs Geräte habe ich gebaut, fehlten nur noch zwei Sensoren.

Genau die letzten zwei wollten nicht. Zeigten Sinnlosen Mumpitz an. Haben zwar irgend ein I2C-Signal herausgegeben, aber das hat nichts mit der Zimmertemperatur zu tun. Also zwei Tage herumprobiert, Pullup anders etc. Nix. Der einzige Unterschied: die neuen waren LM75 statt LM75A. Dann fiel mir ein, dass ich ja schon 4 andere Geräte irgendwo im Hasu habe, die diesen Chip auslesen. Ergebnis: die LM75 zeigten wieder Mist an. Eigentlich sollten LM75 und LM75A kompatibel sein. Ich lese nur die ersten 8 Stellen ein, also Wayne, wie genau die sind.

Jetzt habe ich eine alte Platine zum Ausschlachten gefunden, mit einem dieser miesen LM75 drin. Ergebnis: funzt.
Scheint also wirklich, als ob bei R*ichelt Schwund im Lager war. Ich habe zumindest keine andere Erklärung. Habe noch 3 Stück über, falls also jemand Basteln will...
Gruß
Kuddel



Simon

10.05.13 23:37

Hi Kuddel,

ich hab mir die Datenblätter jetzt noch nicht angesehen, aber nicht dass das so ein Spass ist wie ich mit dem TMP275 hatte. Der ist auch identisch zum TMP75, nur sind die Adresseingänge bei dem Tristate. Wenn man sich da auf die internen Pullups verlässt dann hat man verloren.

Gruß

Simon

Kuddel

28.05.13 22:48

Ich muss hier noch mal nachgreifen. Ich habe nun andere LM 75 bekommen: LM75AIM. Ähnliches Problem: Zeigt Nonsens an. Diesmal aber nicht unsinnige Werte, aber immer die gleichen Wert.
Ich habe zwei verschiedene Datenblätter angesehen. Ich finde keine relevanten Unterschiede.
Als Code habe ich jetzt einen anderen Code aus dme Internet verwendet, haargenau das gleiche Ergebnis.
Code:
TWI_init(FAKTOR, TEILER);while(1){temperatur = TWI_empf(ADRESSE_R);}

i2c.h:
#define TAKT 8000000UL #define ADRESSE_R 0b10010001 //Lesen #define ADRESSE_W 0b10010000 //Schreiben#define FAKTOR 32#define TEILER 1void TWI_init(unsigned char faktor, unsigned char teiler){TWBR = faktor;TWSR = teiler;}void TWI_send(unsigned char adres, unsigned char daten){TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);loop_until_bit_is_set(TWCR, TWINT);TWDR = adres;TWCR = (1<<TWINT)|(1<<TWEN);loop_until_bit_is_set(TWCR, TWINT);TWDR = daten;TWCR = (1<<TWINT)|(1<<TWEN);loop_until_bit_is_set(TWCR, TWINT);TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);} char dat1, dat2; char TWI_empf(unsigned char adres){TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);loop_until_bit_is_set(TWCR, TWINT);TWDR = adres;TWCR = (1<<TWINT)|(1<<TWEN);loop_until_bit_is_set(TWCR, TWINT);TWCR = (1<<TWINT)|(1<<TWEN);loop_until_bit_is_set(TWCR, TWINT);dat1 = TWDR ;TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN);TWCR = (1<<TWINT)|(1<<TWEN);loop_until_bit_is_set(TWCR, TWINT);dat2 = TWDR ;loop_until_bit_is_set(TWCR, TWINT);TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);return dat1;}

Auf dem Oszi sieht man nett die ausgelesenen Daten. Der Rückgabewert ist wie angezeit, halt eben mal korrekt oder bei dem anderen Baustein Unsinn.

Ich weiß nicht weiter. Hat jemand einen Anhaltspunkt, wonach ich suchen könnte. Wie bereits gesagt: Mit dem LM75A (leider unbekannter Herkunft) läuft alles wunderbar.
Danke
Gruß
Kuddel
Edit: Auf einer komplett anderen Platine genau das selbe Ergebnis.


Zuletzt bearbeitet: 28.05.13 22:50 von Kuddel

epsilon

28.05.13 23:56

Hallo Kuddel,

kennst Du dieses Dokument? Einige Timing-Unterschiede, wahrscheinlich egal, aber auf jeden Fall eine andere Auflösung. Ohne jetzt das Datenblatt oder deinen Code im Detail durchforstet zu haben, einmal 11 und einmal 9 Bit müssen sich irgendwie bemerkbar machen.

Gruß, Stefan.

Edit: Doch nochmal ins Datenblatt geschaut: TI gibt beim LM75A nur 9 Bit an, während Philips 11 Bit schreibt!!! Also lautet die Frage nicht LM75 <-> LM75A, sondern LM75A <-> LM75A.


Zuletzt bearbeitet: 29.05.13 00:03 von epsilon

justin

29.05.13 00:59

Hallo,

ich habe meiner Oma kürzlich ein Thermometer gebastelt, auch mit LM75 von Reichelt. Die verhielten sich so, dass sie nach dem Einschalten einmal eine mehr oder weniger der Raumtemperatur entsprechende Temperatur zurück gaben und dann bei dieser blieben. Zuerst habe ich das gelöst, indem ich nach jedem Lesen kurz die Versorgung auf GND gezogen habe, aber es stellte sich heraus, dass man nur lang genug warten (EDIT: also den Sensor nicht ansprechen) musste. Zudem meine ich mich zu erinnern, dass das Teil, wenn zu kurz nach dem Einschalten angesprochen, völligen Mist lieferte.
Vielleicht ist es ja ein ähnliches Problem.


Zuletzt bearbeitet: 29.05.13 01:01 von justin

Bastelbruder

29.05.13 04:56

Da war doch mal was...

Finger

29.05.13 15:02

Interessant. Ich hatte schon völlig vergessen, das ich mal dieses Problem inklusive Lösung hatte ;-)

Kuddel

31.05.13 22:33

Ich bin mir noch sicher, aber ich glaube, ich habe die Lösung gefunden:
Erstens ist es das von Euch gefundene Timerproblem. Der LM 75 braucht seine Zeit.
Dann bin ich hierüber gestolpert:
http://www.avr-modelleisenbahn.de/atmega8/14-1-2-master-modus-atmega8.htm
Der Pin PB2 scheint eine lustige, mir bisher nicht bekannte Nebenfunktion zu haben. Das ergibt zwar keinen Sinn im Zusammenhang mit I2C. Aber wenn ich den Pin auf Low setze, dannn spinnt das ganze irgenwie.
Ich mache mir nun einen neuen starken koffeinfreien Kaffee (den ersten hat der Senseo dank offener Pad-Klappe über die Küchenschränke verteilet *grummel*), und denn guck ich mir noch mal die Register an. Oder gehe schlafen ;-)
Gruß
Kuddel


Zurück zur Übersicht
Seiten: (1)