PIC18F97J60 und LM75

OP #3098286
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich möchte gerade einen LM75 an meinen PIC18F97J60 anbinden. Aber 
irgendwie sehe ich vor den vilen Bäumen den Wald nicht. Ich bekomme 
einfach keine vernünftigen Messwerte hin. Hat hier jemand Erfahrung von 
Euch. Meinen anderen I²C Platinen funktionieren.

Ich wäre hier für jeden Tipp dankbar..

Hier wäre mein MC-Board:
http://www.schwabenplan.com/downloads/d03000.pdf

Hier wäre die LM75 Platine:
http://www.schwabenplan.com/downloads/d03200.pdf

Und hier wäre mein LM75 Programm:
/*********************************************************************** 
*/
unsigned int GetTempLM75 (void)
{
  unsigned int LM75_H, LM75_L, LM75_Temperatur;

  char addr = 0b10010001;

    IdleI2C2();        //wait until I2C2 module is idle.
    StartI2C2();

    WriteI2C2(addr);
    IdleI2C2();        //wait until I2C2 module is idle.
    if ( SSP2CON2bits.ACKSTAT )    // test received ack bit state
    {
    StopI2C2();
       return 0;            // bus device responded with  NOT ACK
    }

    LM75_H = ReadI2C2();
     IdleI2C2();
    if ( SSP2CON2bits.ACKSTAT )    // test received ack bit state
    {
    StopI2C2();
       return 0;            // bus device responded with  NOT ACK
    }

    LM75_L = ReadI2C2();
     IdleI2C2();
    if ( SSP2CON2bits.ACKSTAT )    // test received ack bit state
    {
    StopI2C2();
       return 0;            // bus device responded with  NOT ACK
    }

    StopI2C2();

    LM75_Temperatur =  (LM75_H << 8) | LM75_L;

    return LM75_Temperatur;
}
/*********************************************************************** 
*/
#3102824
Lesenswert?
• ▲
▼
> PIC18F97J60
Ist ein Billigtyp. Nicht dass du dich wunderst, wenn das Flash nach 
einigen Brennvorgängen (>100) den Geist aufgibt.
http://www.sprut.de/electronic/pic/18f.htm

> Ich bekomme einfach keine vernünftigen Messwerte hin.
Welche Messwerte erhälst du? Sind diese konstant, ändern sie sich, sind 
sie willkürlich? Auf den ersten Blick erkenne ich in deinem Programm 
nur, dass die umgerechnete Temperatur nie negativ werden kann.

> LM75_Temperatur =  (LM75_H << 8) | LM75_L;
Diese Zeile sieht komisch aus. Schau dir nochmals die Codierung im 
Datenblatt des LM75 an. Oder willst du nur die beiden Bytes 
zusammensetzen?

Schau dir mal das Sourcefile im Anhang an. Hab ich vor ca. 2 Wochen 
geschrieben, das Prinzip sollte dabei ersichtlich sein. Funktioniert 
soweit, ist aber noch nicht vollständig getestet (negative Temperaturen 
zum Beispiel).


Nachtrag:
Habe gerade gesehen, dass du den Adresszeiger des LM75 vor dem Lesen 
nicht setzt. Den musst du vor jedem Lesen der Temperatur auf das 
Temperaturregister setzen (siehe meine angehängte Datei).
Angehängte Dateien:
OP #3102902
Lesenswert?
• ▲
▼
Hallo,

vielen Dank für die Unterstützung. Ich habe inzwischen den LM75 am 
laufen. Es waren zwei Gründe verantwortlich.

Versorgungsspannung:
Mit einer Versogrungsspannung von 3,3 Volt bekam ich keine stabilen 
Signale am I²C-Bus. Mit 5,0 Volt waren die Pegel ok.

  > LM75_Temperatur =  (LM75_H << 8) | LM75_L;
Hier war auch ein Fehler. Stimmt. Ich habe das ganze jetzt so 
umgeschriebenen das es funktioniert.

Vielen Dank
Ingo

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.