Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

DS1820 - negativne temperature !

 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
ivan
Mojster


Pridružen/-a: Pon Mar 2004 18:49
Prispevkov: 45
Kraj: Cerkno

PrispevekObjavljeno: Čet Jan 07, 2010 5:49 pm    Naslov sporočila: DS1820 - negativne temperature ! Odgovori s citatom

Pozdravljeni ,

po dolgem času sem spet vzel v "roke" senzor DS1820, pa bi želel z njiim meriti tudi negatvne temperature. Malo sem gledal po netu, pa nisem uspel dobiti kakšnih koristnih informacij. S spodnjim programom sem posnel, kaj se dogaja ob prehodu skozi negativne vrednosti. Senzor sem
v zaščitni cevki potopil v kopel z alkoholom in zniževal temperaturo
Koda:


'-----------------------------------------------------------------------------------------
'copyright                : (c) 2008-2009, AVRprojects.info
'purpose                  : DS1820 / DS18S20 Temperature Indicator
'-----------------------------------------------------------------------------------------

$regfile = "m8def.dat"
$crystal = 4000000                                          ' nastavimo interni kvarc na 4.000.000 Mhz
$baud = 9600


Declare Sub Read1820
 Config 1wire = Pb.0

'Config Lcd = 16 * 2
'Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0

'Temp variables
Dim Bd1 As Byte
Dim Bd2 As Byte
Dim Bd7 As Byte
Dim Bd8 As Byte

Dim I As Byte , Tmp As Byte
Dim T As Integer , T1 As Integer
Dim T_neg As Single , T1_neg As Single



Dim Bd(9) As Byte                                           'Scratchpad 0-8 72 bits incl CRC, explanations for DS1820
'Sc(1)  'Temperature LSB
'Sc(2) 'Temperature MSB
'Sc(3) 'TH/user byte 1 also SRAM
'Sc(4) 'TL/user byte 2 also SRAM
'Sc(5) 'config  also SRAM x R1 R0 1 1 1 1 1 - the r1 r0 are config for resolution - write FF to byte for 12 bit - others dont care
'Sc(6) 'res
'Sc(7) 'res
'Sc(8) 'res
'Sc(9) '8 CRC

'DALLAS DS1820 ROM and scratchpad commands''''''''''''''''''''''''''1wwrite....
'&H 33 read rom - single sensor
'&H CC skip rom
'&H BE read scratchpad
'&H 44 convert T

'Main loop
'Cls
'Cursor Off
Do
   1wwrite &HCC : 1wwrite &H44                              ' start measure
   Waitms 400                                               ' wait for end of conversion
   Read1820
   Wait 1
Loop
End                                                         'end program

'Read the DS1820 by skipping the ROM checking, since we are using only 1 sensor

Sub Read1820                                                ' reads sensor ans calculate                                               ' T for 0.1 C
   1wreset                                                  ' reset the bus
   1wwrite &HCC                                             ' read internal RAM
   1wwrite &HBE                                             ' read 9 data bytest
   Bd(1) = 1wread(9)
   Bd1 = Bd(1)
   Bd2 = Bd(2)
   Bd7 = Bd(7)
   Bd8 = Bd(8)
                                                             ' read bytes in array
   1wreset                                                  ' reset the bus
      Tmp = Bd1 And 1
      If Tmp = 1 Then Decr Bd1                              ' 0.1C precision
          T = Bd1
          T = T * 50
          T = T - 25
          T1 = Bd8 - Bd7
          T1 = T1 * 100
          T1 = T1 / Bd8
          T = T + T1
          T1 = T / 100                                      'store tens
          T = T Mod 100                                     'store decimal number
          Cls
          Locate 1 , 3
         ' Lcd "Temperature"
         ' Locate 2 , 7
         ' Lcd T1 ; "." ; T

          Print
          Print T1 ; "." ; T

       
End Sub
End



Koda:



Izmerjene vrednosti  vrednosti so v °C

               kopel        DS1820

