Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

odczyt temperatury w bascom na 1wire z ds18b20 do atmega8

nobisz 10 Paź 2008 07:40 5479 8
  • #1 10 Paź 2008 07:40
    nobisz
    Poziom 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.

    0 8
  • #2 10 Paź 2008 10:03
    Freddy
    Poziom 43  

    Code:

      1wwrite &HCC
      1wwrite &H44

    to przecież "start pomiaru", więc otrzymujesz potem właściwą temperaturę jako odpowiedź.

    0
  • #3 10 Paź 2008 10:24
    nobisz
    Poziom 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.

    0
  • #5 13 Paź 2008 07:46
    nobisz
    Poziom 14  

    czytałem wolniej i efekt ten sam:(

    0
  • #6 13 Paź 2008 08:44
    Freddy
    Poziom 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.

    0
  • #7 13 Paź 2008 09:34
    nobisz
    Poziom 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ą.

    0
  • #8 13 Paź 2008 20:43
    mirley
    Poziom 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?

    0
  • #9 14 Paź 2008 07:25
    nobisz
    Poziom 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.

    0
  Szukaj w 5mln produktów