www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Digitaler Temperatur Sensor Ungenau? DS7505


Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen....

Ich verwende einen DS7505 von Dallas (Maxim)

Hier das Datenblatt: http://datasheets.maxim-ic.com/en/ds/DS7505.pdf
Interessante Seite: 5

Es handelt sich dabei um einen Sensor welcher bereits einen integrierten 
ADC enthält und die Daten per I2C wahlweise in einer auflösung von 
9,10,11 oder 12 Bits sendet.

Laut Datenblatt hat der Sensor eine Genauigkeit von +/-0.5C

Die kommunikation mit dem IC läuft soweit problemlos...
Einzig störrender faktor ist, das ich einen Offset von etwa 5C habe... 
also alle meine Zimmerthermometer zeigen 24C an jedoch vom ic kommt 29C 
zurück

Meine Auswertung der zwei empfangenen bytes
ucVorkomma = ((uiTemp & 0x7F00) >> 8); //Vorzeichen entfernen und nur MSByte verwenden
  ucVorkomma = ucVorkomma - 5; //hier den Offset abziehen
  ucNachkomma = ((uiTemp & 0x00FF) >> 4); //Die nachkomma stellen speichern
  ucNachkomma = ((ucNachkomma * 625) / 1000); //nachkommastellen haben eine auflösung von 0.0625C daher umrechnen


Vielleicht sieht ja jemand einen Fehler...

Durch das entfernen des Offsets scheint der Sensor perfekt zu messen...
Aber irgendwie sind mir 5C tolleranz ein wenig zu viel :)


Danke schonmal

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen zusammen...

Ich habe noch eine Merkwürdigkeit zu ergänzen...

Habe heute den Sensor bzw. das Gerät eingeschaltet... und der Sensor hat 
zuerst viel zu tiefe Temperaturen angezeigt... doch Die Temperatur 
steigt jetzt seit 2 Minuten um über 3 Grad an... und nach 2 Minuten 
stimmt der gemessene wert...

Ist das normal, das ein solcher Sensor so lange hat, bis er die 
"richtige" (abgesehen vom Offset) Temperatur misst?

Danke

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann er die Erwaermung selbst machen ? ZB durch Ueberspannung ? Zu 
haeufige Kommunikation ? Unguenstiger Montageort ueber einem 
Spannungsregler ?

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A...aha Soooo. schrieb:
> Kann er die Erwaermung selbst machen ? ZB durch Ueberspannung ? Zu
> haeufige Kommunikation ? Unguenstiger Montageort ueber einem
> Spannungsregler ?

Sollte eigentlich nicht der Fall sein... Spannung liegt bei 2.8V und er 
ist bis 1.8V ausgelegt... Die Datenleitungen gehen direkt zum 5V AVR da 
diese laut Datenblatt 5V Kompatibel sind....

Er ist auf einer externen Platine angebracht welche frei in der luft ist

Abgefragt wird er alle 2.5 Sekunden...

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast einen 2.8V spannungsregler ? Und Widerstande in den 
Datenleitungen ? Wie gross sind die Widerstaende ?
Hatt ich auch mal. Ein DS1302 an einen 3.3V Regler, und keine 
Widerstande, oder zu Kleine. Nachmessen ergab, dass die Uhr dann an den 
5V des Prozessors lief. Die wurden ueber die Datenleitungen geliefert. 
Die 3.3V wurden hochgedrueckt. Daher bitte die 2.8V Spannung mal 
nachmessen.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A...aha Soooo. schrieb:
> Daher bitte die 2.8V Spannung mal
> nachmessen.

Hab ich grad gemacht...

Exakte 2.85V (Durch spannungsteiler erzeugt da das teil nicht mal 1mA 
verbraucht...)

A...aha Soooo. schrieb:
> Wie gross sind die Widerstaende ?

Hab ich keine, da Die leitungen 5V Logik kompatibel sind
lediglich pullups für SCL und SDA

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du nicht die Möglichkeit den Sensor dorthin zu legen wo die 
Temperatur gemessen werden soll ohne das die ganze Platine mitwandert, 
ist doch klar das wenn sich den Sensor in der Nähe eines analogen 
Spannungsreglers befindet, diese Temperatur mitmisst.

