Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Sterownik rotora - Bascom
SQ2EER Offline
Jacek sk
***

Liczba postów: 182
Dołączył: 17-06-2009
Post: #5
RE: Sterownik rotora - Bascom
Witam i dziękuje za odpowiedzi - zmieniłem nieco program, zmieniłem typ zmiennych teraz zapalanie i gaszenie LED'ów jest ok.
Wiem że program powinien być pisany na przerwaniach - ale narazie nie umiem tego.
Ja wybrałem silnik krokowy ponieważ taki mam (3 sztuki) oraz jeden gotowy sterownik na AD3977.
Może koledzy podpowiedzą ( przykłady ) jak zrobić menu.
Wyłącznik krańcowy to dobry pomysł - będzie wstawiony (może 2 sztuki 0 stopni i 360).
Tymczasem wstawiam poprawiony kod w Bascom'ie.

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
'zapalanie LED'ów w niewłąściwym momencie
'usunięte
$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 Stopnie As Single                                       'zmienna stopni odczyt z przetwornika 'Dim V1 As Single
                                                            'podzielony przez 2.841
Dim Azym_odcz As Word                                       'zmienna odczytanego azymutu'Dim V2 As Word
Dim Azym_zad As Word                                        'zmienna zadanego azymutu'Dim V3 As Word

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
Stopnie = Wart_ac1 / 2.841                                  'zamiana wartości odczytane z przetwornika'V1 = Wart_ac1 / 2.841                                       'zamiana odczytanej wartości z A/C na stopnie azymutu
                                                            'na stopnie zaymutu
Azym_odcz = Int(stopnie)                                    'wyciągnięcie części całkowitej ze zmienne "stopnie"'V2 = Int(v1)

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 Azym_odcz ; Chr(5) ; "  "
Locate 3 , 9 : Lcd Chr(4)
Locate 3 , 12 : Lcd Azym_odcz ; Chr(5) ; "  "
Locate 4 , 2 : Lcd Stopnie ; "                "             'odczyt testowy stopni bez zaokrąglania
Azym_zad = Azym_odcz

Cls

Do
                                                         'początek pętli programu
Wart_ac1 = Getadc(0)                                        'odczytanie wartości z wejści ADC0 mikrokontrolera
Stopnie = Wart_ac1 / 2.841                                  'zamiana odczytanej wartości z A/C na stopnie azymutu
Azym_odcz = Int(stopnie)


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) ; "  "
Locate 4 , 2 : Lcd Stopnie ; "                "             'odczyt testowy stopni bez zaokrąglania

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 Or Azym_zad > 360 Then
         Azym_zad = 0
         End If
      End If
End If

Locate 3 , 12 : Lcd Azym_zad ; Chr(5) ; "  "




If Azym_odcz < Azym_zad Then
Gosub Lewo
End If

If Azym_odcz > Azym_zad Then
Gosub Prawo
End If

If Azym_odcz = Azym_zad 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

pozdrawiam 73 Jacek.
28-03-2011 19:02
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
Sterownik rotora - Bascom - SQ2EER - 27-03-2011, 21:42
RE: Sterownik rotora - Bascom - SQ2EER - 28-03-2011 19:02

Skocz do:


Użytkownicy przeglądający ten wątek: 5 gości