Skocz do zawartości

[Bascom] problem z programem


KPRR

Pomocna odpowiedź

Witam mam drobny problem bo jestem początkujący w dziedzinie programowania mikro kontrolerów i mam do was prośbę podaje program jaki napisałem i czy koledzy bardziej doświadczeni mogli by mi sprawdzić czy gdzieś nie mam błędu i czy dobrze jest napisany pod względem co ma robić. Opis działania miał by być taki że gdy potencjometr osiowy pociągniemy w górę to serwo miało by się zacząć przemieszczać. Na razie tylko tyle bym chciał by robiło. Z góry dziękuje pozdrawiam.

$regfile = "attiny13.dat"
$crystal = 1000000

Config Pinb.1 = Input                                      'wyprowadzenie PD5 jako wyjscie'            
Config Pinb.2 = Input                                      'wyprowadzenie PB3 jako wejscie'
Config Pinb.3 = Input                                      'wyprowadzenie PB4 jako wejscie'
Config Pinb.5 = Output                                     'wyprowadzenie PB0 jako wyjscie'
Config Pinb.6 = Output                                     'wyprowadzenie PB1 jako wyjscie'
Config Pinb.7 = Output                                     'wyprowadzenie PB2 jako wyjscie'

 Portb.1 = 0                                               'stan poczatkowy = 0'
 Portb.2 = 0                                               'stan poczatkowy = 0'
 Portb.3 = 0                                               'stan poczatkowy = 0'
 Portb.5 = 0                                               'stan poczatkowy = 0'
 Portb.6 = 0                                               'stan poczatkowy = 0'
 Portb.7 = 0                                               'stan poczatkowy = 0'

Do

  If Pinb.1 = 1 Then                                       'gdy potencjometr 1 w góre to'
   Portb.5 = 1                                             'serwo1 zaczyna sie przenieszczac'
  Waitms 200                                               'czekaj 0.2s i ponow sygnal'
     Elseif Pinb.2 = 1 Then                                'gdy potencjometr 2w góre to'  
   Portb.6 = 1                                             'serwo2 zaczyna sie przemieszczac'
  Waitms 200                                               'czekaj 0.2s i ponow sygnal'
  End If

Loop

End

__________

Komentarz dodany przez: Nawyk

Używaj, proszę, znacznika [ code][ /code] - zaznaczasz w polu edycji posta treść kodu i wciskasz przycisk "Code"

Link do komentarza
Share on other sites

Po pierwsze przy konfigurowaniu portów używamy polecenia:

Config PORTB.1 = input
Portb.1 = 0

Po drugie sterowanie serwem polega troszkę na czymś innym,

Serwomechanizmy steruje się poprzez impulsy podawane z określana częstotliwością (50Hz). Czas tych impulsów powinien się mieścić w zakresie od 1,5ms do 2,5 mili sekundy, a zależnie od tego czasu serwo ustawia się pod odpowiednim kątem i utrzymuje tą pozycje aż do zmiany sygnału.

Także popraw sobie procedurę sterowania serwem do tych wymogów i wgraj na procka i sprawdź czy ci będzie działało. Jak nie to podeślij do sprawdzenia 🙂. W ten sposób najlepiej się nauczysz a nie jeśli ktoś będzie ci dawał gotowce.

Link do komentarza
Share on other sites

Staram się zrozumieć tą komendę Config servos lecz nie potrafię jej podpiąć do mojego programu błędy które kolega mi pokazał zostały zlikwidowane. Czytając pomoc BASCOMA nie mogę zrozumieć jak to mogę dopisać i w którym miejscu to wpisać u mnie w programie. Mógłby ktoś mi dopisać linie kodu i wytłumaczyć czemu akurat tu i dlaczego tak ??

z góry dziękuje za wyrozumiałość i pomoc.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Konfigurację serwa wstawiamy nad konfiguracją portów:

Config Servos = 1 , Servo1 = Portd.1 , Reload = 10

A potem wstawiamy to polecenie do programu tam gdzie chcemy ustawić serwo.

Servo(1) = 150 'tutaj wstawiamy w jakiej pozycji ma być serwo np. tutaj jest w pozycji środkowej'

Tam gdzie w programie podałem 150 to podajemy liczbę w zakresie 100 - 200. 100 to najbardziej w lewo, a 200 to najbardziej w prawo.

Tutaj masz to fajnie opisane.

Link do komentarza
Share on other sites

Czyli jak dobrze zrozumiałem to program powinien być w takiej formie

$regfile = "attiny13.dat"
$crystal = 1000000