Das mit der Dauer der Temperaturanpassung hängt mit der Wärmekapazität 
des Sensors zusammen. Beispiel wenn ich ein Termomether in ein Glas 
Wasser stelle und dieses einfriere und dann ins Wohnzimmer stelle dauert 
es eine kleine Weile bis mein Thermometer Zimmertemperatur anzeigt.

Bist du auf eine schnelle Messung der Temperaturänderungen angewiesen? 
Wenn ja bau einen Spannungsteiler mit einem Widerstand und einem 
Dünnfilmwiderstand (wenig Wärmekapazität)auf , wäre dann halt analog 
aber sehr schnell anhauchen genugt und schon ändert sich der 
Spannungswert.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas O. schrieb:
> hast du nicht die Möglichkeit den Sensor dorthin zu legen wo die
> Temperatur gemessen werden soll ohne das die ganze Platine mitwandert

Der Sensor befindet sich auf einer eigenen kleinen Platine etwa 1 x 1 cm 
gross und nur die I2C Leitungen führen zur haupt platine

Thomas O. schrieb:
> Das mit der Dauer der Temperaturanpassung hängt mit der Wärmekapazität
> des Sensors zusammen. Beispiel wenn ich ein Termomether in ein Glas
> Wasser stelle und dieses einfriere und dann ins Wohnzimmer stelle dauert
> es eine kleine Weile bis mein Thermometer Zimmertemperatur anzeigt.

Der Sensor war die ganze nacht über an ein und derselben stelle im 
zimmer... Am morgen hab ich eingeschaltet und dan hatte er etwa 3 
minuten bis er die richtige temperatur angezeigt hat... er hatte sich 
angenähert...

Thomas O. schrieb:
> Bist du auf eine schnelle Messung der Temperaturänderungen angewiesen?
> Wenn ja bau einen Spannungsteiler mit einem Widerstand und einem
> Dünnfilmwiderstand (wenig Wärmekapazität)auf , wäre dann halt analog
> aber sehr schnell anhauchen genugt und schon ändert sich der
> Spannungswert.

Die Reaktionsgeschwindigkeit ist sehr schnell..
Ich kann den Sensor auch anhauchen und er zeigt sofort den Messwert :)

Aber danke für den Tipp :)

Autor: Alexander Schmidt (esko) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube auch, dass es die Selbsterwärmung ist.
Suche mal hier im Forum so ähnliche Probleme gabs schon öfters.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Schmidt schrieb:
> Ich glaube auch, dass es die Selbsterwärmung ist.
> Suche mal hier im Forum so ähnliche Probleme gabs schon öfters.

Dann müsste das Teil einen extrem hohen Stromverbrauch haben...
Der thermische Widerstand der Gehäuse ist zwar hier nicht spezifiziert, 
liegt aber bei anderen Herstellern/ICs grob zw. 150 °C/W bis 250 °C/W 
(SO-8, MSOP-8, wenn das IC auf einer Platine sitzt und kein Luftstrom 
vorhanden ist).

2.8 V * 0.75 mA = 2.1 mW d.h. die Selbsterwärmung dürften nur 250 °C/W * 
2.1 mW ~ 0.5 °C sein.

Autor: Alexander Schmidt (esko) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arc Net schrieb:
> 2.8 V * 0.75 mA = 2.1 mW d.h. die Selbsterwärmung dürften nur 250 °C/W *
> 2.1 mW ~ 0.5 °C sein.

Dazu kommt dann noch die Erwärmung des Spannungsteilers. Wenn der Sensor 
1mA verbraucht hat der Spg.teiler einen Querstrom von 10mA.

Ist nach dem Spannungsteiler noch ein Kondensator 10µF und 100nF?

