W schemacie pominąłem zasilanie i podłączenie LCD.
Kod: (został wzięty z książki M. Wiązania - "Programowanie mikrokontrolerow AVR w jezyku Bascom", usunąłem kod od obsługi LCD bo mam go ustawionego w bascomie)
$regfile = "m8def.dat"
$crystal = 8000000
Config 1wire = Portc.5 'konfiguracja linii magistrali
'1-Wire
Declare Sub Odcz_temp 'procedura odczytu temperatury
'z układu DS1820
Dim Temperatura(2) As Byte 'tablica dwóch zmiennych typu
'Byte do pamiętania wartości
'temperatury
'definicja znaku stopnia
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Do 'początek pętli programu
Call Odcz_temp 'wywołanie procedury pomiaru
'temperatury
Cls 'czyszczenie ekranu LCD
If Temperatura(2) = 0 Then 'jeśli wartość Temperatura(2)=
'=0, to temperatura dodatnia
'wyświetla temperatury dodatnie
Lcd "Temp: " ; Temperatura(1) ; Chr(0) ; "C"
Else 'w przeciwnym razie
'wyświetla temperatury ujemne
Lcd "Temp: -" ; Temperatura(1) ; Chr(0) ; "C"
End If
Loop 'koniec pętli Do...Loop
End 'koniec programu
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) > 0 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 Problem tkwi w tym, że otrzymuje absolutnie dziwny wynik pomiaru. Temperatura pokojowa od -78 do -85*C, jak zapalę zapałkę przy czujniku dostaje -50*C.
Nie mam pojęcia czy to wina walniętego DSa czy może programu. Proszę o jakieś porady. Próbowałem zmienić pull-up na 4,7k (jak w dokumentacji) ale zmian brak.