Config Servos = 2 , Servo1 = Portb.5 , Servos2 = Portb.6 , Reload = 10
Config Portb.1 = Input                                     'wyprowadzenie PD5 jako wejscie'                          '
Config Portb.2 = Input                                     'wyprowadzenie PB3 jako wejscie'
Config Portb.3 = Input                                     'wyprowadzenie PB4 jako wejscie'
Config Portb.5 = Output                                    'wyprowadzenie PB0 jako wyjscie'
Config Portb.6 = Output                                    'wyprowadzenie PB1 jako wyjscie'
Config Portb.7 = Output                                    'wyprowadzenie PB2 jako wyjscie'

 Portb.1 = 0                                               'stan poczatkowy = 0'
 Portb.2 = 0                                               'stan poczatkowy = 0'
 Portb.3 = 0                                               'stan poczatkowy = 0'
 Portb.5 = 0                                               'stan poczatkowy = 0'
 Portb.6 = 0                                               'stan poczatkowy = 0'
 Portb.7 = 0                                               'stan poczatkowy = 0'

Do

  If Pinb.1 = 1 Then                                       'gdy przycisk 1 wcisniety to'
   Servo(1) = 150                                          'serwo1 zaczyna sie przenieszczac'
  Waitms 200                                               'czekaj 0.2s i ponow sygnal'
     Elseif Pinb.2 = 1 Then                                'gdy przycisk 2 wcisniety to'   'serwo2 zaczyna sie przemieszczac'
   Serwo(2) = 150                                          'serwo2 zaczyna sie przemieszczac'
  Waitms 200                                               'czekaj 0.2s i ponow sygnal'
  End If

Loop

End
Link do komentarza
Share on other sites

Tak, ale:

 Servo(1) = 150                                          'serwo1 zaczyna sie przenieszczac' 

Serwo się nie przemieszcza cały czas, ale do czasu, aż osiągnie połowę.

I zapomniałem napisać, że przed pętlą głównego programu wstawiamy:

Enable Interrupts 
Link do komentarza
Share on other sites

mimo dopisania komend to program gdy sprawdza poprawność cały czas pokazuje mi błędy w linii kodu

 config servos = 2 , Servo1 = Portb.5 , Servos2 = Portb.6 , Reload = 10 

Error : 22 line : 4 Out of SRAM space, in file D:\mikrokontrolery\prog2\poprawka.bas

Error : 31 line : 4 Invalid datatype [[0011] 0[___SERWOTICK]] , in file D:\mikrokontrolery\prog2\poprawka.bas

Error : 64 line : 4 , expected , in file : D:\mikrokontrolery\prog2\poprawka.bas

nie wiem co mam źle coś mi świta że może procek być nieodpowiedni do tych działań

może męczę was koledzy ale moja wrodzona ciekawość nie pozwala się poddać

Link do komentarza
Share on other sites

Error 22 procek ma za mało pamięci SRAM. Następne to coś nie tak.

Tak jeszcze wracając do moich poprzednich postów, jakby to nie działało to spróbuj pokombinować trochę sam. Poszukaj w internecie lub coś.

Link do komentarza
Share on other sites

Nie wiem czy to dobre rozwiązanie ale myślałem na tym by procek generował sygnał 1 stały bez czasówki i ten sygnał podpiąć do układu L293D by ten układ sterował serwem czy to jest dobre rozwiązanie ??

Link do komentarza
Share on other sites

Zależy co chcesz zrobić. Chodzi o sposób działania serwa. Jeśli ma działać tak jak zwykłe serwo czyli nie przerobione to jest to złe rozwiązanie, gdyż układ L293D to mostek H, który ma za za zadanie sterować silnikami, Jeśli natomiast chcesz wykorzystać serwo jako silnik to jest to dobre rozwiązanie,
ale serwo trzeba przerobić. Tu masz to opisane.

Link do komentarza
Share on other sites

znaczy jeden z projektów to ma być platforma zwykła która działa na zasadzie czołgu serwa mikro posiadam i chce je przerobić. Następny projekt to ma być ramie robota zamontowane na platformie więc jak tak to muszę przerobić serwo i będzie ok tak ?? a jak chce by serwo działało normalnie to muszę kupić większy procek np. Atmege8 ??

Link do komentarza
Share on other sites

Teoretycznie serwo możesz sterować każdym prockiem, ale nie każdy procek ma odpowiednie parametry. Chodzi o pamięć flash, RAM, SRAM. musisz wiedzieć jak długi będzie program i jak dużo będzie on zajmował/wykorzystywał te pamięci. Poczytaj dokumentacje procków. Tam dowiesz się wszystkiego na temat danego uC. Ale trzeba trochę znać j. Angielski.

Link do komentarza
Share on other sites

imo dopisania komend to program gdy sprawdza poprawność cały czas pokazuje mi błędy w linii kodu

Kod programu: Zaznacz cały

config servos = 2 , Servo1 = Portb.5 , Servos2 = Portb.6 , Reload = 10

Masz literówkę. Servo2 a nie Servos2,

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.