Autor: Remote One (remote1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Schmidt schrieb:
> Ich glaube auch, dass es die Selbsterwärmung ist.
> Suche mal hier im Forum so ähnliche Probleme gabs schon öfters.

Ich arbeite selber auch mit dem Sensor und kann das von dir beschriebene 
Verhalten nicht nachvollziehen. Ich habe nicht solche enormen 
Abweichungen feststellen können. Ich könnte auch nicht behaupten, dass 
der Sensor übermäßig träge ist. Was aber Fakt ist, dass der Sensor bei 
übermäßigen Handhabung (ständig anfassen etc.) natürlich mehr anzeigt 
als die Umgebungstemperatur.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Schmidt schrieb:
> Ist nach dem Spannungsteiler noch ein Kondensator 10µF und 100nF?

ja, hab noch einen 100nF Kondensator dran...

Remote One schrieb:
> Was aber Fakt ist, dass der Sensor bei
> übermäßigen Handhabung (ständig anfassen etc.) natürlich mehr anzeigt
> als die Umgebungstemperatur.

Das ist selbstverständlich klar... ich habe den Sensor aber eben nicht 
angefasst... :)

Du hast geschrieben, das du den Sensor auch selbst einsetzt... Kannst du 
denn bestätigen, das ich die empfangenen Daten korrekt auswerte? (Siehe 
Code am beginn des threads...)

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zwei Dinge könnten zu hoher Eigenerwärmung führen:
- I2C ist mit zu niedrigen PullUp-R's abgeschlossen (zu hoher Strom nach 
Masse bei L)
- oder der Spannungsteiler ist zu niederohmig, und heizt selbst zu viel 
(wenn ebenfalls mit auf dem Sensor-Platinchen)

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens G. schrieb:
> zwei Dinge könnten zu hoher Eigenerwärmung führen:
> - I2C ist mit zu niedrigen PullUp-R's abgeschlossen (zu hoher Strom nach
> Masse bei L)
> - oder der Spannungsteiler ist zu niederohmig, und heizt selbst zu viel
> (wenn ebenfalls mit auf dem Sensor-Platinchen)

Pullups sind 10k


Der Spannungsteiler ist 220 ohm und 330 ohm

und ja er ist auf dem platinchen und sogar mit dem massepin des ic's 
verbunden...

Eventuell ist es wirklich das...

Werde es mal checken.... bzw Spannungsregler auf der Hauptplatine 
einbauen

Danke :)

