Witaj Mirku jestem początkujący w programowaniu, przerobiłem pewien kod z sieci i działa super. '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
|
|||
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.