10:59:20   -   1.29   -   0.31
10:59:27   -   1.09   -   0.28
10:59:34   -   0.99   -   0.28
10:59:41   -   1.06   -   0.25
10:59:48   -   1.11   -   0.16
10:59:54   -   0.91   -   0.11
11:00:01   -   1.06   -   0.8
11:00:08   -   0.91   -   0.4
11:00:15   -   0.89   -   0.2
11:00:22   -   1.09   -   0.-1
11:00:29   -   0.66   -   0.-4
11:00:36   -   0.73   -   0.-9
11:00:43   -   0.53   -   0.-15
11:00:50   -   0.27   -   0.-24
11:00:57   -   0.17   -   127.68
11:01:04   -   0.2   -   127.56
11:01:11   -   0.17   -   127.45
11:01:18   -   0.1   -   127.31
11:01:25   -   0.07   -   127.22
11:01:32   -   0.02   -   127.15
11:01:39   -   0.02   -   127.5
11:01:45   -   -0.08   -   126.96
11:01:52   -   -0.16   -   126.93
11:01:59   -   -0.74   -   126.91
11:02:06   -   -0.31   -   126.88
11:02:13   -   -0.56   -   126.87
11:02:20   -   -0.74   -   126.84
11:02:27   -   -0.62   -   126.81
11:02:34   -   -0.69   -   126.75
11:02:41   -   -0.62   -   126.68
11:02:48   -   -1   -   126.5
11:02:55   -   -0.87   -   126.35
11:03:02   -   -1.15   -   126.26
11:03:09   -   -1.33   -   126.17
11:03:16   -   -1.07   -   126.9
11:03:23   -   -1.28   -   126.3
11:03:30   -   -1.18   -   125.96
11:03:36   -   -1.1   -   125.92
11:03:43   -   -1.53   -   125.85
11:03:50   -   -1.56   -   125.79
11:03:57   -   -1.46   -   125.75
11:04:04   -   -1.35   -   125.67
11:04:11   -   -1.81   -   125.6
11:04:18   -   -1.84   -   125.51


End


Opaženo je tudi manjše odstopanje od dejanske vrednosti.
Lahko tudi zaradi prevelikega naklona temperature.

Ob prehodu skozi 0 se na prvem mestu pojavi 127

Ali se je kdo že ukvarjal s tem in ima kakšen konkreten predlog.

LP ivan[/code]
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Gustav
Profesionalec


Pridružen/-a: Pon Jun 2005 17:19
Prispevkov: 768

PrispevekObjavljeno: Čet Jan 07, 2010 6:41 pm    Naslov sporočila: Odgovori s citatom

Format zapisa v senzorju ni nujno enak formatu zapisa v tvojem programskem orodju. Preuci datasheet senzorja da vidis kako so oblikovani podatkim, katere dobis iz senzorja, in potem vrednost prilagodi za izpis v svojem programu.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Novinec


Pridružen/-a: Čet Jan 2009 10:39
Prispevkov: 5

PrispevekObjavljeno: Ned Jan 16, 2011 11:17 pm    Naslov sporočila: Odgovori s citatom

jaz pa imam sledeč problem, ko merim pozitivno temperaturo mi delo ok, ko pa se pozitivna vrednost približa nuli, se mi vključi segment, ki opozarja, da je temperatura pod lediščem, vendar mi z 0 skoči na 19 in nato šteje dalje vse do 30, vendar te negativne vrednosti niso dobre, kje torej je problem?
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
NUFAN
Profesionalec


Pridružen/-a: Tor Maj 2004 19:57
Prispevkov: 133
Kraj: Žalec

PrispevekObjavljeno: Pon Jan 17, 2011 3:36 pm    Naslov sporočila: Odgovori s citatom

Verjetno v programu Rolling Eyes
_________________
Prihodnost je v nas!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
galex4
Novinec


Pridružen/-a: Čet Jan 2009 10:39
Prispevkov: 5

