Als DS1820 gemarkeerde sensor blijkt DS18B20


Ik kan de family echt wel uitlezen. Van de 6 sensoren uit de 20 die ik nu heb uitgelezen, hadden ze alleen niet allemaal dezelfde family code volgens mij (de meeste 28h, wat inderdaad ook op een DS18B20 duidt, kom ik nu achter), maar ik dacht één of twee niet. Deze doen het echter nu wel op de 12-bits temperatuur uitlezing, dus het zullen ook wel DS18B20 sensoren zijn.

Ik zit nu op mijn werk, maar zal thuis eens nakijken welke family byte deze afwijkende sensoren terug gaven.

Ik ga toch meer voor de verklaring van Hoeben, zou alleen niet verwachten dat men dit soort goedkope componenten bewust van een nieuwe opdruk voorziet. Ze werken verder goed als DS18B20 in de regelaar ook met negatieve temperaturen, nu ik de software heb aangepast.

Vervelend dat er dit soort gemarkeerde componenten op de markt verschijnen, terwijl er wat anders in zit. Dit kan natuurlijk voor problemen gaan zorgen.

Robert.

Ze hebben wel allemaal family byte 28h. Ik heb me vergist door het 16 karakter lcd display waar dit allemaal moeilijk op paste en ik een aantal bytes tegen elkaar moest printen. Het zijn dus gewone DS18B20 temperatuur sensoren, maar met een DS1820 opdruk en ook zo verkocht.

Lastig, misschien gedaan om een paar centen te kunnen verdienen per sensor of een offspec die toch op de markt is gekomen.

Robert.

Ik denk dat het een namaak is. Kijk anders eens naar de opdruk, daar kun je het vaak aan zien. De namaakdingen hebben een opdruk die in het begin wat meer helder is dan de echte. Maar die vervaagt wel gauwer onder invloed van warmte (solderen) en die staat er soms ook scheef of niet gecentreerd op.

Hoeben

Golden Member

De fakers hebben professionele lasers tegenwoordig, dezelfde als de fabrikanten. Alles wordt nagemaakt. Zelfs "kippenvoer" weerstanden.

Het zal inderdaad wel namaak zijn. Toch vreemd dat men in staat is een goed werkende 12-bit DS18B20 sensor na te maken en ze dan wil verkopen voor de oudere, 9-bit DS1820.

Ik heb een aantal van deze 12-bits digitale sensoren getest bij 100 C tegen de wand van mijn waterkoker en bij -18 C in mijn vriezer. Ze weken echt minimaal af en bleken net zo lineair als de originele DS1820 die ik al had.

Je moet toch nog wel wat kunnen op gebied van engineering om zo'n IC alleen al te kopiëren en je moet ook de nodige, dure apparatuur hebben om deze in aantallen te produceren. Dit lijkt me in China dus geen technisch probleem of gebrek aan kennis te zijn. Ook kwalitatief kan ik niet zeggen dat er wat aan mankeert, behalve het feit dat de opdruk en typeaanduiding niet klopt.

Het probleem in China is dan mogelijk de betrouwbaarheid van de commercie. Ze hebben er geen problemen mee iets na te maken. Ook denken ze een bepaald IC ietwat duurder te kunnen verkopen en katten andere IC's dan kennelijk gewoon om.

Het vreemde hier is echter dat ik een dispuut heb geopend (ik had ze inderdaad besteld via Aliexpress) en de helft van het aankoopbedrag heb gevraagd als schadevergoeding, omdat ik de software moest aanpassen naar deze 12-bit sensoren. En wat denk je, binnen een paar dagen werd dit door de verkoper gehonoreerd en de dag daarna had ik het bedrag al op mijn bankrekening.

Dit is dan toch wel weer redelijk. Ze gaan tot nu toe echter wel gewoon door met het verkopen van deze namaak 12-bit sensor als een 9-bits DS1820, wat dus weer minder netjes is. Gaan we de Chinezen ooit begrijpen?

Robert.

Er stond mij iets bij dat de resolutie (=het aantal bits) instelbaar was. Even nakijken....

Het klopt. Met de configuratie byte kan je aangeven in welke resolutie je de temperatuur terug wil krijgen: 9, 10, 11 of zelfs 12 bits. Je kan dit dus aanpassen en hem gewoon 9 bits laten uitspuwen.

Zie datasheet: https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf Pagina 8 en 9 edit:7.

Dank je wel Blauw Lampje,

