Forum: Mikrocontroller und Digitale Elektronik DS1621 Temp Sensor will nicht


von Markus F. (megavolt)


Lesenswert?

Im Zuge eine Diplomarbeit mit dem Tini DS80C400-KIT habe ich ein paar 
Grundlegende fragen:
Ich möchte ganz einfach, mittels eine Java Programmes die Temperatur von 
einem DS1621 auslesen. Die read und write Befehle kenne ich und Java 
Grundkenntnisse sind auch vorhanden. Ich habe mit dem Board schon ein 
LCD Display erfolgreich angesteuert, also der I²C Bus funktioniert.
Leider bekomme ich keine Daten vom Temp Sensor.

Code auszug:
1
I2CPort port = new I2CPort();
2
port.slaveAddress = (byte)0x48;
3
port.setClockDelay((byte)2);
4
byte[] b = new byte[2];
5
b[0] = (byte)0xEE;
6
if (port.write(b,0,1) < 0)
7
{
8
System.out.println("Fehler beim Temperatur Konvertieren");
9
return;
10
}
11
b[0] = (byte)0xAA;
12
if (port.write(b,0,1) < 0)
13
{
14
System.out.println("Fehler beim Lese Kommando");
15
return;
16
}
17
if (port.read(b,0,2) < 0)
18
{
19
System.out.println("Fehler beim lesen");
20
return;
21
}
Sensor ist sicher richtig angeschlossen:
A0,A1 und A2 sind alle auf GND, T0 (Thermostat) ist NC
SDA ,SCL und Vcc sind auch richtig angschlossen.

Ich weiss nicht mehr wo der Fehler sein kann, hab schon 3 gleich 
Sensoren ausprobiert. Beim Display funktioniert alles.
Ich glaub es kann nur mehr am .setClockDelay((byte)2); liegen.
Ist das bei jedem IC anders?
Der Board Hersteller hat bei seinem Test Programmen auch 2 genommen.
Das Display läuft auch ohne Probleme mit 2.
MFG Markus

von Stefan B. (stefan) Benutzerseite


Lesenswert?

1/ Ich denke die slaveAddress stimmt nicht und der Code findet den 
DS1621 nicht. In meiner letzten Fehlersuchorgie 
(Beitrag "Atmega8 - DS1621 auslesen ( über TWI[ i2c])") hatte ich bei /A0,A1 und 
A2 sind alle auf GND/ die Basisadresse

#define DS1621_Write  0x90
#define DS1621_Read   0x91

2/ Du gibst nur eine Adresse an - möglicherweise machen die Funktionen 
write/read der I2CPort Klasse selbst eine passende Zuordnung auf den 
Basiswert. Wenn nicht, müsstest du vor dem Read slaveAddress anders 
setzen. Näheres sollte in der Doku zur I2CPort stehen. Dort auch 
nachlesen, ob die Sequenz für STOP/ACK/NAK eingehalten wird, so wie es 
im Datenblatt des DS1621 steht.

von Markus F. (megavolt)


Lesenswert?

Hm..
Morgen kauf ich mal einen LM75..mal schauen was der so macht.
Adressen sollten stimmen. Hab ich aus dem Datenblatt.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Markus Fröhlich wrote:

> Adressen sollten stimmen. Hab ich aus dem Datenblatt.

Ich lese da was anderes...
http://pdfserv.maxim-ic.com/en/ds/DS1621.pdf

Seite 8:

Slaveaddress:

MSB                     LSB
1  0  0  1  A2  A1  A0  R/W

Bei A2 = A1 = A0 = GND = 0

=>

#define DS1621_Write  0x90
#define DS1621_Read   0x91

von Markus Fröhlich (Gast)


Lesenswert?

Du hast schon recht. Aber bei Java ist es so das man die Slave einmal 
einstellt und die read und write befehler das restliche steuer.
Der LM 75 ist ganz leicht zum handhaben: einfach die Temp lesen
Der DS1621 is da anders.
1.) Befehl zum Temp Convertieren schicken
2.) Befehl schicken damit man Lesen darf
3.) lesen

2 und 3 düfen in einer schleife sein damit man immer die aktuelle temp 
angezeigt bekommt
mein fehler war das 1 auch in der schleife war.
Den Convert befehl darf man nur einmal schicken.

Hoff das is richtig so. Bei mir funktionieren jetzt beide.
Hab auch für beide Sensoren ein jeweilige Java Klasse erstellt.
Wer sie will einfach PM.

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.