PrispevekObjavljeno: Pon Jan 17, 2011 4:13 pm    Naslov sporočila: Odgovori s citatom

tudi to je možno, bo še treba malo preštudirat datasheet
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jan 18, 2011 9:52 am    Naslov sporočila: Odgovori s citatom

Obstajata vsaj dva tipa senzorja
DS18S20 in DS18B20
Se uporabljata enako, če si zadovoljen z natančnostjo do 0.5 C
Desetinke se izračunajo drugače.
Nikoli se nisem ubadal z desetinkami.

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Novinec


Pridružen/-a: Čet Jan 2009 10:39
Prispevkov: 5

PrispevekObjavljeno: Tor Jan 18, 2011 10:58 am    Naslov sporočila: Odgovori s citatom

ja to vem, vendar nevidim potrebe po tistih 0.5°C, ker nimam zadosti 7 segmentnih prikazovalnikov in je zadovoljivo samo, da prikaže v celoti.

Vendar ne razumam zakaj je tak velik skok iz 0 na -19, pozitivne stopinje pa so zadovoljive vrednosti
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jan 18, 2011 12:33 pm    Naslov sporočila: Odgovori s citatom

galex4 je napisal/a:
ja to vem, vendar nevidim potrebe po tistih 0.5°C, ker nimam zadosti 7 segmentnih prikazovalnikov in je zadovoljivo samo, da prikaže v celoti.


Če ti je na polovico stopinje dovolj natančno, potem je dovolj, da iz prvih dveh bajtov narediš integer.
V njem je temperatura v polovičkah stopinje.
Če si zadovoljen s stopinjami, potem to samo deliš z 2 in imaš stopinje.

Definicije:
Koda:
Dim Bd(9) As Byte   
dim polovicka as integer at Bd(1) overlay

Integer sem definiral kar preko definicije Bd(1) in Bd(2) ker ima integer dva bajta.

Subread12 bi napisal morda tako:
Koda:
Sub Read1820                                                ' reads sensor ans calculate                                               ' T for 0.1 C
   1wreset                                                  ' reset the bus
   1wwrite &HCC                                             ' read internal RAM
   1wwrite &HBE                                             ' read 9 data bytest
   Bd(1) = 1wread(9)
   1wreset                                                  ' reset the bus
          T = polovicka / 2
 
          Print  T ; " C"       
End Sub


Seveda tega nisem testiral, lahko da sem naredil kako manjšo napako, ki jo popravi sam!

_________________
Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Novinec


Pridružen/-a: Čet Jan 2009 10:39
Prispevkov: 5

PrispevekObjavljeno: Tor Jan 18, 2011 12:44 pm    Naslov sporočila: Odgovori s citatom

se opravičujem ker nisem napisal v katerem jeziku programiram in katere čipe programiram,

čipe PIC programiram v mikrobasic-u, saj načeloma je podobno, le da moram paziti pri ukazih

kako izgleda koda je pa tule:


program ds

symbol segment2 = PORTD
symbol segment1 = PORTC
symbol minus = PORTB.5
dim i as short
temp as word
const x = 0.488

main:
TRISA = %00000111
'vsi pini so digitalni razen AN0, ki je analogen
ADCON1 = %00101110
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
segment1 = 0
segment2 = 0
i = 0
minus = 0

while true
Ow_Reset(PORTA, 1) ' Onewire reset signal
Ow_Write(PORTA, 1, 0xCC) ' Issue command SKIP_ROM
Ow_Write(PORTA, 1, 0x44) ' Issue command CONVERT_T
delay_us(120)

Ow_Reset(PORTA, 1)
Ow_Write(PORTA, 1, 0xCC) ' Issue command SKIP_ROM
Ow_Write(PORTA, 1, 0xBE) ' Issue command READ_SCRATCHPAD

temp = Ow_Read(PORTA, 1)
temp = (Ow_Read(PORTA, 1) << Cool + temp

i = x * temp

......

wend
end.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group