PWM i pomiar temperatury DS18B20


Witaj Mirku jestem początkujący w programowaniu, przerobiłem pewien kod z sieci i działa super.
Ma to być regulator obrotów dmuchawy pieca CO ustawiany ręcznie i wyświetlany procentowo na LCD.
Chcę dołożyć pomiar temperatury na DS18B20 ale gdy wklejałem do tego kodu ten pomiar temp, to program się sypie
wyczytałem że to przez Waitms 750 bo wtedy program stoi i wyjściem na to jest obsługa 1Wire w przerwaniach ale
dla mnie to jest za trudne.
To jest ten kod -

    'Wyświetlanie PWM na LCD v 1.1
 
 
 
    $regfile = "m8def.dat"                                  'informuje kompilator o pliku
      'dyrektyw mikrokontrolera
$crystal = 8000000                                          'informuje kompilator
      'o częstotliwości oscylatora
      'taktującego mikrokontroler
 
 
Config Lcd = 20 * 4                                         'konfiguracja typu wyťwietlacza
      'LCD
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2       'konfiguracja linii
      'mikrokontrolera, do ktˇrych
      'do-?czono wyťwietlacz
      'LCD
 
 
'**********************************************************************************************************************
' PWM OC1A , KONFIGURACJA Timer1 JAKO GENERATORA SYGNAŁU PWM NA WYJŚCIU OC1A
'**********************************************************************************************************************
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 1024
 
 
'*********************************************************************************************************************
 
Dim Wartosc As Byte                                         'Zmienna PWM 0-255
Dim Mnozenie As Word                                        'Mnożenie Wartości PWM * 100
Dim Procent As Word                                         'Zmienna PWM w procentach 0-100%
Dim Pozycja As Word
Dim Pozycja1 As Word
Dim Licznik As Byte
Dim Calosc As Byte
Dim Ulamek As Byte
Dim Spacja As Byte
Dim On_off As Byte                                          'Deklaracja zmiennej do obsługi S3 przycisku ON/OFF
 
'**********************************************************************************************************************
' LCD , DEFINICJA MOICH ZNAKÓW
'**********************************************************************************************************************
Deflcdchar 0 , 4 , 21 , 14 , 31 , 14 , 21 , 4 , 32          ' wyświetlanie znaku *
Deflcdchar 4 , 32 , 16 , 16 , 16 , 16 , 16 , 16 , 32        ' wyświetlanie znaku |
Deflcdchar 5 , 32 , 20 , 20 , 20 , 20 , 20 , 20 , 32        ' wyświetlanie znaku ||
Deflcdchar 6 , 32 , 21 , 21 , 21 , 21 , 21 , 21 , 32        ' wyświetlanie znaku |||
 
'**********************************************************************************************************************
' KONFIGURACJA pinów CPU
'**********************************************************************************************************************
Config Pinb.3 = Input                                       'linia PB3 jako wejściowa
Config Pinb.4 = Input                                       'linia PB4 jako wejściowa
Config Pinb.5 = Input                                       'linia PB5 jako wejściowa
Config Pinb.1 = Output                                      'linia PB1 (PC1A) jako wyjściowa
 
'**********************************************************************************************************************
' PRZYPISANIE "Alias-ow" NAZW DO PINÓW
'**********************************************************************************************************************
S1 Alias Pinb.3                                             'przypisanie nazwie Pinb.3 nazwy S1
S2 Alias Pinb.4                                             'przypisanie nazwie Pinb.4 nazwy S2
S3 Alias Pinb.5                                             'przypisanie nazwie Pinb.5 nazwy S3
 
Set Portb.3                                                 'dołączenie do linii PB3 rezystora podciągającego
Set Portb.4                                                 'dołączenie do linii PB4 rezystora podciągającego
Set Portb.5                                                 'dołączenie do linii PB5 rezystora podciągającego
 
Waitms 10                                                   'Opóźnienie 10ms
On_off = 1
Readeeprom Wartosc , 10                                     'Odczyt wartość zmiennej PWM z EEPROM
 
'**********************************************************************************************************************
Do                                                          'początek nieskończonej pętli
 
