logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMega8][Bascom] znak temperatury ds18b20 - czy poprawnie?

marek_jazy 06 Gru 2009 23:03 1984 4
REKLAMA
  • #1 7355205
    marek_jazy
    Poziom 10  
    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

    
    Znak = I And &HF800     '&B1111100000000000
    

    poprawnie odczytuje warosc znaku? Czy moze sa jakies inne metody sprawdzenia?

    Program:

    
    $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
    
  • REKLAMA
  • #2 7355923
    H0miczek
    Poziom 20  
    Dobrze nawet zrozumiales z tym znakiem. ale jesli temperatura jest ujemna to negujesz calosc i odejmujesz 1 zeby miec poprawna temperature (potem dzielisz na 16). i tyle filozofii..
    a swoją drogą nie masz zamrazalnika? wez kostke lodu i sprawdz.... ;]
  • REKLAMA
  • #3 7356505
    marek_jazy
    Poziom 10  
    Nie chce zalac maszyny woda. Dlatego zrezygnowalem z lodu.
    Sprawdzilem ta negacje i faktycznie we wczesniejszym moim rozumowaniu znak rozpoznawal poprawnie jednak warosci byly bledne. Moge jeszcze zapytac skad bierze sie ta negacja i odejmowanie jedynki? Nie moge do tego dojsc gdyz mnie (na przykladach z dokumentacji) wynika, ze aby otrzymac poprawny wynik to ta jedynke trzeba dodac do negacji a nie odjac
  • REKLAMA
  • #4 7356777
    H0miczek
    Poziom 20  
    zgadza sie, zapomnialam ze pracujemy na liczbach dodatnich a znak jest dostawiany. generalnie jak masz zame F-ki to jest to -0.0625 st.C
  • #5 7356868
    marek_jazy
    Poziom 10  
    dzieki wielkie za pomoc
REKLAMA