Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

marek_jazy 06 Dec 2009 23:03 1915 4
  • #1
    marek_jazy
    Level 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

    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
  • #2
    H0miczek
    Level 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.... ;]
  • #3
    marek_jazy
    Level 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
  • #4
    H0miczek
    Level 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
    marek_jazy
    Level 10  
    dzieki wielkie za pomoc