Założenia do programu . Uruchamiamy , napis powitalny . Z góry dziękuje . Oto program , proszę o wskazanie błędów , jeśli takowe są . '========================================================= $regfile = "m8def.dat" $crystal = 8000000 Config Spi = Soft , Din = Portd.6 , Dout = Portd.5 , Ss = None , Clock = Portd.4 Config Lcd = 20 * 2 Config Lcdmode = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5 Cursor Off Config Pinb.4 = Input 'linia PB4 jako wejściowa Config Pinb.2 = Input 'linia PB2 jako wejściowa Config Pinb.1 = Output 'linia PB1 (PC1A) jako wyjściowa Config Pind.5 = Output Config Pind.5 = Output Config Pind.6 = Input Config Portb = Output Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 64 'konfiguracja Timer1 jako 'generatora sygnału PWM na 'wyjściu OC1A Pwm1a = 75 ' wartość początkowa Sck1 Alias Portd.4 Cs1 Alias Portd.5 So1 Alias Portd.6 S1 Alias Pinb.4 'przypisanie nazwie Pinb.4 'nazwy S1 S2 Alias Pinb.2 'przypisanie nazwie Pinb.2 'nazwy S2 Cs1 = 1 Sck1 = 0 So1 = 1 S1 = 1 'dołączenie do linii PB4 'rezystora podciągającego S2 = 1 'dołączenie do linii PB2 Dim Temp As Word Dim wartprocent AS Word Dim I As Byte 'zmienna, której wartość określa 'wypełnienie sygnału PWM Cls Lcd "Witaj" Wait 2 Cls Lcd "*XXXX*" 'powitanie Lowerline Lcd "YYYYYY" Wait 4 Cls Do Cs1 = 0 Shiftin So1 , Sck1 , Temp , 0 , 16 'odczyt temperatury z termopary k poprzez max6675 Cs1 = 1 Shift Temp , Right , 3 Temp = Temp / 4 'dzielone przez 4 dla uzyskania pełnego wyniku wartprocent = I * 0.4 Lcd "Temperatura:" ;Temp; "C" Lowerline Lcd "Moc:" ; wartprocent ; "%" If Temp >= 40 Then Gosub Sterowanie End If If Temp < 40 Then Portb.1 = 0 End If Loop End '===========Obsługa wentylatora DC================ Sterowanie: If S1 = 0 Then Waitms 25 If S1 = 0 Then 'jeśli nadal wciśnięty If I < 250 Then I = I + 25 'jeśli I mniejsze od 250 to zezwól na zwiększenie wartości I Pwm1a = I 'przepisz wartość I do rejestru Pwm1a Waitms 20 End If End If If S2 = 0 Then Waitms 25 If S2 = 0 Then 'jeśli nadal wciśnięt If I > 0 Then I = I - 25 'jeśli I większe od 0 to zezwól na zmniejszenie wartości I Pwm1a = I 'przepisz wartość I do rejestru Pwm1a Waitms 20 End If End If Return
|
|||
Re: Termopara
Jedyne co widze to brak jakiegokolwiek obuźnienia w Do loop a program cały działa tylko w do loop. Albo trzeba użyć timera do taktowania programu albo chociaż dac jakieś opuźnienie.
Sprawdź program w praktyce.
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.
Program sprawdzę napewno w
Program sprawdzę napewno w praktyce ale narazie chciałbym poradzić się kogoś mądrzejszego .
Ale opuźnienie pętli to gdzie mam dać , przed pętlą Do Loop , czy gdzieś w pętli .
Druga sprawa to wywoływanie podprogaramu , czy jest to poprawne ?
Re: Sterowanie wentylatora
Daj opóźnienie zaraz przed loop, wewnątrz pętli. Jasne że wewnątrz bo to co przed pętlą wykona się tylko raz
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.
A co to opuźnienie w pętli
A co to opuźnienie w pętli sprawi ? A co jeśli by go nie było ?
Re: delay
Do teraz goni w pętli z całą prędkością, nie ma nad tym żadnej kontroli.
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.
aha , a jakie opóźnienie dać
aha , a jakie opóźnienie dać najlepiej ( 100 ms ) ?
Re: 100ms
daj i sprawdź, to jest bezsensu że o tym piszemy, już dawno temu miałeś to sprawdzić. Programów nie da sie pisać na czuja.
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.