Witam.
Mam problem z programem z książki "Programowanie mikrkontrolerów AVR w języku BASCOM" listing nr 8.19. Przerobiłem z Atmega8 na Attiny2313 ponieważ plik .bin ma pjemność 1,20 kB. Po pierwszym wgraniu na wyswietlaczu wyświetlało się byle co tzn. temperatura ujemna lub brak układu. Zmieniłem w linii :
"C" - wyświetla temperaturę dodatnią
i drugą linię :
Teraz wyświetla 170 stopni C.
Nie wiem jak włączyć KODE.
Proszę umieszczać listingi programów w znacznikach "Code". Może warto sprawdzić jakie jeszcze możliwości dają przyciski pod tytułem postu.[c_p]
Mam problem z programem z książki "Programowanie mikrkontrolerów AVR w języku BASCOM" listing nr 8.19. Przerobiłem z Atmega8 na Attiny2313 ponieważ plik .bin ma pjemność 1,20 kB. Po pierwszym wgraniu na wyswietlaczu wyświetlało się byle co tzn. temperatura ujemna lub brak układu. Zmieniłem w linii :
If temperatura(2) = 0 Then na If temperatura(2) > 0 Then
Lcd "Temp: " ; Temperatura(1) ; Chro(0);
i drugą linię :
If temperatura(2) > 0 Then na If temperatura(2) < 0 Then
Lcd "Temp: - " ; Temperatura(1) ; Chr(0) ; "C"
Teraz wyświetla 170 stopni C.
Nie wiem jak włączyć KODE.
'Program obsługi jednego układu DS1820 dołączonego
'do magistrali 1-Wire
$regfile = "Attiny2313.dat" 'informuje kompilator o pliku
'dyrektyw mikrokontrolera
$crystal = 4000000 'informuje kompilator o częstotliwości oscylatora taktującego mikrokontroler
Config Lcd = 16 * 2 'konfiguracja typu wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2 'konfiguracja linii
'mikrokontrolera‚ do których dołączono wyświetlacz LCD
Config 1wire = Portd.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
Cursor Off : Lcd "* Temperatura *"
'czyszczenie ekranu LCD
If Temperatura(2) = 0 Then
Lowerline '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 'koniec procedury pomiaru
Proszę umieszczać listingi programów w znacznikach "Code". Może warto sprawdzić jakie jeszcze możliwości dają przyciski pod tytułem postu.[c_p]