KPRR Napisano Grudzień 10, 2011 Udostępnij Napisano Grudzień 10, 2011 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"
Decado Grudzień 11, 2011 Udostępnij Grudzień 11, 2011 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.
KPRR Grudzień 11, 2011 Autor tematu Udostępnij Grudzień 11, 2011 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.
Phil Grudzień 11, 2011 Udostępnij Grudzień 11, 2011 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.
KPRR Grudzień 11, 2011 Autor tematu Udostępnij Grudzień 11, 2011 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
Phil Grudzień 11, 2011 Udostępnij Grudzień 11, 2011 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
KPRR Grudzień 11, 2011 Autor tematu Udostępnij Grudzień 11, 2011 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ć
Phil Grudzień 12, 2011 Udostępnij Grudzień 12, 2011 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ś.
KPRR Grudzień 12, 2011 Autor tematu Udostępnij Grudzień 12, 2011 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 ??
Phil Grudzień 12, 2011 Udostępnij Grudzień 12, 2011 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.
KPRR Grudzień 12, 2011 Autor tematu Udostępnij Grudzień 12, 2011 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 ??
Phil Grudzień 12, 2011 Udostępnij Grudzień 12, 2011 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.
KPRR Grudzień 12, 2011 Autor tematu Udostępnij Grudzień 12, 2011 Z tym językiem nie ma problemu 12 lat nauki nie idzie na marne wielkie dzięki za pomoc w rozwiązaniu problemu
KD93 Grudzień 12, 2011 Udostępnij Grudzień 12, 2011 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,
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »