Witam czytających - posiadając minimalną wiedzę o pisaniu programów w Bascom'ie - postanowiłem że spróbuje napisać taki program i przetestować go na mojej płytce uruchomieniowej EvB 4.3.
Na tą chwile mam taki oto napisany program.
Kod:
'zwiększanie ADC zapala PB1-LED,gasi PB0-LED
'zmiejszanie ADC zapala PB0-LED,gasi PB1-LED
'wyrównanie wartości gasi LED'y
'czyszczenie znaku stopnia działa
'przy zmiejszaniu zadanej - poniżej wartości
'odczytanej zapalaja się na przemian obie LED'y
'nie wiem czemu?
$regfile = "m644pdef.dat" 'informuje kompilator o typie mikrokontrolera
'$sim
$crystal = 16000000 'informuje kompilator
'o częstotliwości oscylatora
'taktującego mikrokontroler
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7 'porty mikrokontrolera, do których dołączono wyświetlacz LCD
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'konfiguracja wewnętrznego przetwornika A/C
Config Portd = &B11111100 : Portd = &B11111111
Config Portb = &B11111111 : Portb = &B11111111
Deflcdchar 1 , 31 , 31 , 4 , 4 , 4 , 4 , 4 , 4 ' replace ? with number (0-7)
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)
Deflcdchar 3 , 31 , 31 , 4 , 4 , 4 , 32 , 32 , 32 ' replace ? with number (0-7)
Deflcdchar 4 , 4 , 4 , 4 , 4 , 14 , 14 , 31 , 31 ' replace ? with number (0-7)
Deflcdchar 5 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)
'Zmienne
Dim Wart_ac1 As Word 'zmienna na wartość odczytaną z przetwornika
Dim V1 As Single
Dim V2 As Integer
Dim V3 As String * 3
Dim V4 As Integer
Dim V5 As Single
Dim V6 As String * 3 'zmienna przechowująca obliczon
Declare Sub Lewo
Declare Sub Prawo
Declare Sub Zatrz
Start Adc 'uruchamia wbudowany przetwornik
Wart_ac1 = Getadc(0) 'odczytanie wartości z wejści ADC0 mikrokontrolera
V1 = Wart_ac1 / 2.841 'zamiana odczytanej wartości z A/C na stopnie azymutu
V2 = Int(v1)
V3 = Str(v2)
Cursor Off
Cls
Wait 1
Locate 1 , 4 : Lcd "STEROWNIK"
Waitms 500
Locate 2 , 6 : Lcd "ROTORA"
Wait 1
Cls
Locate 1 , 6 : Lcd "Azymut"
Locate 2 , 1 : Lcd Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2)
Locate 3 , 2 : Lcd V3 ; Chr(5)
Locate 3 , 9 : Lcd Chr(4)
Locate 3 , 12 : Lcd V2 ; Chr(5)
V4 = V2
Cls
Do
'początek pętli programu
Wart_ac1 = Getadc(0) 'odczytanie wartości z wejści ADC0 mikrokontrolera
V1 = Wart_ac1 / 2.841 'zamiana odczytanej wartości z A/C na stopnie azymutu
V2 = Int(v1)
V3 = Str(v2)
Locate 1 , 6 : Lcd "Azymut"
Locate 2 , 1 : Lcd Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(2)
Locate 3 , 2 : Lcd V3 ; Chr(5) ; " "
Locate 3 , 9 : Lcd Chr(4)
Locate 3 , 12 : Lcd V4 ; Chr(5) ; " "
If Pind.0 = 0 Then 'zwiększanie zadanego azymutu
Waitms 25
If Pind.0 = 0 Then
Incr V4
If V4 => 360 Then
V4 = 360
End If
End If
End If
If Pind.1 = 0 Then 'zmiejszanie zadanego azymutu
Waitms 25
If Pind.1 = 0 Then
Decr V4
If V4 <= 0 Then
V4 = 0
End If
End If
End If
Locate 3 , 12 : Lcd V4 ; Chr(5)
V5 = Val(v3)
V6 = Str(v4)
If V3 < V6 Then
Gosub Lewo
End If
If V3 > V6 Then
Gosub Prawo
End If
If V3 = V6 Then
Gosub Zatrz
End If
Loop 'koniec pętli Do...Loop
End 'koniec programu
Sub Lewo
Portb = &B11111111 : Portb = &B11111110
End Sub Lewo
Sub Prawo
Portb = &B11111111 : Portb = &B11111101
End Sub Prawo
Sub Zatrz
Portb = &B11111111 : Portb = &B11111111
End Sub Zatrz
podczas zmieszania przyciskiem wartości zadanej ( tej po prawej stronie)
podczas przechodzenia z setek na dziesiątki oraz z dziesiątek na jedności zapala mi się LED podłączona do PB0 - czy może ktoś podpowiedzieć co robie źle - pozdrawiam Jacek.
P.S. załączam obrazek poglądowy sterownika