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

odczyt temperatury w bascom na 1wire z ds18b20 do atmega8

nobisz 10 Paź 2008 07:40 5971 8
REKLAMA
  • #1 5617296
    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ę.

    
    
    $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.
  • REKLAMA
  • #2 5617536
    Freddy
    Poziom 43  
    
      1wwrite &HCC 
      1wwrite &H44
    

    to przecież "start pomiaru", więc otrzymujesz potem właściwą temperaturę jako odpowiedź.
  • #3 5617572
    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.
  • REKLAMA
  • #4 5618324
    Freddy
    Poziom 43  
    
      For I = 1 To 8 
        Ar(i) = 1wread() 
      Next 
    

    Troche "za szybko" czytasz.
  • #5 5626359
    nobisz
    Poziom 14  
    czytałem wolniej i efekt ten sam:(
  • #6 5626406
    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.
  • REKLAMA
  • #7 5626496
    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ą.
  • REKLAMA
  • #8 5628359
    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?
  • #9 5629398
    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.
REKLAMA