Zdekodowanie temperatury DS18B20

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
bartus
-
Posty: 2
Rejestracja: 19 paź 2007, 19:23
Lokalizacja: Katowice

Zdekodowanie temperatury DS18B20

Post autor: bartus » 21 paź 2007, 16:20

Witam serdecznie.
Chciałem zrobić termometr na Mega8 i DS18B20.
Znalazłem fragment programu który dekoduje temperaturę z układu 1820 ale nie działa w 18B20.

Oto fragment programu do odczytu temperatury z 1820:

Kod: Zaznacz cały

Sub Odcz_temp                                               'definicja procedury pomiaru
      'temperatury
 1wreset                                                    'reset magistrali 1-Wire
 1wwrite &HCC                                               'opuszczenie zapisu numeru ID
 1wwrite &H44                                               'start pomiaru temperatury
 Waitms 750                                                 'opóźnienie na czas pomiaru
 1wreset                                                    'reset magistrali 1-Wire
 1wwrite &HCC                                               'opuszczenie zapisu numeru ID
 1wwrite &HBE                                               'komenda odczytu zmierzonej
      'temperatury
 Temperatura(1) = 1wread(2)                                 'odczyt zmierzonej temperatury
      'do tablicy Temperatura
 1wreset                                                    'reset magistrali 1-Wire
 If Err = 1 Then                                            'jeśli układ dołączony do
      'magistrali nie odpowiada, to
  Cls                                                       'czyszczenie LCD
  Lcd "Brak ukladu"                                         'wyświetlenie komunikatu o braku
      'dołączonego układu
  Do                                                        'nieskończona pętla w celu
      'wstrzymania działania programu
  Loop
 End If
 If Temperatura(2) > 1 Then                                 'jeśli zmienna Temperatura(2)
      '> 0, to temperatura ujemna
      'przeliczenie temperatury
      'ujemnej
  Temperatura(1) = 256 - Temperatura(1)
 End If                                                     'koniec warunku
 Temperatura(1) = Temperatura(1) / 2
      'dalsze przeliczenie odczytanej
      'temperatury dodatniej jak
      'i ujemnej
End Sub    

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 21 paź 2007, 16:52

I nie zadziała, bo DS1820 mierzy temperaturę z rozdzielczością 9-bitów, a DS18B20 działa z rozdzielczością 12-bitów jest to jednak ustawienie domyślne, ale po co je zmieniać :?: Niżej przedstawiam moją procedurę rozkodowywania temperatury z czujnika DS18B20:

Kod: Zaznacz cały

Temperatura:
   1wreset
   1wwrite &HCC
   1wwrite &HBE
   Temperatura(1) = 1wread(2)
   1wreset

   Pomoc(1) = Temperatura(2) * 256
   Temperatura_w1 = Temperatura(1) + Pomoc(1)
   Temperatura_w2 = Temperatura_w1 Mod 2048
   Pomoc(2) = Temperatura_w1 \ 2048
   Ujemna = Pomoc(2) Mod 2
   Temperatura_s = Temperatura_w2 * 0.0625

   If Ujemna = 1 Then
      Temperatura_s = Temperatura_s * -1
   End If
Return
Zmienna Temperatura_s to zmienna Single, w której znajduje się właściwa temperatura.

Jak pierwszy raz miałem okazję pracować na czujniku DS18B20 również miałem z tym problem :D Jedna literka, a tyle zmienia :lol:

Pozdrawiam ;)

ODPOWIEDZ