Witam,
Na wstepie zaznaczam, ze uklad (przynajmniej na pierwszy rzut oka) dziala poprawnie. Moje pytanie wynika z tego, ze nie mam gdzie sprawdzic czy dobrze odczytuje mi znak kiedy temperatura jest ujemna.
Z dokumentacji czujnika wynika ze jezeli bity znaku tj od 15-go do 11-go sa wyzerowane to temeratura jest dodatnia a ujemna w przypadku gdy ustawione na jeden. Wartosc temperatury jest zwracana w slowie dwu bitowym - czy ma to znaczenie czy wczytam ja do zmiennej word czy integer? (w obu przypadkach dziala tak samo poprawnie).
Teraz konkret: Czy linijka
poprawnie odczytuje warosc znaku? Czy moze sa jakies inne metody sprawdzenia?
Program:
Na wstepie zaznaczam, ze uklad (przynajmniej na pierwszy rzut oka) dziala poprawnie. Moje pytanie wynika z tego, ze nie mam gdzie sprawdzic czy dobrze odczytuje mi znak kiedy temperatura jest ujemna.
Z dokumentacji czujnika wynika ze jezeli bity znaku tj od 15-go do 11-go sa wyzerowane to temeratura jest dodatnia a ujemna w przypadku gdy ustawione na jeden. Wartosc temperatury jest zwracana w slowie dwu bitowym - czy ma to znaczenie czy wczytam ja do zmiennej word czy integer? (w obu przypadkach dziala tak samo poprawnie).
Teraz konkret: Czy linijka
Code:
Znak = I And &HF800 '&B1111100000000000
poprawnie odczytuje warosc znaku? Czy moze sa jakies inne metody sprawdzenia?
Program:
Code:
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config 1wire = Portb.0
Dim I As Word
Dim Znak As Word
Dim S As Single
Dim T As String * 4
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Cursor Off
Cls
Do
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
I = 1wread(2)
S = I / 16
T = Fusing(s , "##.#")
Znak = I And &HF800 '&B1111100000000000
Locate 1 , 1
If Znak = 0 Then
Lcd "Temp: " ; T ; Chr(0) ; "C"
Else
Lcd "Temp: -" ; T ; Chr(0) ; "C"
End If
Loop
End