Witam
Mam problem, otóż, gdy w programie ustawiam stałą wartości temperatury np. 30*, 60*, 90* warunki dobrze działają. Natomiast z czujnikiem DS18B20 już program nie działa poprawnie, wentylator nie obraca się. A powinien zmieniać płynnie obroty zależnie od temperatury. Jaki jest błąd w programie?
'****************************** PROCEK I KWARC *********************************
$regfile = "attiny2313.dat"
$crystal = 8000000
'****************************** TIMER 1 ****************************************
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down
'********************************** STAŁE **************************************
Const Low_temp = 30 'Low temperatura
Const High_temp = 85 'High temperatura
Const Overheat = 90 'Power OFF - Przegrzany !
'********************************* ZMIENNE *************************************
Dim Odczyt(2) As Byte 'Temperatura
Dim T As Byte
Dim T1 As Byte
'************************* KONFIGURACJA PORTÓW *********************************
Config 1wire = Portb.1 ' DS18B20
Config Portb.0 = Output ' LED RED
Config Portb.3 = Output 'Wentylator PWM
'******************************** PROGRAM **************************************
Start:
Stop Timer1
Portb.0 = 0 'Sygnalizacja LED
Waitms 500
Portb.0 = 1
Waitms 500
Portb.0 = 0
Waitms 500
Portb.0 = 1
Waitms 500
Portb.0 = 0
Waitms 500
Portb.0 = 1
Waitms 500
Portb.0 = 0
Start Timer1 'Start TIMER1
'*******************************************************************************
Do
1wreset 'reset
1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM
1wwrite &H44 'dokonaj konwersji
Waitms 750 'Czekaj
1wreset 'reset
1wwrite &HCC 'rozkaz adresowy SKIP ROM
1wwrite &HBE 'rozkaz funkcyjny - polecenie odczytu DS18B20
Odczyt(1) = 1wread(2) 'odczytaj dwa pierwsze bajty
T = Odczyt(2) 'przepisz starszy bajt do zmiennej typu Integer
Shift T , Left , 8 'przesuń ten bajt w lewo na wyższe pozycje
T = T + Odczyt(1) 'przepisz - dodaj młodszy bajt
T1 = T * 0.0625
If T1 < Low_temp Then Pwm1a = 0 'Przelicznik temperatury na wartość PWM
If T1 >= Low_temp And T1 < High_temp Then Pwm1a = T1 + 70
If T1 >= High_temp Then Pwm1a = 255
If T1 >= Overheat Then
Pwm1a = 255
Set Portb.0 ' LED RED ON
End If
Loop
End