DS1820 Umrechnung

Gast #2157631
Lesenswert?
• ▲
▼
Guten Tag,

ich habe eine sicherlich eigentlich ganz einfache Frage. Ich habe noch 
ein paar alte DS1820 da und möchte die Temperatur auslesen.

Nun habe ich die hier ja bereits viel bekannte Library von Peter 
Dannegger verwendet. Leider hat sie meinen DS1820 nicht erkannt, da er 
einen alten Romcode, 0x22 hat. Dies habe ich experimentiert angepasst.

Nun habe ich mit der Temperaturumrechnung etwas experimentiert komme 
aber nicht weiter. Ich hoffe das hier wer den Fehler einfach sieht.

Es soll die aktuelle Temperatur als dreistellige Dezimalzahl ausgegeben 
werden. z.B. 22,0 = 220.

hier mal der Code ausschnitt:
1
uint16_t read_meas( void )
2
{
3
  uint16_t rueckgabe=0;
4
  uchar id[8], diff;
5
  uint temp;
6

7
  for( diff = SEARCH_FIRST; diff != LAST_DEVICE; ){
8
    diff = w1_rom_search( diff, id );
9

10
    if( diff == PRESENCE_ERR ){
11
  errormsg("No Temp Sensor"); 
12
      break;
13
    }
14
    if( diff == DATA_ERR ){
15
  errormsg("Temp Bus fail"); 
16
      break;
17
    }
18
    if( id[0] == 0x22 || id[0] == 0x10 ){  // temperature sensor DS1820 & DS1822
19
      w1_byte_wr( READ );      // read command
20
      temp = w1_byte_rd();      // low byte
21
      //temp |= (uint)w1_byte_rd() << 8;    // high byte
22
      if( id[0] == 0x10 )      // 9 -> 12 bit
23
        temp <<= 3;
24

25
        //sprintf( s, "%3d.%01d", temp >> 4, (temp << 12) / 6553 ); // 0.1øC
26
  //rueckgabe = (uint8_t) ((temp >> 1)*10) + ((temp << 8) / 66);
27
        rueckgabe = (uint8_t) ((temp*10) / 26);
28
    }
29
  }
30
return rueckgabe;
31
}

Danke schon mal,

Gruß Martin
Gast #2157736
Lesenswert?
• ▲
▼
Der DS1820 hat den selben Familycode wie der DS18S20 -> 10h. Der DS1822 
z.B. hat den Familycode 22h.

Die Sensoren DS1820 und DS18S20 sind auch nicht baugleich. Der DS1820 
arbeitet intern mit zwei Generatoren und Counter, und beim DS18S20 
funktioniert die Wandlung mit einen Sigma-Delta A/D-Wandler. Was zur 
Folge hat, dass der DS1820 verschiedene Werte für 'COUNT PER °C' 
liefert. Dieses Register ist beim DS18S20 aus Kompatibilitätsgründen 
noch vorhanden, und liefert immer den Wert 16 (10h).

Solange man nur mit der 9bit-Auflösung (0,5 K) arbeitet ist das kein 
Problem. Wenn man aber die volle Auflösung möchte, muss man das 
berücksichtigen.

Funktioniert ein DS18S20 in deiner Schaltung?

Gruß
John
Gast #2157744
Lesenswert?
• ▲
▼
Ist ja interessant, der DS1820 hat ja noch keine Bandgap, sondern 
arbeitet mit zwei Oszillatoren mit verschiedenen 
Temperaturkoeffizienten.

Für die moderneren mit Bandgap habe ich hier einen sehr kompakten Code 
entwickelt:
Beitrag "DS18S20 - extended resolution bei Temperaturen um 0°C"

Reichen Dir 0,5°C Auflösung?, dann ist es ja sehr einfach.

Wenn nicht, musst Du die Formel mit dem CountRemain verwenden, die im 
Datenbuch angegeben ist. Dabei aufpassen: wenn Du mit signed-Variablen 
arbeitest, stimmt das Ergebnis evtl. nicht.
Hier im Forum sind mehrere Codes gepostet.

Was mich interessiert: welchen Wert hat CountsPerDegree bei 
verschiedenen Temperaturen? Der ist nämlich nicht konstant, sondern von 
der Temperatur abhängig. Kannst Du mal bitte ein paar Werte posten?

Wenn Du Dir die Division sparen willst, reicht es evtl. für die 
Genauigkeit aus, den festen Wert 128 CountsPerDegree zu verwenden (>>7).
Gast #2157899
Lesenswert?
• ▲
▼
Nabend,

es ist wirklich ein DS1820. Habe davon noch ein paar und würde sie 
deswegen gerne noch einsetzen. Die Schaltung hat keine Hochgenauen 
Ansprüche. Es ist eine Temperaturüberwachung von Akkus für den 
Modellbau.

Es reichen 0.5 °C. Das mit der Variablen 'COUNT PER °C' wuste ich ja gar 
nicht, interessant.

Leider hat Maxim ja das alte Datenblatt auch nicht mehr online und hier 
im Forum ist auch das von DS18S20 für den DS1820 drin.

Dann muss ich mir wohl doch nochmal genauer angucken wie er 
funktioniert. Ich hatte mich bis jetzt am DS18B22 orientiert und über 
die komischen Werte gewundert.
Interessanter weise kommt meine empirisch ermittelte Umrechnung recht 
gut hin.


MfG Martin
Gast #2157946
Lesenswert?
• ▲
▼
Finde ich auch schade, dass man auf deren HP das Datenblatt nicht mehr 
findet, genauso wenig die app105.

Trau der Beschriftung nicht! Ich habe von Pollin welche, auf denen 
DALLAS DS1820 1022C4 +824AJ steht, aber sicher keine DS1820, sondern 
DS18S20 sind (countPerDegree ist immer 16).

Kannst Du mal die Seriennummer auslesen und mit dem exakten Aufdruck 
posten?

Meine: 0008020b798c und 0008020b76e0
Scanning-Bus-for-DS18X20
2-DS18X20-Sensor(s)-available:
#-in-Bus-:1-:-FC:10-(18S)SN:-8C-79-0B-02-08-00-CRC:5F--CRC-O.K.-
#-in-Bus-:2-:-FC:10-(18S)SN:-E0-76-0B-02-08-00-CRC:8E--CRC-O.K.-
Sensor#-1-is-a-DS18S20/DS1820-which-is-parasite-powered
Sensor#-2-is-a-DS18S20/DS1820-which-is-parasite-powered

DS18B20 hat FC 0x28
Gast #2158100
Lesenswert?
• ▲
▼
So ein misst hab es doch glatt im falschen Tread gepostet.

Vielleicht hilft euch das hier weiter:

 Temp_read = (scratchpad[0]) * 0.5 ;

    Count_Remain = scratchpad[6];
    Count_PER_C = scratchpad[7];
    temp = (float)Temp_read -0.25 + ((Count_PER_C - Count_Remain) /
Count_PER_C)  ;

Für negative Temperaturen müsste man scratchpad[1] einer Variablen zu
weisen und prüfen ob FFh drinne steht.

Wenn FFh ein Flag setzen für die Ausgabe des minus Zeichen.
Dann das Zweierkomplement bilden mit scratchpad[0]) und
denn Rest normal weiter rechnen lassen.

Die Berechnung oben löst die Temperatur in 0,1 °C schritten auf.

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.