Obsługa DS18x20

Zawarte fragmenty programów dotyczą czujników DS18S20 i DS18B20. Procedury obsługi tych układów nie różnia się od siebie w prostych zastosowaniach, poza sposobem obliczania temperatury na podstawie odczytanych wartości z rejestrów czujników.

Język Bascom AVR

Odczyt 8 bajtów numeru seryjnego DS18S20 lub DS18B20 gdy na magistrali jest tylko jeden układ. Numer seryjny zostanie zapisany do zmiennej tablicowej Ds:

Config 1wire = Pind.7
Dim Ds(8) As Byte

1wreset
1wwrite &H33
Ds(1) = 1wread(8):

Uruchomienie konwersji temperatury przez wszystkie czujniki podłączone do magistrali 1-wire. Po wydaniu rozkazu konwersji należy odczekać pewien czas (max 750ms) przed przystąpieniem do odczytu temperatury:

Config 1wire = Pind.7

1wreset
1wwrite &HCC
1wwrite &H44

Odczyt zawartości dwóch pierwszych rejestrów układu DS18x20, zawierających informację o wartości temperatury w przypadku gdy na magistrali jest tylko jeden czujnik.


1wreset
1wwrite &HCC
1wwrite &HBE

Lsb = 1wread():
Msb = 1wread():
1wreset

Dla większej ilości czujników podłączonych do jednej magistrali odczytujemy dane z jednego układu wykorzystując jego numer seryjny odczytany wcześniej i zapisany do zmiennej tablicowej Ds(8 bajtów).


1wreset
1wwrite &H55
1wwrite Ds(1) , 8
1wwrite &HBE

Lsb = 1wread():
Msb = 1wread():
1wreset

Po odczytaniu bajtów Msb i Lsb wykonujemy oblicznia temperatury.
Układ DS18S20:

Dim Temp As Single

If Msb = 0 Then
Temp = Lsb / 2
Else
Lsb = Not Lsb
Lsb = Lsb +1
Temp = Lsb/2
Temp = Temp * (-1)
End If

Układ DS18B20:

Dim Temp As Single
Dim Tempa As Integer

Tempa = Msb * 256
Tempa = Tempa + Lsb

If Msb.7 = 0 Then
Temp = Tempa / 16
Else
Tempa = Not Tempa
Tempa = Tempa +1
Temp = Tempa / 16
Temp = Temp * (-1)
End If

Poniżej przedstawiony jest cały prosty program testowy do obsługi dwóch czujników (DS18S20 i DS18B20) podłączonych na jednej magistrali. Całość została uruchomiona na Płytce Testowej opisanej w dziale projekty. Wskazania temperatury wyświetlane są na wyświetlaczu LCD

‚***********************************************
‚Konfiguracja AVR
‚***********************************************
$regfile = „m162def.dat”
$crystal = 16000000

$baud = 2400

Config Porta = 255
Porta = 255
Config Portb = 255
Portb = 255
Config Portc = 255
Portc = 255
Config Portd = 255
Portd = 255
Config Porte = 255
Porte = 255

‚Config Scl = Portd.6
‚Config Sda = Portd.7
‚I2cinit

Config 1wire = Pind.7

Config Lcdpin = Pin , Db4 = Porta.5 , Db5 = Porta.4 , Db6 = Porta.3 , Db7 = Porta.2 , E = Porta.0 , Rs = Porta.1
Config Lcd = 20 * 2
Cls
Cursor Off Noblink

‚Config Int0 = Falling
‚Enable Int0 : On Int0 Przerw_zewn

‚Config Timer0 = Timer , Prescale = 64
‚Enable Timer0 : On Timer0 Przerwanie1

‚Config Timer1 = Timer , Prescale = 8
‚Enable Timer1 : On Timer1 Przerwanie2

Enable Interrupts
‚///////////////////////////////////////////////

‚***********************************************
‚Zmienne
‚***********************************************
Dim Lsb As Byte
Dim Msb As Byte
Dim Tempa As Single
Dim Ds1(8) As Byte , Ds2(8) As Byte
Dim Tekst1 As String * 10
Dim Tekst2 As String * 10
‚///////////////////////////////////////////////

Lcd „test DS18B20”
Wait 1

‚Numery wpisane na sztywno
Ds2(1) = 40
Ds2(2) = 55
Ds2(3) = 181
Ds2(4) = 1
Ds2(5) = 1
Ds2(6) = 0
Ds2(7) = 0
Ds2(8) = 207

Ds1(1) = 16
Ds1(2) = 171
Ds1(3) = 224
Ds1(4) = 167
Ds1(5) = 0
Ds1(6) = 8
Ds1(7) = 0
Ds1(8) = 220

Do
1wreset

1wwrite &HCC
1wwrite &H44
Waitms 250
Waitms 250

1wreset

1wwrite &H55
1wwrite Ds2(1) , 8
1wwrite &HBE

Lsb = 1wread():
Msb = 1wread():

Tempa = Msb * 256
Tempa = Tempa + Lsb
Tempa = Tempa / 16
Tekst1 = Fusing(tempa , „#.##”)

1wreset

1wwrite &H55
1wwrite Ds1(1) , 8
1wwrite &HBE

Lsb = 1wread():
Msb = 1wread():

Tempa = Lsb / 2
Tekst2 = Fusing(tempa , „#.#”)

Cls
Lcd „DS18B20= ” ; Tekst1
Lowerline
Lcd „DS18S20= ” ; Tekst2
Loop
End
Materiał nadesłał użytkownik : Elektron

Post Author: swistak

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Potwierdz, że nie jesteś botem. *

This site uses Akismet to reduce spam. Learn how your comment data is processed.