Gosub Sterowanie_przyciskami                                'Wykonywanie podprogramu "Sterowanie_przyciskami"
 
Loop                                                        'koniec pętli nieskończonej
 
'**********************************************************************************************************************
' STEROWANIE PRZYCISKAMI
'**********************************************************************************************************************
Sterowanie_przyciskami:
 
If S1 = 0 And S3 = 1 Then                                   'jeśli przyciśnięty S1, to
Waitms 25                                                   'opóźnienie dla eliminacji drgań styków
If Procent < 100 Then
Gosub Pwm_dodawaj                                           'Wykonuj podprogram "Pwm_dodawaj"
Waitms 35                                                   'XXXXXX opuźnienie przed wysłaniem DANYCH
End If
Else
If S2 = 0 And S3 = 1 Then                                   'jeśli przyciśnięty S1, to
Waitms 25                                                   'opóźnienie dla eliminacji drgań styków
If Wartosc > 0 Then
Gosub Pwm_odejmuj                                           'Wykonuj podprogram "Pwm_odejmuj"
Waitms 35                                                   'XXXXXX opuźnienie przed wysłaniem DANYCH
End If
Else
If S3 = 0 And S1 = 1 And S2 = 1 Then                        'jeśli przyciśnięty S3, to
Waitms 25                                                   'opóźnienie dla eliminacji drgań styków 'jeśli przyciśnięty S1, to
Gosub Przycisk_s3_on_off                                    'Wykonuj podprogram "Przycisk_s3_on_off"
End If
End If
End If
Return
 
 
 
 
'**********************************************************************************************************************
' PODPROGRAM , OBSŁUGA PRZYCISKU S1 , ROZJAŚNIAJĄCEGO LED
'**********************************************************************************************************************
Pwm_dodawaj:
If Wartosc < 255 Then
Wartosc = Wartosc + 5
End If
If Wartosc > 0 Then                                         'Jeżeli zmienna > 0 to
On_off = 1                                                  'Wpisanie wartości 1 do zmiennej On_off
End If
Pwm1a = Wartosc                                             'wpisanie wartości do zmiennej do PWM
Gosub Bargraf                                               'wywołanie podprogramu Linijka
Return
 
 
'**********************************************************************************************************************
' PODPROGRAM , OBSŁUGA PRZYCISKU S2 , ŚCIEMNIAJĄCEGO LED
'**********************************************************************************************************************
Pwm_odejmuj:
Select Case Wartosc                                         'Instrukcję wyboru CASE
Case Is > 0                                                 'Jeżeli zmienna > 0 to
Wartosc = Wartosc - 5                                       'Od zmiennej PWM - 5 w każdej pętli
Pwm1a = Wartosc                                             'wpisanie wartości do zmiennej do PWM
Gosub Bargraf                                               'wywołanie podprogramu Linijka
If Wartosc = 0 Then
Cls
End If
Case 0:                                                     'Jeżeli zmienna PWM osiągnie wartość = 0
On_off = 0                                                  'Wpisz wartości 0 do zmiennej On_off
End Select                                                  'Koniec instrukcji CASE
Return
 
 
'**********************************************************************************************************************
' PODPROGRAM , OBSŁUGA PRZYCISKU S3 , ON / OFF LED
'**********************************************************************************************************************
Przycisk_s3_on_off:
If S3 = 0 Then                                              'jeśli przyciśnięty S3, to
Waitms 50                                                   'opóźnienie dla eliminacji drgań styków
If S3 = 0 Then                                              'sprawdzenie ponownie, czy
On_off = On_off + 1                                         'do zmiennej On_off +1
Writeeeprom Wartosc , 10                                    'zapisz wartość PWM do EEPROM
If On_off = 2 Then                                          'Jeżeli zmienna On_off = 2 to
On_off = 0                                                  'Wpisz do zmiennej wartość 0 do zmiennej On_off
Writeeeprom Wartosc , 10                                    'zapisz wartość PWM do EEPROM
End If
End If
 