Ik had voor een temperatuurregelaar voor een telescoop echter zes stuks DS1820 gebruikt (alleen 9-bits temperatuur waarde), maar met behulp van de slope en remain bytes die deze sensor ook teruggeeft, valt de resolutie bijna nog een decimaal te verbeteren. Hiermee kreeg ik ze op een gewenste nauwkeurigheid van 0,1 C.

Deze regelaar wordt nu door een aantal mensen nagebouwd en ik moest dus een aantal pics programmeren met voor-geadresseerde sensoren. Vervelend dat je dan andere sensoren kreeg. Ik heb de DS18B20 echter gewoon op 12-bit laten staan. Dit geeft dan zonder deze slope en remain byte correctie ook een nauwkeurigheid van 0,1 C.

Robert.

Hiermee kreeg ik ze op een gewenste nauwkeurigheid van 0,1 C.

Je bedoelt resolutie. Nauwkeurigheid is 0.5°C
Met de DS1820 kun je ook een grotere resolutie krijgen door meerdere samples te middelen.
Dat doet de DS18b20 onder de motorkap tenslotte ook. (2, 4, of 8 samples)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

De temperatuurwaarde komt bij een DS1820 terug in 9-bits en heeft bij een range van -55 tot +125 C dan inderdaad een resolutie van maximaal 0,5 C.

Maar je krijgt bij deze sensor nog twee waarden terug: de remain en slope byte. Hiermee kun je rekenen en de resolutie van de temperatuur verder verbeteren tot 0,0625 C. Ik rond dit af tot een nauwkeurigheid van 0,1 C.

Kijk maar in de datasheet van de DS18(S)20 of op de site picbasic.nl onder het project temperatuursensor DS1820.

Robert.

rweust, wat arco probeerde te zeggen is dat de RESOLUTIE Misschien 0.1 graden is maar de nauwkeurigheid waarschijnlijk/offficieel maar 0.5 graden is. Als het ding -0.4 graden aangeeft kan het best 0.1 graden zijn. (ook al heeft ie nog een aantal stappen er tussenin).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Dat lijkt mij dus echt niet het geval. Bij afkoelen zie je keurig de temperatuur, gelijkmatig in stappen van 0,1 C dalen. Dit geldt niet voor één sensor, maar zelfs voor 6 tegelijk. Ze komen ook altijd op dezelfde kamer of buiten temperatuur weer uit (ook als deze ondertussen een paar tienden graden is veranderd). Ik gebruik ze onder buitenomstandigheden op mijn telescoop (zelfs bij vorst) en ook hier vind ik geen abnormale afwijkingen. Ik werk op de telescoop met onderlinge temperatuurverschillen tussen de verwarmde zones die allen binnen een 0,5 C venster liggen samen met de buitentemperatuur (zie grafiek).

http://i1294.photobucket.com/albums/b602/rweust/Temperatuur%20vangspiegel%20gecorrigeerd_zps27gxdirt.jpg

Ik kan ze in de software kalibreren (ook in stappen van 0,1 C) en ze volgen keurig de temperatuur van mijn lab kwik thermometer die ook beduidend nauwkeuriger is dan 0,5 C. Dit heb ik over een grote range bij -12 C, 21 C en 100 C getest. Geloof me (en als je mij niet gelooft, lees dan de site van Frits Kieftenbelt: picbasic.nl eens of kijk in de datasheet) de DS18(S)20 sensoren zijn echt nauwkeuriger te krijgen dan 0,5 C. Ik heb geen enkele reden om te twijfelen aan de 0,1 C nauwkeurigheid.

Bovendien kan ik ze nu vergelijken met de 12-bits DS18B20, helaas niet tegelijk of door elkaar, maar wel onder dezelfde omstandigheden. De DS18(S)20 met remain en slope byte correctie voor een betere resolutie en de 12-bit DS18B20 werken met dezelfde nauwkeurigheid van 0,1 C op mijn regelaar. Geen verschillen in temperaturen, geen rare sprongen of onderlinge afwijkingen, geen afwijkingen t.o.v. een nauwkeurige lab kwik thermometer. Ik kan niet anders zeggen dan dat het gewoon goed werkt.

Maar in ieder geval bedankt voor de waarschuwing.

Robert.

Voor mijn gevoel is een afkeurpartij, verkeerde opdruk 'DS1820' ipv 'DS18B20', niet vernietigd maar op een vreemde manier op de markt gekomen.

Bezoek mijn neefjes' site: www.tinuselectronics.nl

