Forum: Compiler & IDEs LM75 Mega8, lässt sich nur einmal auslesen


von Tin (Gast)


Lesenswert?

Guten Tag
Kennt einer das verhalten eines Temp.-fühler LM75, dass dieser nur nach 
einem reset auszulesen ist und danach nicht mehr, obwohl sie in einer 
while schleife sitzt?
Bei dem ersten LM75 Funktioniert er mit der Schleife, nach 2 weiten 
Typen Funktioniert es nur nach einem Reset, bzw. bei Spannung ein.

Schleife und auslesen sollte Funktionieren, da es mit dem ersten LM75 
Funktioniert.
Ich konnte keine besonderheit des Beschalten gefunden, Adresse 
eingestellt, SCL und SDA ist richtig verdrahtet mit PullUP.

Pin 3 hab ich unbeachtet gelassen, da es nur ein Ausgang ist, wie es mir 
erscheint.

Hoffe einer weiß ein Rat.

von Falk B. (falk)


Lesenswert?

@ Tin (Gast)

>Kennt einer das verhalten eines Temp.-fühler LM75, dass dieser nur nach
>einem reset auszulesen ist und danach nicht mehr, obwohl sie in einer
>while schleife sitzt?

Hast du dir mal SDA und SCL angeschaut? Dazu reicht ein Multimeter. Ich 
wette, SDA hängt auf LOW. Du liest wahrschinlich nur 8 Bit aus und der 
IC will aber moch das LSB ausgeben. Wenn das zufällig LOW ist, knallts. 
Steht auch im Datenblatt.

MFG
Falk

von Tin (Gast)


Lesenswert?

Ich hab es mir per Ozsi angeschaut und es stehen Daten an, sowohl Clock 
als Data.
Ich kann es mir nicht erklären warum es nur beim Reset Funktioniert und 
mit dem 1. geht es wunderbar...

von Tin (Gast)


Lesenswert?

Habe ein unterschied zwischen den LM75 gefunden, der erste 
funktionierene ist ein LM75A und die anderen sind alle LM75...
Ich muss also meine Routine ändern, ich hab allerdings keine Idee mehr 
an welchen Punkt es liegen könnte.
Ich sende das 0 Byte auf die Adresse mit 0 am ende, ende danach die 
Adresse mit 1 am ende und dann Frag ich beide Bytes ab und setz die um.
Das Funktioniert aber scheinbar nur mit dem LM75A.

Ich benutz die Routine von Peter Fleury.

Ausschnitt:

  i2c_start(0b10011110);           // Adresse
  i2c_write(0);                    // 0 Byte zur Init.
  i2c_rep_start(0b10011111);       // Adresse ++


  higher_byte = i2c_readAck();     //Auslesen High
  lower_byte   = i2c_readNak();    //Auslesen Low
  i2c_stop();                      // stoppen

Vielleicht hat wer einer eine Idee.

von Tin (Gast)


Lesenswert?

Ich habe es nun zum Teil gelöst.
Ich lasse die Temperatur über eine extra if abfrage laufen, da 
Funktioniert es.
Allerdings weiß ich nicht wo der Unterschied sein soll...

Danke für die Hilfe.

von Micha (Gast)


Lesenswert?

Es liegt dran, dass der LM75 33ms brauch, um überhaupt einen Messwert zu 
haben, und wenn man die ihm nicht lässt gehts nicht.

PS: der LM75A braucht sogar 100ms ist aber genauer.

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
Noch kein Account? Hier anmelden.