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.

odczyt temperatury w bascom na 1wire z ds18b20 do atmega8

nobisz 10 Oct 2008 07:40 5860 8
  • #1
    nobisz
    Level 14  
    Witam,

    Zrobiłem sobie pomiar temperatury w konfiguracji jak w tytule. Zgodnie z opisem ds18b20 moja procedura powinna odczytać zawartośc pamięci czujnika, z czego pierwsze 2 bajty powinny zawierać temperaturę.

    Code:




    $regfile = "m8def.dat"
    Config Lcdpin = Pin , Rs = Portd.1 , E = Portd.0 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
    Config 1wire = Portc.5


    Dim Ar(8) As Byte , A As Byte , I As Byte


    Do
      Wait 1
      1wreset                                                   'reset the device
      Upperline
      Lcd Err
      Wait 2
      Czekaj:
      1wwrite &HCC
      1wwrite &H44                                             
      I = 1wread()
      If I = 0 Then Goto Czekaj
      1wreset
      1wwrite &HCC
      1wwrite &HBE
      For I = 1 To 8
        Ar(i) = 1wread()
      Next
      For I = 1 To 8
        Lcd Ar(i)
        Wait 1
      Next
      Cls
    Loop


    Po wykonaniu powyższego kody w pierwszym odebranym bajcie otrzymuję temperaturę pomnożoną przez 2, a drugi bajt jest pusty.
    Po włączeniu zasialania i bez uruchomienia przetwornika w pamięci powinna być zapsana temperatura 85 stopni, co zgodine z instrukcją odpowiada wartościom 05h 50h (ostatnie 4 bity powinny byc wartościami po przecinku) ja odbieram 0 170 dziesiętnie co odpowiadałoby 00h AAh. analogicznie po wykonaniu konwersji odbieram 0 47 dzisiętnie co interpretuję jako 23,5 stopinia.
  • #2
    Freddy
    Level 43  
    Code:

      1wwrite &HCC
      1wwrite &H44

    to przecież "start pomiaru", więc otrzymujesz potem właściwą temperaturę jako odpowiedź.
  • #3
    nobisz
    Level 14  
    to wiem tylko ta właściwa temperatura przy rozdzielczości 12 bitów dla np 20 stopni powinna zwrócić 01h 04h a zwraca 00h 28h.
  • #4
    Freddy
    Level 43  
    Code:

      For I = 1 To 8
        Ar(i) = 1wread()
      Next

    Troche "za szybko" czytasz.
  • #5
    nobisz
    Level 14  
    czytałem wolniej i efekt ten sam:(
  • #6
    Freddy
    Level 43  
    Odpowiedz, czy czytałeś dokumentację DS18B20, bo patrząc na fragment Twój, chyba nie. Skoro jednak tak, to odpowiedz, jaki ma być czas przetwarzania przy 12 bitowej rozdzielczości.
  • #7
    nobisz
    Level 14  
    patrząc na program to chyba czytałem:) tutaj tylko skopiowałem program przed poprawką etykiety, w programie mam tak:
    czekaj:
    I = 1wread()
    If I = 0 Then Goto Czekaj
    po co mam czekać 750 ms skoro mogę czekać, aż skończy przetwarzanie kiedy właśnie w data sheet pisze, że w czasie przetwarzania ds wystawia na wyjściu 0 i jeden po skończonym przetwarzaniu:)

    Jescze tego nie sprawdziłem, ale chyba właśnie w datasheet jest błąd, bo piszą, że nowy ds ma ustwioną precyzję 12 bitów, a mój wynik wygląda po prosty na 9 bitowy, ponieważ po podzieleniu przez 2 otrzymuję poprawną część całkowitą.
  • #8
    mirley
    Level 17  
    Czy do układu DS18B20 masz podłączone zasilanie +5V, czy pracuje on w konfiguracji dwupinowej?

    W karcie katalogowej jest wzmianka "If the DS18B20 is powered by an
    external supply, the master can issue read time slots after the Convert T command and the DS18B20 will
    respond by transmitting a 0 while the temperature conversion is in progress and a 1 when the conversion
    is done. In parasite power mode this notification technique cannot be used since the bus is pulled high by
    the strong pullup during the conversion."

    Wykonywałem wiele układow z czujnikami DS18B20 i zawsze miały na starcie ustawioną rozdzielczość 12 bitow. Napewno nie zapisywałeś rejestru konfiguracyjnego, nawet przez przypadek?
  • #9
    nobisz
    Level 14  
    Tak jak pisałem mam odczyt z rozdzielczością 9-bitową, próbowałem wielokrotnie zapisać rejestr konfiguracji, ale przy odczycie zawsze dostaję, że zawiera same jedynki. Wczoraj, kiedy już straciłem całą nadzieję zauważyłem, że w sklepie sprzedali mi ds1820 zamiast ds18b20, a ten właśnie ma 9-bitową rozdzielczość. Dziękuję wszystkim za pomoc i zamykam temat.