Select Case On_off                                          'Instrukcję wyboru CASE
Case Is = 0:                                                'Jeżeli zmienna = 0 to
Readeeprom Wartosc , 10                                     'Odczyt wartość zmiennej PWM z EEPROM
If Wartosc = 0 Then
Wartosc = 25
End If
Pwm1a = Wartosc                                             'przepisz zawartść do PWM
Gosub Bargraf                                               'wywołanie podprogramu Linijka
Waitms 35                                                   'XXXXXX opuźnienie przed wysłaniem DANYCH
Case 1 :                                                    'i Jeżeli zmienna = 1 to
Writeeeprom Wartosc , 10                                    'zapisz wartość PWM do EEPROM
Procent = 0
Pwm1a = 0                                                   'Wpisz wartość 0 do PWM
Waitms 35                                                   'XXXXXX opuźnienie przed wysłaniem DANYCH
Cls
End Select                                                  'Koniec instrukcji CASE
End If
Return
 
 
'**********************************************************************************************************************
' PODPROGRAM , LCD WYŚWIETLANIE WARTOŚĆI W % + BARGRAF
'**********************************************************************************************************************
Bargraf:                                                    'NAZWA PODPROGRAMU WYŚWIETLANIA DANYCH NA LCD
Mnozenie = Wartosc * 100                                    'Mnożenie Wartości PWM * 100
Procent = Mnozenie / 255                                    'Podzielenie przez / 255
 
 
Locate 1 , 11 : Lcd Chr(0)                                  'wyświetlanie od 11 pozycji "*"
Select Case Procent                                         'instrukcja wyboru CASE , początek uwarunkowań
Case Is < 10:                                               'jeżeli zmienna jest < od 10
Locate 1 , 12 : Lcd " "                                     'Czyszczenie Pozycji 12 , 13 Lcd
Locate 1 , 14 : Lcd Procent ; " %"                          'wyświetlanie zmiennej od pozycji 14 + spacja + znaku %
Case 10 To 99:                                              'jeżeli zmienna jest w przedziale od 10 do 99
Locate 1 , 12 : Lcd " "                                     'Czyszczenie Pozycji 12 Lcd
Locate 1 , 13 : Lcd Procent ; " %"                          'wyświetlanie zmiennej od pozycji 13 + spacja + znak %
Case 100:                                                   'jeżeli zmienna jest = 100
Locate 1 , 12 : Lcd Procent ; " %"                          'wyświetlanie zmiennej od pozycji 12 + spacja + zanak %
End Select                                                  'koniec uwarunkowań
'dostępnych pozycji wyświetlacza - 48 (16*3)
Pozycja1 = Wartosc * 48                                     'Mnożenie Wartości PWM * 48
Pozycja = Pozycja1 / 255                                    'podział Pozycja1 / 255 by uzyskać "48 pozycji"
Calosc = Pozycja / 3                                        'Jedna pozycja wyświetlacza może wyswietlać 3 wartości
Ulamek = Pozycja Mod 3                                      'O rodzaju znaku zakończenia linijki informuje zmienna Ulamek
 
 
For Licznik = 0 To Calosc
Locate 2 , Licznik
Lcd Chr(6)
Next Licznik                                                'Wyśwetlamy ilość całości
 
If Ulamek = 1 Then
Locate 2 , Licznik
Lcd Chr(4)
Incr Licznik
End If
'Dopisujemy niepełną pozycję 1/3 lub 2/3
If Ulamek = 2 Then
Locate 2 , Licznik
Lcd Chr(5)
Incr Licznik
End If
 
For Spacja = Licznik To 16                                  'Resztę wypełniamy spacjami
Locate 2 , Spacja
Lcd " ";
Next Spacja
 
Return
 
End                                                         'koniec programu

Proszę o pomoc w tym temacie, a najprościej byłoby wstawienie regulacji obrotów
w twoim projekcie "Prosty sterownik CO"
Pozdrawiam R.G




Portret użytkownika mirley

RE: Sterowanie dmuchawą

Program się sypie bo wszędzie są użyte waity .... powinien być do tego użyty timer to działało by ok. Nie będę teraz kombinował nic z programem prostego sterownika CO bo mam w planach zrobić jeszcze w tym roku zaawansowany sterownik CO, w którym wstawi się dużo różnych wyjść wejść i opcji działania..... Niestety nie mam teraz czasu nad zastanawianiem się jak to wrzucić do programu.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.