www.mikrocontroller.net

Forum: Compiler & IDEs TWI (I2C) - Lm75 - Atmega8 Funktionsproblem


Autor: Nick Ma. (nickma)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
/* Settings
Atmega8 @ Internal RC Oszillator 4Mhz @STK500
UART Übertragung OK
LM75 Adresse = 0b1001000
*/


Hallo,

Ich komme nicht ganz mit dem I²C bus zurecht. Ich möchte den 
Temperatursensor LM75 auslesen. (Versuche da jetzt seit zwei Tagen herum 
:-/ )


Ich bekomme aber immer nur Werte zurück wie:
95 (0b1011111) oder 127 (0b1111111) manchmal auch 255 (0b11111111).

Kann sich bitte mal jemand einmal den C-Code (Anhang -> TWI_lm75.c) zu 
Gemüte ziehen? (Könnte leicht sein, dass auch nur die Adressen nicht 
passen? Bin Ratlos.)
Eine Skizze meines Schaltplans liegt auch als PDF bei.


Danke vorab!
Greez, Nick

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verweise dich mal dahin: Beitrag "LM75 am Atmel 128 mit TWI_Master" 
Da hab ich das Format des Sensorwerts erklärt ;)

hth. Jörg

Autor: Nick Ma. (nickma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die rasche Antwort.
Du meinst die Division durch 2 im positiven Bereich?

Ich teste das, sobald ich daheim bin.
Denke aber dass grundlegend etwas nicht passt. Der Sensor sollte 
Zimmertemperatur zurück geben.

Stimmt diese Passage:
void lm75_read(void)
{
  i2c_send_stop();
   i2c_send_start(0x91);  //Hier kommt die Adresse vom Temp Sensor
  temp.high = i2c_read(0x90,ACK);
  temp.low = i2c_read(0x90, NACK);
  i2c_send_stop();
} 

die sich nämlich von den Adressen her zu der von Gerhard. 
(Beitrag "LM75 am Atmel 128 mit TWI_Master") unterscheidet (Pointer im 
Temp.Register setzte ich nämlich auch keinen)
 i2c_start();        //
    i2c_write(0x90);    // Screib Mode ist aktiv
    i2c_write(0x00);    // Das Pointer register ist auf Temperatur
register gerichtet
    i2c_start();        //
    i2c_write(0x91);    // Lese Modus eingestellt
    value.tmp_in[1]=i2c_read();     // Lese MSB mit ACK
    value.tmp_in[0]=i2c_read(0);    // Lese LSB mit NACK
    i2c_stop();

Grüße
Nick

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0x00 ist der Start-Up Wert des Pointerregisters, es sollte also auch so 
gehen. Aber der Sensor braucht bis zu 300ms um die Temperatur zu messen, 
vielleicht hilft einfach mal abwarten:
> The LM75 can be accessed at any time and reading the Temperature Register
> will yield result from the last temperature conversion. When the LM75 is
> accessed, the conversion that is in process will be interrupted and it will
> be restarted after the end of the communication. Accessing the LM75
> continuously without waiting at least one conversion time between
> communications will prevent the device from updating the Temperature
> Register with a new temperature conversion result. Consequently, the LM75
> should not be accessed continuously with a wait time of less than 300 ms
(eine Fußnote aus dem Datasheet)

hth. Jörg

Autor: Nick Ma. (nickma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es hat sich gelöst.
FEHLER:
  temp.low >>= 1;
  temp.high <<= 7;
  ganzzahl= temp.low | temp.high;
Die Werte wurden schon richtig übertragen und stehen richtig in der 
Struct "temp".

Danke Jörg an dieser Stelle, war wie von dir gesagt nur ein 
Rechenfehler.

Greez
Nick

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;)

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.