Op 6 februari 2016 19:30:06 schreef rweust:
eens of kijk in de datasheet) de DS18(S)20 sensoren zijn echt nauwkeuriger te krijgen dan 0,5 C. Ik heb geen enkele reden om te twijfelen aan de 0,1 C nauwkeurigheid.

Robert, het lijkt er op dat je het verschil "resolutie" en "nauwkeurigheid" niet begrijpt.

De resolutie is zeker 0.1 graden. Of zelfs 0.0625 graden. Maar de nauwkeurigheid is, en ik heb het zojuist in het datasheet opgezocht, 0.5 graden.

Dat wil zeggen dat ALS ie X aangeeft, de temperatuur ergens tussen X-0.5 ? en X+0.5 ? zal zitten. De afwijking is vrijwel voor 100% bij fabrikage "ingebakken". Ze specificreren: "drift max 0.2 ?". Dus als jij met een ijs-bak de boel netjes corrigeert, zal vanaf dat moment de meting binnen 0.2 ? kloppen. In de praktijk is de drift ZELDEN zo groot als het opgegeven maximum. Extreme temp schommelingen, blootstelling aan rare omgevingen, met al die ongein moet ie volgens het datasheet binnen die 0.2 ? blijven. Dus als jij "rustig" er mee omgaat, is de kans heel groot dat je binnen de 0.1 ? blijft.

Maar dat is dus na calibratie en het corrigeren voor een exemplaar afhankelijke offset.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Resolutie is volgens mij de hoogst haalbare "fijnheid" van het getal. Hoe je het ook definieert, kleinst mogelijke stapje in een digitaal signaal of bv. op een scherm hoogste aantal pixels op een oppervlak.

Nauwkeurigheid geeft aan hoe dicht een gerepresenteerd of gemeten getal in de buurt van de werkelijkheid zit onder verschillende omstandigheden.

Het kan zijn dat de absolute nauwkeurigheid van een sensor iets van 0,5 C is. Ik denk dat jij bedoelt dat ze in absolute waarde over hun hele range iets kunnen afwijken door drift of a-lineariteit. Ga je ze echter in een beperkter gebied kalibreren, dan zal deze absolute afwijking beslist verlaagd worden, zoals je zelf ook al aan gaf. Ik kwam niet hoger uit dan iets 0,3 C tussen de -18 en 100 C. Ik heb echter analoge kwik thermometers om mee te vergelijken en deze geven een verschil van 0,1 C wel al wat moeilijk aan.

Waar het bij mijn toepassing om gaat is dat het meetverschil tussen de sensoren onderling, ik noem het even de relatieve nauwkeurigheid, dus bijvoorbeeld tussen 6 stuks DS18(S)20 sensoren op een breadbord, nog veel minder is. Dit komt bij mijn gebruik met de telescoop echt op 0,1 C nauwkeurigheid uit. Dit is door mij al onder verschillende omstandigheden getest. Ik denk dat de grootste afwijking in de temperatuur nauwkeurigheid dan ook door iets a-lineariteit over een groot temperatuurbereik veroorzaakt wordt en niet door drift o.i.d.

Het is mij echter niet opgevallen dat de 12-bit DS18B20 hier beter presteert dan de oudere 9-bit DS18(S)20 met verhoogde resolutie door gebruik van de slope en remain byte. Dit is wat ik wilde aangeven, vandaar misschien de verwarring. Ze zijn beide goed bruikbaar om de temperaturen van de optiek en andere onderdelen aan een telescoop goed met een nauwkeurigheid van 0,1 C te regelen.

Misschien dat dit iets van de werkelijke, absolute temperatuur afwijkt. Zoals jij al aangaf, zal dit echter beslist geen 0,5 C zijn. Ik heb ze op 20 C gekalibreerd en bij de dit jaar laagst opgetreden buitentemperatuur zal dit misschien 0,1 of 0,2 C absolute afwijking geven. De nauwkeurigheid bij een verschilmeting in een regeling met de eveneens door een DS18(S)20 of DS18B20 gemeten buitentemperatuur is echter nog minder, in mijn geval de 0,1 C van de resolutie, zoals de grafiek ook al liet zien.

Robert.

Zoals gezegd haalt de 'B' versie de hogere resolutie door middelen. Duidelijk te zien doordat de detectietijd verdubbelt bij ieder extra bit resolutie...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
Hoeben

Golden Member

