Witam forumowiczów.
Mam mały problem z dwoma czujnikami ds1820.
Odczytałem ich numery seryjne, są one takie:
16-199-187-65-0-8-0-199
16-124-76-60-0-8-0-250
Chcę odczytwyać temperature z bou czujników, ale nie wiem jak mam wybrać czujnik z którego chce odczytać temperature.
Mam proźbę od wszystkich którzy znają obsługę tych czujników, o podanie wycinku programu w bascomie 8051 odpowiedzialnego za wybór czujnika.
Z góry dziękuję za pomoc.
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięProblem z DS1820
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
proszę bardzo
Kiedyś napisałem sobie coś takiego i prostego. Wiadomo,że każdy napisałby to inaczej.
nie należę do ludzi skrywających swoje kawałki kodu i z każdym się nimi podzielę i tak powinno być ( chodzi przecież o hobby, majsterkowanie , i naukę a nie o bisnes.........)
POMAGAJMY WIĘC SOBIE , DZIŚ JA TOBIE , JUTRO TY MNIE...
podany przykład jest do AVR ale z tym sobie poradzisz to tylko inna nazwa portów...
i jeszcze jedno podawaj numery seryjne w hexie to ułatwia pracę.
Config 1wire = Pina.2' tu zmień na P1.1 i masz na 51
Dim Bd(9) As Byte
Dim Z As Integer , Tmp As Integer
Dim T As Integer , T1 As Integer
Dim Temp1 As Integer ' w tych zmiennych przechowujesz temperatury
Dim Temp2 As Integer
'Dim Temp3 As Integer
'Dim Temp4 As Integer
'Dim Temp5 As Integer
'Dim Temp6 As Integer
'Dim Temp7 As Integer
'Dim Temp8 As Integer
Dim Ds As String * 16
Dim Aa As String * 2
Dim Bb As Byte
Dim C As Byte
Dim H As Byte
Dim S As String * 5
Declare Sub Temperatura
Const Ilosc_czujnikow = 2
' tutaj wpisz numery seryjne w hexie
'możesz także dodać "wyszukiwarkę numerów" i zapisać je
Const Ds1 = "1064891F00080008"
Const Ds2 = "1021641F000800A0"
'Const Ds3 = "10118C1F000800A9"
'Const Ds4 = "0000000000000000"
'Const Ds5 = "0000000000000000"
'Const Ds6 = "0000000000000000"
'Const Ds7 = "0000000000000000"
'Const Ds8 = "0000000000000000"
Do
Call Temperatura
'to pozostałość z innego programu
S = Str(temp1)
S = Format(s , "00.0")
Print "temp1 " ; S
S = Str(temp2)
S = Format(s , "00.0")
Print "temp2 " ; S
S = Str(temp3)
S = Format(s , "00.0")
Print "temp3 " ; S
'aż do tego miejsca możesz to wywalic
Loop
Sub Temperatura
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
For H = 1 To Ilosc_czujnikow
If H = 1 Then Ds = Ds1
If H = 2 Then Ds = Ds2
' If H = 3 Then Ds = Ds3
' If H = 4 Then Ds = Ds4
' If H = 5 Then Ds = Ds5
' If H = 6 Then Ds = Ds6
' If H = 7 Then Ds = Ds7
' If H = 8 Then Ds = Ds8
1wreset
1wwrite &H55
C = 1
Do
Aa = Mid(ds , C , 2)
Bb = Hexval(aa)
1wwrite Bb
C = C + 2
If C > 15 Then Exit Do
Loop
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(1) And 1
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
If H = 1 Then Temp1 = T
If H = 2 Then Temp2 = T
'If H = 3 Then Temp3 = T
' If H = 4 Then Temp4 = T
' If H = 5 Then Temp5 = T
' If H = 6 Then Temp6 = T
'If H = 7 Then Temp7 = T
'If H = 8 Then Temp8 = T
Waitms 1
Next
End Sub
rozkaz konwersji wysyłasz do wszystkich czujników
wynik zas pobierasz po numerach seryjnych.
to co jest jest zrobione na 8 czujników , możesz się teraz pobawić.
Nie ma tu żadnej kontroli CRC itp. jak znam życie to ktoś zaraz powie...
Tyle zmiennych?
aco mi tam... trochę większy procek i po bólu...
nie należę do ludzi skrywających swoje kawałki kodu i z każdym się nimi podzielę i tak powinno być ( chodzi przecież o hobby, majsterkowanie , i naukę a nie o bisnes.........)
POMAGAJMY WIĘC SOBIE , DZIŚ JA TOBIE , JUTRO TY MNIE...
podany przykład jest do AVR ale z tym sobie poradzisz to tylko inna nazwa portów...
i jeszcze jedno podawaj numery seryjne w hexie to ułatwia pracę.
Config 1wire = Pina.2' tu zmień na P1.1 i masz na 51
Dim Bd(9) As Byte
Dim Z As Integer , Tmp As Integer
Dim T As Integer , T1 As Integer
Dim Temp1 As Integer ' w tych zmiennych przechowujesz temperatury
Dim Temp2 As Integer
'Dim Temp3 As Integer
'Dim Temp4 As Integer
'Dim Temp5 As Integer
'Dim Temp6 As Integer
'Dim Temp7 As Integer
'Dim Temp8 As Integer
Dim Ds As String * 16
Dim Aa As String * 2
Dim Bb As Byte
Dim C As Byte
Dim H As Byte
Dim S As String * 5
Declare Sub Temperatura
Const Ilosc_czujnikow = 2
' tutaj wpisz numery seryjne w hexie
'możesz także dodać "wyszukiwarkę numerów" i zapisać je
Const Ds1 = "1064891F00080008"
Const Ds2 = "1021641F000800A0"
'Const Ds3 = "10118C1F000800A9"
'Const Ds4 = "0000000000000000"
'Const Ds5 = "0000000000000000"
'Const Ds6 = "0000000000000000"
'Const Ds7 = "0000000000000000"
'Const Ds8 = "0000000000000000"
Do
Call Temperatura
'to pozostałość z innego programu
S = Str(temp1)
S = Format(s , "00.0")
Print "temp1 " ; S
S = Str(temp2)
S = Format(s , "00.0")
Print "temp2 " ; S
S = Str(temp3)
S = Format(s , "00.0")
Print "temp3 " ; S
'aż do tego miejsca możesz to wywalic
Loop
Sub Temperatura
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
For H = 1 To Ilosc_czujnikow
If H = 1 Then Ds = Ds1
If H = 2 Then Ds = Ds2
' If H = 3 Then Ds = Ds3
' If H = 4 Then Ds = Ds4
' If H = 5 Then Ds = Ds5
' If H = 6 Then Ds = Ds6
' If H = 7 Then Ds = Ds7
' If H = 8 Then Ds = Ds8
1wreset
1wwrite &H55
C = 1
Do
Aa = Mid(ds , C , 2)
Bb = Hexval(aa)
1wwrite Bb
C = C + 2
If C > 15 Then Exit Do
Loop
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(1) And 1
If Tmp = 1 Then Decr Bd(1)
T = Makeint(bd(1) , Bd(2))
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
If H = 1 Then Temp1 = T
If H = 2 Then Temp2 = T
'If H = 3 Then Temp3 = T
' If H = 4 Then Temp4 = T
' If H = 5 Then Temp5 = T
' If H = 6 Then Temp6 = T
'If H = 7 Then Temp7 = T
'If H = 8 Then Temp8 = T
Waitms 1
Next
End Sub
rozkaz konwersji wysyłasz do wszystkich czujników
wynik zas pobierasz po numerach seryjnych.
to co jest jest zrobione na 8 czujników , możesz się teraz pobawić.
Nie ma tu żadnej kontroli CRC itp. jak znam życie to ktoś zaraz powie...
Tyle zmiennych?
aco mi tam... trochę większy procek i po bólu...
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 38 gości