Autor: Remote One (remote1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Claudio Hediger schrieb:
> Du hast geschrieben, das du den Sensor auch selbst einsetzt... Kannst du
> denn bestätigen, das ich die empfangenen Daten korrekt auswerte? (Siehe
> Code am beginn des threads...)

Da du nicht den ganzen Code zeigst, ist da schwer eine Aussage möglich. 
Du bekommst ja von dem Sensor 2Byte, MSB und LSB. Du hast mit uiTemp ein 
int16 oder der gleichen und damit die beiden einzelnen Bytes 
zusammengefasst. Es weiß aber keiner wie du das gemacht hast. Natürlich 
kann es sein, dass du da einen Fehler drin hast. Mein Code zum DS7505 
bzw. dem DS75LV ist im Artikel zum Thema [[Versenden von SMS mittels 
Mobiltelefon]] mit dabei (Da ist auch eine Funktion mit dabei, welche 
dir die Ausgabe fürs Display ohne deine Division macht)

Autor: Jens G. (jensig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der Spannungsteiler ist 220 ohm und 330 ohm

Naja - sorgt doch schonmal für 50mW - ist schon gut geeignet, um wenige 
Grad zu machen.

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas O. schrieb:
> hast du nicht die Möglichkeit den Sensor dorthin zu legen wo die
> Temperatur gemessen werden soll ohne das die ganze Platine mitwandert,
> ist doch klar das wenn sich den Sensor in der Nähe eines analogen
> Spannungsreglers befindet, diese Temperatur mitmisst.
du und wärme... das geht irgend wie nicht zusammen, hm?

> Das mit der Dauer der Temperaturanpassung hängt mit der Wärmekapazität
> des Sensors zusammen. Beispiel wenn ich ein Termomether in ein Glas
neein, die kapazutät ist winzig
der wärmewiderstand machts aus.

> Wasser stelle und dieses einfriere und dann ins Wohnzimmer stelle dauert
> es eine kleine Weile bis mein Thermometer Zimmertemperatur anzeigt.
DAS ist kapazität und deine "kleine weile" sind wohl eher ~1h.

> Bist du auf eine schnelle Messung der Temperaturänderungen angewiesen?
es wird alle 2,5s gemessen. da gähnt jeder sensor.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen...

Ich habe den Sensor inzwischen umgelötet...

Auf der Sensor Platine befindet sich jetzt auschlieslich der Sensor und 
die Anschlussdrähte...

Die Spannung bekommt er von einem entfernten 3.3V regler...

Merkwürdigkerweise, habe ich immer noch einen offset von 5 Grad

Es ist wirklich sehr merkwürdig....

Habe auch mal einen neuen Sensor getestet... mit diesem ist es das 
selbe..

Autor: Remote One (remote1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Claudio Hediger schrieb:
> Habe auch mal einen neuen Sensor getestet... mit diesem ist es das
> selbe..

Dann zeig doch mal dein ganzes Programm und nicht nur den Ausschnitt. 
Wie bereits erwähnt können da ja auch fehlöer im Zusammenhang mit deiner 
16 Bit Zahl sein. Oder probiere mal die oben angegebene Lib für den 
DS75LV. Die haben beide die gleiche Ansteuerung.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Das mit der Dauer der Temperaturanpassung hängt mit der Wärmekapazität
>> des Sensors zusammen. Beispiel wenn ich ein Termomether in ein Glas
>neein, die kapazutät ist winzig
>der wärmewiderstand machts aus.



Macht beides etwas aus.
Tau = R * C
Das gilt analog auch für Temperaturen

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Remote One schrieb:
> Dann zeig doch mal dein ganzes Programm

Ok...



Hier also der Code...

void Get_Temp(void)
{
  unsigned int uiTemp = 0;
  unsigned char ucVorkomma = 0;
  unsigned char ucNachkomma = 0;
  unsigned char ucVorzeichen = 0;
  I2C_Start();
  I2C_Send_8(0x91);
  uiTemp = i2c_rx(1); //Erstes Byte empfangen
  uiTemp = uiTemp << 8; //Nach links schieben
  uiTemp |= i2c_rx(0); //zweites byte empfangen
  I2C_Stop();


  ucVorkomma = ((uiTemp & 0x7F00) >> 8); //Oberstes bit ist das vorzeichen, daher löschen.
  ucVorkomma = ucVorkomma - ucSubtrakt; //Offset abziehen, ucSubtrakt ist 4
  ucNachkomma = ((uiTemp & 0x00FF) >> 4);
  ucNachkomma = ((ucNachkomma * 625) / 1000);

  if((ucVorkomma != ucVorkomma_alt) || (ucNachkomma != ucNachkomma_alt))
  {
    ucVorkomma_alt = ucVorkomma;  //Bereich löschen auf GLCD
    ucNachkomma_alt = ucNachkomma; 
    lcd_fill_rect (59,15,69,20,WHITE);  //Anzeige löschen
  }

  if((uiTemp & 0x8000))  //Vorzeichen ausgeben
  {
    ucVorzeichen = 1;  //Minus
    lcd_set_cursor(58,LINE2);
    lcd_putc(Font[3],'<');
  }


  lcd_set_cursor(70,LINE2);

  char Buffer[5]; //Temperaturwerte ausgeben
  itoa( ucVorkomma, Buffer, 10 );
  lcd_puts(Font[3],Buffer);
  lcd_putc(Font[3],';');
  itoa( ucNachkomma, Buffer, 10 );
  lcd_puts(Font[3],Buffer);
  lcd_putc(Font[3],'=');
}


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ist nicht komplett.
Wie wird das Teil denn initialisiert?

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich schrieb:
> Macht beides etwas aus.
mal ganz abgesehen davon, dass ich nie etwas gegenteiliges behauptet 
hab...
> Tau = R * C
...ist das eine rein theoretische aussage, die du praktisch eher nie 
antreffen wirst, weil es keine praktische senke ohne vernachlässigbaren 
innenleitwert gibt.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias schrieb:
> Der ist nicht komplett.
> Wie wird das Teil denn initialisiert?

Stimmt

Tut mir leid...

Hier nun also die Initialisation
void Config_DS7505(void)
{
  I2C_Start();
  I2C_Send_8(0x90);  //Schreiben
  I2C_Send_8(0x01);  //Config Register
  I2C_Send_8(0x60);  //Schreiben
  I2C_Stop();
}


void Temp_Register_DS7505(void)
{
  I2C_Start();
  I2C_Send_8(0x90);  //Schreiben
  I2C_Send_8(0x00);  //Temp Register
  I2C_Start();
  I2C_Send_8(0x91);
  i2c_rx(0);
  I2C_Stop();
}

nach dem Config DS7505 wird auf das Tempregister gewechselt...
Und von da werden dann auch die Temperaturmessungen durchgeführt...

Autor: C.H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat niemand mehr eine Idee?

Der Sensor befindet sich nun frei in der luft..

Dennoch steigt die Temperatur stetig seeehr langsam an.. bis zu einem 
Offset von ein paar Grad

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mach mal folgendes:

Alle Initialisierungen durchlaufen lassen.

Einmal die Temperatur auslesen

Konfigurationsregister zurücklesen,
ob da noch der korrekte Wert drinsteht.

Verifizierung des Signals mit einem Oszi oder Logic Analyzer

Die I2C Routine prüft das ACK vom Sensor?

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias schrieb:
> mach mal folgendes:
>
> Alle Initialisierungen durchlaufen lassen.
>
> Einmal die Temperatur auslesen
>
> Konfigurationsregister zurücklesen,
> ob da noch der korrekte Wert drinsteht.
>
> Verifizierung des Signals mit einem Oszi oder Logic Analyzer
>
> Die I2C Routine prüft das ACK vom Sensor?

Ok vielen Dank für den Tipp...

Hab ich gemacht... Stimmt alles so wie es soll... Mit dem Oszi hab ich 
die korrekten Pegel auf dem Logicanalyzer stimmt das byte und die I2C 
Routine prüft bzw wartet auf das ACK des Sensors... Es hat auch kein 
Timeout drinn welches zu früh abbrechen könnte da die wandlung ja 200ms 
dauert...

wahrscheinlich muss ich einfach mit nem offset leben oder ich ruf mal 
bei maxim an :)

Autor: Claudio H. (hedie)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen...

Ich konnte das Problem beheben...

Es lag an der Speisung... Diese hatte aufgrund der I2C Leitung (333kHz) 
sowie des schlechten netzteiles ziemlich unangenehme Rippel drauf... (+- 
20mV)

Ich habe nun ein Filter vor den Sensor gepackt und er läuft nun ziemlich 
einwandfrei :)


Vielen Dank euch allen die mir versucht haben zu helfen...

Anbei noch das von mir verwendete Filter...

Grüsse
Claudio

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Claudio Hediger (hedie)

>Anbei noch das von mir verwendete Filter...

Wie sah denn die Stromversorgung vorher aus? Sag nicht, dass dort GAR 
kein Kondensator war . . .

MfG
Falk

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Wie sah denn die Stromversorgung vorher aus? Sag nicht, dass dort GAR
> kein Kondensator war . . .

hehe es hatte selbstverständlich kondensatoren dort :)


Es sah etwa so aus

Schlecht Stabilisiertes Stecker netzteil -> 1uF -> 3.3V Regler -> 1uF 
Kondensator -> WireWrap Draht -> 100nF Kondensator -> DS7505

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich reicht es, VOR dem 3,3V Regler einen ausreichend großen 
Elko zu platzieren, so 100uF oder so, je nach Strom.

MFG
Falk

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Wahrscheinlich reicht es, VOR dem 3,3V Regler einen ausreichend großen
> Elko zu platzieren, so 100uF oder so, je nach Strom.

Problematisch ist eben, das ich die I2C Leitungen zusammen mit VCC und 
GND verdrillt habe. Somit sind Übersprecher der 333kHz SCL Leitung auf 
VCC kein Problem

Zumal die 333kHz 5V Pegel haben.

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.