Op 6 februari 2016 14:30:19 schreef rweust:
...
Het vreemde hier is echter dat ik een dispuut heb geopend (ik had ze inderdaad besteld via Aliexpress) en de helft van het aankoopbedrag heb gevraagd als schadevergoeding, omdat ik de software moest aanpassen naar deze 12-bit sensoren. En wat denk je, binnen een paar dagen werd dit door de verkoper gehonoreerd en de dag daarna had ik het bedrag al op mijn bankrekening.

Dit is dan toch wel weer redelijk. Ze gaan tot nu toe echter wel gewoon door met het verkopen van deze namaak 12-bit sensor als een 9-bits DS1820, wat dus weer minder netjes is. Gaan we de Chinezen ooit begrijpen?

Robert.

Niet zo vreemd. Doordat ze het dispuut oplossen kunnen ze onder dezelfde naam gewoon doorgaan met de verkoop van fake componenten. Die ene keer dat ze terug moeten betalen hebben ze allang ingecalculeerd.

EricP

mét CE

Heb je Maxim al eens benaderd? Die vinden het wellicht ook wel interessant.

Op 7 februari 2016 07:10:51 schreef EricP:
Heb je Maxim al eens benaderd? Die vinden het wellicht ook wel interessant.

Misschien dat ik dit maar eens doe. Ik heb wel een vergoeding gekregen, maar ze gaan inderdaad gewoon door met het verkopen van deze verkeerd gemarkeerde sensoren. Verder stoort het me dat de slechte review die ik heb gegeven ook niet zichtbaar is, lijkt gewist. Kennelijk heeft bij Aliexpress de verkoper hier meer invloed op dan de koper.

Robert.

@rweust, zou je mij kunnen helpen. Ik heb een probleem met het juist uitrekenen vd temperatuur.
Nu gaat het tempverloop zo:

21.4, 21.5, 22.6, 22.7, 22.8, 22.9, 22.0

ik denk dat ik Count Remain berekening fout heb voor deze sensor.
Ik gebruik de lib uit de OneWire-SDK van Dallas voor Delphi.

code:


Function TSensorThread.ReadTemperature(session_handle : longint): Extended;
var
 tsht, i, tmp1 : smallint;
 cr,cpc,tmp : Extended;
 rbuf : array[0..9] of smallint;
 CRCByte : Byte;
begin
 tmp := 0.00;
 {access the device}
 if (TMAccess(session_handle,@StateBuf)= 1) then
  begin
   {Send the recall E2 command (by setting $B8 to outbyte in TMTouchByte)
    make sure Scratch is correct}
   TMTouchByte(session_handle, $B8);
   {Send the start T command }
   if (TMAccess(session_handle,@StateBuf) = 1) then
    begin
     {Prepare the strong pullup after next TMTouchByte}
     TMOneWireLevel(session_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP, PRIMED_BYTE);
     {Send the conversion command (by setting $44 to outbyte in TMTouchByte)}
     TMTouchByte(session_handle, $44);
     {Sleep for a second}
     Windows.Sleep(1000);
     {Disable the strong pullup}
     TMOneWireLevel(session_handle, LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE);
     {verify conversion is complete by setting $01 to outbit in TMTouchBit and
      check the return value with 1}
     if (TMTouchBit(session_handle,$01) = $01) then
      begin
       {Access device}
       If (TMAccess(session_handle,@StateBuf) = 1 ) then
        begin
         {Send read scratch command by setting $BE to outbyte in TMTouchByte}
         TMTouchByte(session_handle,$BE);
         CRC8 := 0;
         {Read scratch (setting $FF to outbyte in TMTouchByte) and check crc for
           each byte}
         for i := 0 to 7 do
          begin
            rbuf[i]:= TMTouchByte(session_handle, $FF);
            CRCByte := Byte(rbuf[i]); { the byte to run through CRC8 routine }
            CRC8 := TMCRC(1, @CRCByte, CRC8, 0);
          end;
         {Check crc}
         CRCByte := Byte(TMTouchByte(session_handle, $FF)); { the byte to run through CRC8 routine }
         CRC8 := TMCRC(1, @CRCByte, CRC8, 0);
         if ( CRC8 = 0 ) then
          begin
            {Calculate the temperarure}
             tsht := rbuf[0];
             if ((rbuf[1] and $01)= 1) then
               tsht := tsht or (-256);
             tmp1 := Round((tsht)/2);
             tmp := tmp1;
             cr := rbuf[6];
             cpc := rbuf [7];
             if (rbuf[7] <> 0) then
               tmp := tmp - (0.25) + (cpc-cr)/cpc;

          end;
        end;
      end;
    end;
  end;
  ReadTemperature := tmp;
