walniete DS18B20 ? odczyt tylko do #02ffh

Sep 05, 2005 6 Replies

problem mam nie lada - za chwile mam utopic w wylewanym betonie ogrzewanie oraz czujnik temperatury.... Chcialem uzyc DS18B20, bo mam ich pudelko... a tu nagle zonk. W regulatorze ktory byl kiedystam zmontowany - pomiar chodzi do ~ 47 stC. Wiec myslalem ze cos jest walniete, zrobilem na szybko soft testowy w bascomie i hardware.



ds18B20, zasilany z +5v wraz z reszta elektroniki (nie parasite-power, choc na parasite ten sam objaw jest), na 1m kabla koncentryk "mikrofonowy". Dla pewnosci po conwert daje 1sekunde delaya pomiar zdaje sie dzialac, calkie ladnie mierzy ale tylko do ~47 stC, dokladnie do odczytu 02FFh z scratchpada. gdy powinno byc juz 0300h - przeskakuje na FFFFh i tak trzyma do momentu wystygniecia ponizej tej wartosci i dalej mierzy. Moze blad jest w sofcie? Czy mam liczyc ze mam 20szt ds18b20 z takim samym errorem ?



$regfile = "89s8252.dat" $crystal = 24000000 ' 24MHz $baud = 9800 ' rs232 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = P2.4 , Db5 = P2.3 , Db6 = P2.2 , Db7 = P2.1 , E = P2.5 , Rs = P2.6 Dim T1 As Single Dim T22 As Byte Dim T33 As Byte Config 1wire = P1.5 ' 1 wire Cls Mierz: 1wreset 1wwrite &HCC ' skip rom 1wwrite &H44 ' conwert Wait 1 ' czas na pomiar temp. 1wreset 1wwrite &HCC ' skip rom 1wwrite &HBE ' read scratchpad T22 = 1wread() ' read LSB Cls Upperline Lcdhex T22 ; " "; T33 = 1wread() ' read MSB



Lcdhex T33 ; " "; Lowerline T1 = Makeint(t22 , T33) T1 = T1 / 16 Lcd T1 Waitms 250 Goto Mierz



Przeczytaj caly ScratchPad lacznie z CRC, bedziesz wiedzial czy to twoj DS tak mierzy (prawidlowa suma CRC) czy odbierasz bledne dane (blad CRC).

T.M.F. napisał(a):

jest error z odczytem chyba, bo scratchpad wyglada przy odczytach np tak

9C 01 1E 1C 7F FF 03 10 (crc) potem np FF 01 ..... lub xx 02 .... ale gdy dochodzi do

FE 02 .... jest jeszcze ok, troszke tylko podgrzewam i FF FF FF FF FF FF FF FF

A mozesz sprobowac "recznie" odczytac tego DS za pomoca wlasnych procedurek, a nie z poziomu Bascoma? Ew. podpnij go pod RS232 w kompie i odczytaj za pomoca ktoregos z darmowych programow.

T.M.F. snipped-for-privacy@nospam.mp.pl> napisał(a):

Ja bym proponował zmienić kwarc na 11059200, lub kompilator. Procedury 1wire w Bascom8051 napisane są dla kwarcu j/w i działają(różnie) w granicach 8-14MHZ.Dyrektywę $crystal=xxxxx to Bascom "olewa" jeśli chodzi o

1wire.Sprawdziłem to doświadczalnie , jak podpiąłem DS-a pod 89c4051 z kwarcem 4MHz.Za żadne skarby nie mogłem się porozumieć z DS-em i wtedy dobrałem się do kompilatora.Czy kompilowałem dla $crystal=1000000 cz $crystal=24000000 , to kod wynikowy nie różnił się ani na jotę , a powinien ;)

Pozdrawiam Piotrek

U¿ytkownik "BartekK" snipped-for-privacy@drut.org napisa³ w wiadomo¶ci news:dfhlbf$nm4$ snipped-for-privacy@nemesis.news.tpi.pl...

U mnie dzia³a ten program z DS18B20 mo¿e sprubój ten program: $large $regfile = "812.dat" $crystal = 11059000

Config 1wire = P0.5 'konfiguracja magistrali 1wire Config Lcd = 20 * 4 'konfiguracja wyswietlacza Config Lcdpin = Pin , Db4 = P2.4 , Db5 = P2.5 , Db6 = P2.6 , Db7 = P2.7 , E = P0.6 , Rs = P0.7 Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32 'znak stopnia 'Deflcdchar 2 , 12 , 4 , 6 , 12 , 4 , 4 , 14 , 32 '³ 'Deflcdchar 3 , 32 , 32 , 14 , 1 , 15 , 17 , 15 , 1

Dim T1 As Single Dim T2 As Single Dim S As Byte , A As Byte Dim B1 As Byte , B2 As Byte , R As Byte , Licz1 As Word , Licz2 As Word Dim Tmp As String * 6 Dim Znak As String * 1 R = &HFF Declare Sub 1wr 'podprogram resetujacy magistrale 1w Cursor Off Cls Do

1wr 'podprogram 1wr 1wwrite &HCC 'komenda skip ROM 1wwrite &H44 'komenda convert T Waitms 250 Waitms 250 1wr 'podprogram 1wr 1wwrite &HCC 'komenda skip ROM 1wwrite &HBE 'komenda read

B1 = 1wread() 'odczyt z termometru B2 = 1wread()

1wr 'podprogram 1wr 1wwrite &H33 'odczyt TOM

If B2 >= 248 Then 'w przypadku temperatur ujemnych B1 = R - B1 'Od 255 Odejmujemy B1 B2 = R - B2 'od 255 odejmujemy B2 Znak = "-" Else Znak = "+" End If T1 = B1 / 16 'Przesuniecie w pawo o 4 bajty T2 = B2 * 16 'przesuniecie w lewo o 4 bajty T1 = T1 + T2

Tmp = Fusing(t1 , ###.&&) Cls Lcd "Temp:= " ; Znak ; Tmp ; Chr(1) ; "C " Licz1 = Licz1 + 1

If Err = 1 Then Licz2 = Licz2 + 1 End If Waitms 250

Loop

Sub 1wr 'podprogram resetujacy magistrale

1wreset End Sub

Piotrek Sz. napisał(a):

Dzieki sliczne. Pomoglo. problem byl podwojny - 1x kabel byl zamokniety - gdy go niechcacy podgrzalem suszarka (testuje nia dallasy) - zaczela cieknac woda... Po zmianie kabla na docelowym hardware (atmega) chodzi super.

a pod bascomem - faktycznie przy 24MHz orginalne procedurki sie wywalaja z 1wire. Na 12Mhz jest super do 125stC

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required