Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

2 x DS18B20 na Atmega8 w Bascom

23 May 2006 23:03 5934 6
  • Level 14  
    Witam
    Panowie szukam, szukam i nic nie znalazłem. Jestem początkujący i chcę uruchomić dwa czujniki DS18b20 na jednej magistrali. Jeden działa wyśmienicie ale dwa naraz to już dla mnie wyższa szkoła latania. Proszę o jakiś kod do odczytu temp z 2 czujników (np" tem zew. i tem wew.).
  • Level 15  
    Musisz odczytać numery seryjne tych czujników, a potem je odpowiednio adresować.

    Ja Ci nikt nie pomorze to wieczorem Ci wkleje przykład.

    PL
  • Level 15  
    O, widzę że mieszkamy blisko siebie.

    Jak się nic nie pojawi, to tak jak obiecałem wieczorem będzie przykład.

    PL
  • Helpful post
    Level 15  
    Poniżej przykład. Zwróć uwagę, że w tym przykładzie komenda konwersji temperatury występuje na końcu, a nie na początku. Odczytana temperatura będzie zatem tą która została konwertowana po poprzednim odczycie. To oczywiście nie ma znaczenia dla tego jak adresować czujniki.

    Powodzenia !

    PL


    Config 1wire = Portd.6

    Dim Adresy(16) As Byte
    Dim T1 As Byte
    Dim T2 As Byte
    Dim Temp As Byte
    Dim B10 As Byte , B20 As Byte
    Dim B30 As Byte , B40 As Byte

    Adresy(1) = 1wsearchfirst()
    Adresy(9) = 1wsearchnext()

    Do

    Wait 1
    1wreset
    1wwrite &H55 ' Będę wysyłał adres
    1wwrite Adresy(1) , 8 ' Wysyłam adres
    1wwrite &HBE ' Komenda dla czujnika o wysłanym adresie
    B10 = 1wread()
    B20 = 1wread()
    1wreset
    1wwrite &H55
    1wwrite Adresy(9) , 8
    1wwrite &HBE
    B30 = 1wread()
    B40 = 1wread()
    1wreset
    1wwrite &HCC ' Komenda skip ROM, czyli słuchajcie wszyscy
    1wwrite &H44 ' Komenda convert T

    Cls
    T1 = B10 / 16
    T2 = B20 * 16
    Temp = T1 + T2
    Lcd Temp ; "/"
    T1 = B30 / 16
    T2 = B40 * 16
    Temp = T1 + T2
    Lcd Temp ; " "

    Loop

    End
  • Level 14  
    Po przeanalizowaniu powyrzszego kodu zaczynam łapać o co w tym wszystkim chodzi. Na razie teoretycznie (praktycznie jeszcze go nie wykorzystałem).
    Wielkie dzięki i pozdrawiam.
  • Level 14  
    Trochę przerobiłem ten kod. Teraz wygląda to tak (pokazuje temp. po przecinku):

    Code:
    Dim Adresy(16) As Byte
    
    Dim Temp As Byte
    Dim Temp_str As String * 6
    Dim W As Byte
    Dim T As Integer
    Dim Wew(9) As Byte
    Dim Zew(9) As Byte

    Adresy(1) = 1wsearchfirst()
    Adresy(9) = 1wsearchnext()
    W = 1wirecount()

    Do

    1wreset
    1wwrite &H55                                            ' Będę wysyłał adres
    1wwrite Adresy(1) , 8                                ' Wysyłam adres
    1wwrite &HBE                                           ' Komenda dla czujnika o wysłanym adresie
    Wew(1) = 1wread(9)
    1wreset
    1wwrite &H55
    1wwrite Adresy(9) , 8
    1wwrite &HBE
    Zew(1) = 1wread(9)
    1wreset
    1wwrite &HCC                              ' Komenda skip ROM, czyli słuchajcie wszyscy
    1wwrite &H44                                                ' Komenda convert T
    Waitms 500

    Cls
    T = Makeint(wew(1) , Wew(2))
    T = T * 10
    T = T / 16
    Temp_str = Str(t)
    Temp_str = Format(temp_str , "0.0")
    Locate 1 , 1
    Lcd "Temp.wew." ; Temp_str ; "C  "


      If W = 1 Then
      Locate 2 , 1
        Lcd "Err "                                       'jeśli brak drugiego czujnika
      Elseif Err = 0 Then
    T = Makeint(zew(1) , Zew(2))
    T = T * 10
    T = T / 16
    Temp_str = Str(t)
    Temp_str = Format(temp_str , "0.0")
    Locate 2 , 1
    Lcd "Temp.zew." ; Temp_str ; "C  "    'jeśli natomiast jest to
     End If

    Loop

    End