hi efekt obracania się rotora - czyli w drugiej linijce od lewej:
wskazanie aktualnego azymutu (261) w środku znacznik z prawej zadany azymut (305), a w pierwszej właśnie przesuwanie się stopni jak obraca się rotor - chcę
spróbować napisać program do sterownika rotora pozdrawiam Jacek.
Witam - napisałem taki programik z odczytem napięcia z potencjometru przez przetwornik ale nie mogę sobie poradzić z zaokrągleniem zmiennej "azym_zad" do wartości całkowitej - wychodzi mi z ułamkiem - co robie źle - mogę prosić o podpowiedź.
program:
Kod:
'odczyt testowy ADC Atmega 644p płyta testowa EvB 4.3 zamiana odczytanej
'wartości z A/C na stopnie azymutu
'Program obsługi wbudowanego w mikrokontroler
'10-bitowego przetwornika A/C
$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 Pind.0 = Input
Config Pind.1 = Input
Config Portb.0 = Output
Config Portb.1 = Output
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 'zmienna przechowująca obliczon
Dim Azym_odcz As String * 3 'zmienna, do której będzie wpisywany odczytany azymut
Dim Azym_zad As Single 'zmienna, do której będzie wpisywany zadany azymut
Declare Sub Lewo
Declare Sub Prawo
Declare Sub Kierunek
Set Pind.0
Set Pind.1
Set Portb.0
Set Portb.1
Start Adc 'uruchamia wbudowany przetwornik
Wart_ac1 = Getadc(0) 'odczytanie wartości z wejści ADC0 mikrokontrolera
V1 = Wart_ac1 / 2.842 'zamiana odczytanej wartości z A/C na stopnie azymutu
Azym_odcz = Fusing(v1 , "#." )
Azym_zad = V1
Cursor Off
Cls
Wait 2
Azym_zad = V1
Locate 1 , 4 : Lcd "STEROWNIK"
Waitms 500
Locate 2 , 6 : Lcd "ROTORA"
Wait 2
Cls
Do
'początek pętli programu
Wart_ac1 = Getadc(0) 'odczytanie wartości z wejści ADC0 mikrokontrolera
V1 = Wart_ac1 / 2.842 'zamiana odczytanej wartości z A/C na stopnie azymutu
Azym_odcz = Fusing(v1 , "#." ) 'formatowanie wartości zmiennej
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 Azym_odcz ; Chr(5) ;
Locate 3 , 9 : Lcd Chr(4)
Locate 3 , 12 : Lcd Azym_zad ; Chr(5)
If Pind.0 = 0 Then 'zwiększanie zadanego azymutu
Waitms 25
If Pind.0 = 0 Then
Incr Azym_zad
If Azym_zad => 360 Then
Azym_zad = 360
End If
End If
End If
If Pind.1 = 0 Then 'zmiejszanie zadanego azymutu
Waitms 25
If Pind.1 = 0 Then
Decr Azym_zad
If Azym_zad <= 0 Then
Azym_zad = 0
End If
End If
End If
Locate 3 , 12 : Lcd Azym_zad ; Chr(5)
If V1 <> Azym_zad Then
Gosub Kierunek
End If
Loop 'koniec pętli Do...Loop
End 'koniec programu
Sub Kierunek
If V1 < Azym_zad Then
Reset Portb.0 : Set Portb.1 'zapalanie diody LED1
End If
If V1 > Azym_zad Then
Reset Portb.1 : Set Portb.0 'zapalanie diody LED2
End If
If V1 = Azym_zad Then
Set Portb.0 : Set Portb.1 'gaszenie obu LED
End If
End Sub
część programu do odczytu z przetwornika znalazłem w necie - pozdrawiam 73 Jacek.