Witam
Chciałem zbudować termometr z 64 czujnikami DS18B20, na układzie Atmega 2560. Konfiguruje sobie każde wyprowadzenie portu po kolei jako 1-wire. Do 44 czujnika temperatury są odczytywane, jeśli wprowadzę 45 czujnik w programie to po przejściu pętli do czujnika T1 otrzymuję wartość 0 stopni na każdym z czujników, jeśli mam 44 czujniki to wszystko działa.
Podłączyłem czujniki też od 45 do 64 z pominięciem czujników od 1 do 44 ( zablokowana część programu ). W takiej sytuacji czujniki są również odczytywane. Czyli połączenie z czujnikami jest i są one odczytywane. Czy może ktoś podłączał tak dużą liczbę czujników do Atmegi.
Poniżej fragment kodu programu.
Kod:
Chciałem zbudować termometr z 64 czujnikami DS18B20, na układzie Atmega 2560. Konfiguruje sobie każde wyprowadzenie portu po kolei jako 1-wire. Do 44 czujnika temperatury są odczytywane, jeśli wprowadzę 45 czujnik w programie to po przejściu pętli do czujnika T1 otrzymuję wartość 0 stopni na każdym z czujników, jeśli mam 44 czujniki to wszystko działa.
Podłączyłem czujniki też od 45 do 64 z pominięciem czujników od 1 do 44 ( zablokowana część programu ). W takiej sytuacji czujniki są również odczytywane. Czyli połączenie z czujnikami jest i są one odczytywane. Czy może ktoś podłączał tak dużą liczbę czujników do Atmegi.
Poniżej fragment kodu programu.
Kod:
$regfile = "m2560def.dat"
$crystal = 2000000
$baud1 = 9600
Open "Com2:" For Binary As #1
Dim Temp(2) As Byte
Dim Tempp1 As Byte
Dim Tempp2 As Byte
Dim Lsb_tempp1 As Byte
Dim Xx As Byte
Dim Msb_zk As String * 1
declare sub Odczyt_temp
Xx = 1
Do
Call Odczyt_temp
Wait 1
Loop
End
Sub Odczyt_temp
If Xx = 1 Then
Config 1wire = Porta.7
end if
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
1wreset
1wwrite &HCC
1wwrite &HBE
Temp(1) = 1wread()
Temp(2) = 1wread()
1wreset
If Temp(2) >= 248 Then
Temp(1) = Temp(1) - 255
Temp(2) = Temp(2) - 255
Msb_zk = "-"
Else
Msb_zk = "+"
End If
Tempp1 = Temp(1) / 16
Tempp2 = Temp(2) * 16
Lsb_tempp1 = Tempp1 + Tempp2
Print #1 , "<T" ; Xx ; "; " ; Lsb_tempp1 ; ">"
Incr Xx
If Xx = 2 Then
Config 1wire = Porta.6
end if
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
1wreset
1wwrite &HCC
1wwrite &HBE
Temp(1) = 1wread()
Temp(2) = 1wread()
1wreset
If Temp(2) >= 248 Then
Temp(1) = Temp(1) - 255
Temp(2) = Temp(2) - 255
Msb_zk = "-"
Else
Msb_zk = "+"
End If
Tempp1 = Temp(1) / 16
Tempp2 = Temp(2) * 16
Lsb_tempp1 = Tempp1 + Tempp2
Print #1 , "<T" ; Xx ; "; " ; Lsb_tempp1 ; ">"
Incr Xx
TU JEST POWIELONY KOD 64 RAZY
If Xx=64 then
Xx=1
End if
End sub