Obsługa kilku termometrów DS18B20


Witam,
Sam kod odpowiedzialny za odczyt temperatury pochodzi z jakiejś niemieckiej strony ściągnięty dawno temu. Dzięki użyciu parametryzowanej linii Config 1wire udało się uzyskać obsługę kilku termometrów jednocześnie za pomocą kilku pinów mikrokontrolera (ustawienie na sztywno w kodzie spowoduje, że zadziała tylko pierwsze lub ostatnie wywołanie config 1Wire). Układ pod którym to robiłem to M16@16Mhz.

Kod sprawdzony, wiem, że działa bo za jego pomocą jest mierzona temperatura na dwóch radiatorach we własnej roboty zasilaczu warsztatowym (na podstawie odczytu temperatury jest sterowany wentylator używając PWM).

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portb.1 , Db5 = Portb.2 , Db4 = Portb.3 , E = Portb.4 , Rs = Portb.5
Cursor Off
Cls
Cursor Off
Dim Dsid(9) As Byte
 
Dsid(1) = &H10 : Dsid(2) = &H68 : Dsid(3) = &H17 : Dsid(4) = &H25 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H98
 
Dim Sc(9) As Byte
Dim T As Integer
Dim T1 As Integer
Dim I As Byte
Dim Temperature1 As Single
Dim Temperature_1 As String * 5
Dim W As Byte
Locate 1 , 3
Lcd "Temperatury:"
 
Do
W = 0
Config 1wire = Portc.w
Gosub Pomierz
Locate 2 , 1
Lcd Temperature_1 ; " "
 
Incr W
Config 1wire = Portc.w
Gosub Pomierz
Locate 2 , 7
Lcd Temperature_1 ; " "
 
Incr W
Config 1wire = Portc.w
Gosub Pomierz
Locate 2 , 13
Lcd Temperature_1 ; " "
 
Loop
 
 
Pomierz:
 
 ' Alle angeschlossenen DS1820 zum Messen veranlassen
 1wreset
 1wwrite &HCC
 1wwrite &H44
 Waitus 200
 ' Den gewünschten Sensor auswählen
 1wverify Dsid(1)
 ' Kommando READ SCRATCHPAD
 1wwrite &HBE
 Sc(1) = 1wread(9)
 If Sc(9) = Crc8(sc(1) , 8) Then
  T = Makeint(sc(1) , Sc(2))
  ' Die Nachkommastelle entfernen
  T = T / 2
  ' Temperatur in ganzen Grad Schritten ausgeben
  Locate 2 , 1
  Temperature1 = T / 10
   Temperature_1 = Fusing(temperature1 , "#.#")
 Else
  ' Wenn Fehler Scratchpad zur Kontrolle Hexadezimal ausgeben
  Locate 2 , 1
  ' Es passen nur 8 Byte auf das Display
  For I = 1 To 8
   Lcd Hex(sc(i))
  Next
 End If
Return
 
 
End




Portret użytkownika gosc

Kod

Witam,
może ktoś opisać algorytm w pseudokodzie? Próbuję przerobić kod na C, ale brak znajomości jakichkolwiek podstaw bascoma okazuje się sporą przeszkodą.
Pozdrawiam
Paweł

Portret użytkownika matrix

Re: Obsługa ds18b20 w C

A wystarczyło wpisać w google hasło "obsługa ds18b20 w c" i -> OTO WYNIK <- jeden z wielu.

Portret użytkownika gosc

Re: Kod

Ale chodzi mi o obsługę kilku ds.
Pozdrawiam