end;

@william22: Dit was een topic uit 2016 wat je weer naar boven hebt gehaald en vraagsteller heeft hier maar ooit één vraag gesteld en is nooit weer gezien.

Maak je eigen topic aan!!!!

Domoticz en ESP8266, goede combo!!!

@Roches,
Je hebt gelijk. Grote kans dat @rweust geen oplossing biedt.
Voor mijn gevoel is het een simpel softwarefoutje. Omdat DS18B20 geen rocketscience is, is er vast wel een CO-er die @william22 kan helpen.
Je kunt ook de heer @william22 uit de puree helpen. Dan kan dit topic weer een tijdje slapen of op slot. Dat is aan de modjes.

Bezoek mijn neefjes' site: www.tinuselectronics.nl
Hoeben

Golden Member

Er is een Chinese fabrikant die fakes verkoopt. Dit zijn waarschijnlijk deze componenten. Dat verklaart ook waarom ze de sensor hier
https://dochub.com/pieterhoeben/6xJ6nv/ds18b20-stainless-ste...-probe-tem
goedkoper kunnen verkopen dan het component.

De namaak is RW1820 van Rayway International. Ik kan je de datasheet wel sturen, bij interesse.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

code:


Function TSensorThread.ReadTemperature(session_handle : longint): Extended;
var
 tsht, i, tmp1 : smallint;
 cr,cpc,tmp : Extended;
 rbuf : array[0..9] of smallint;
 CRCByte : Byte;
begin
 tmp := 0.00;
 {access the device}
 if (TMAccess(session_handle,@StateBuf)= 1) then
  begin
   {Send the recall E2 command (by setting $B8 to outbyte in TMTouchByte)
    make sure Scratch is correct}
   TMTouchByte(session_handle, $B8);
   {Send the start T command }
   if (TMAccess(session_handle,@StateBuf) = 1) then
    begin
     {Prepare the strong pullup after next TMTouchByte}
     TMOneWireLevel(session_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP, PRIMED_BYTE);
     {Send the conversion command (by setting $44 to outbyte in TMTouchByte)}
     TMTouchByte(session_handle, $44);
     {Sleep for a second}
     Windows.Sleep(1000);
     {Disable the strong pullup}
     TMOneWireLevel(session_handle, LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE);
     {verify conversion is complete by setting $01 to outbit in TMTouchBit and
      check the return value with 1}
     if (TMTouchBit(session_handle,$01) = $01) then
      begin
       {Access device}
       If (TMAccess(session_handle,@StateBuf) = 1 ) then
        begin
         {Send read scratch command by setting $BE to outbyte in TMTouchByte}
         TMTouchByte(session_handle,$BE);
         CRC8 := 0;
         {Read scratch (setting $FF to outbyte in TMTouchByte) and check crc for
           each byte}
         for i := 0 to 7 do
          begin
            rbuf[i]:= TMTouchByte(session_handle, $FF);
            CRCByte := Byte(rbuf[i]); { the byte to run through CRC8 routine }
            CRC8 := TMCRC(1, @CRCByte, CRC8, 0);
          end;
         {Check crc}
         CRCByte := Byte(TMTouchByte(session_handle, $FF)); { the byte to run through CRC8 routine }
         CRC8 := TMCRC(1, @CRCByte, CRC8, 0);
         if ( CRC8 = 0 ) then
          begin
            {Calculate the temperarure}
             tsht := rbuf[0];
             if ((rbuf[1] and $01)= 1) then
               tsht := tsht or (-256);


    tmp1 := Round((tsht)/2); Ik denk dat deze instructie fout is;
    tmp1 := Trunc((tsht)/2); Ik denk dat dit het moet zijn. 
Als ik gelijk heb is het goed, anders wordt het een grote bende.
Dat wordt dus effe uitproberen.

             tmp := tmp1;
             cr := rbuf[6];
             cpc := rbuf [7];
             if (rbuf[7] <> 0) then
               tmp := tmp - (0.25) + (cpc-cr)/cpc;

          end;
        end;
      end;
    end;
  end;
  ReadTemperature := tmp;
end;
Bezoek mijn neefjes' site: www.tinuselectronics.nl

Bedankt heren!
Code zojuist aangepast en nu druk bezig met testen.
Ik houd jullie op de hoogte.
Geweldig die hulp van jullie.