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; } /*********************************************************************** */
> 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).
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.