Skocz do zawartości

Konfiguracja fusebitów i podłączenie do ISP


Wojtek

Pomocna odpowiedź

A właśnie jak KD93 udało się sterować 12 serwami w skarabeuszu z użyciem jednego procesora bo przejrzałem opis tego robota i inforamacji na ten temat nie znalazłem?

Rzekłbym: "normalnie", po prostu skonfigurowałem 13 serw (teraz jest jeszcze jedno w chwytaku). Trzeba mieć tylko osobne i bardzo stabilne zasilanie dla nich, najlepiej z kondensatorem przy każdym serwie (chociaż ja nie mam), a przynajmniej jakieś większe elektrolity przy źródle. Config Servos obsługuje do 16 serw.

W skrócie: konfiguruje się tak samo jak np 2 serwa, tyle że więcej 😋 Jak ktoś będzie bardzo chciał to mogę poszukać programu i zamieścić fragmenty.

Link do komentarza
Share on other sites

KD93 Inni koledzy z tego forum skutecznie mnie przekonali żebym nie korzystał z poleceń Config Servos tylko abym zrealizował to samemu na timerach. U mnie na jeden procek będzie przyopadały max 6 serwa (na drugi 5 serw). Byłbym bardzo wdzięczny jakby udało Ci się znaleźć ten program. Czy wystarczy wewnętrzny kwarc 1Mhz czy bez zewnętrznego się nie obejdzie?

Link do komentarza
Share on other sites

Zdecydowanie lepsze zewnętrzne taktowanie, ja mam 20MHz ALE nie testowałem na niższych, możliwe że tez działa. "Podstawowe" AVR'y mają taktowanie chyba do 16MHz, przy nim na pewno zadziała. Te wszystkie megi 48, 88 itd mają już do 20MHz. Już szukam programu.

Link do komentarza
Share on other sites

Sześć serwo spokojnie obsłużysz, chociaż ja też odradzam tą funkcje, ale jak już to robisz w bascomie to dobrze jest ją wykorzystać, a przynajmniej sprawdzić czy działa. Ja obsługiwałem najwięcej 5 i wszystko chodziło. Teraz to robię kompletnie inaczej, ale w c, stosuje PWM o częstotliwości 50Hz. Jest to łatwo zrobić w trybie 15 licznika 1. W rejestrze ICR mam zdefiniowaną częstotliwość, a w OCR czas trwania impulsu. Jak zastosuje się kwarc 1MHz lub 10MHz, to łatwo się określa wszystko, bo wartości które ustawiamy, to czas impulsu przemnożony przez wielokrotność 10(zależnie od kwarcu).

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

Natomiast do obsługi serw procesor można spokojnie taktować 1MHz, w zupełności wystarczy, a jeszcze między obsługą serw procesorowi będzie się nudzić.

Czyli jak z tym kwarcem?

Link do komentarza
Share on other sites

Config Portd.4 = Output                                     'serwa HXT900
Config Portd.7 = Output
Config Portb.5 = Output
Config Portb.4 = Output
Config Portb.3 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.4 = Output

Config Portc.5 = Output
Config Servos = 13 , Servo1 = Portd.7 , Servo2 = Portb.1 , Servo3 = Portb.3 , Servo4 = Portc.2 , Servo5 = Portc.1 , Servo6 = Portb.5 , Servo7 = Portb.0 , Servo8 = Portb.2 , Servo9 = Portb.4 , Servo10 = Portc.3 , Servo11 = Portc.4 , Servo12 = Portd.4 , Servo13 = Portc.5 , Reload = 8
S1 Alias Servo(1)                                           'aliasy serw
S2 Alias Servo(2)
S3 Alias Servo(3)
S4 Alias Servo(4)
S5 Alias Servo(5)
S6 Alias Servo(6)

S7 Alias Servo(7)
S8 Alias Servo(8)
S9 Alias Servo(9)
S10 Alias Servo(10)
S11 Alias Servo(11)
S12 Alias Servo(12)

Szczeki Alias Servo(13)
S1 = 112                                                    'wyzerowanie serw
S2 = 132
S3 = 111
S4 = 126
S5 = 112
S6 = 130
S7 = 110
S8 = 120
S9 = 130
S10 = 130
S11 = 120
S12 = 110


Szczeki = 150
'______________________ PODPROGRAM CHWYTANIA ____________________________

Chwyt:
Do
Klawisz = Inkey()
Print Szczeki

If Klawisz = "x" Then Szczeki = Szczeki - 5
If Klawisz = "z" Then Szczeki = Szczeki + 5
If Szczeki > 160 Then Szczeki = 160
If Szczeki < 100 Then Szczeki = 100

If Klawisz = "w" Then
S1 = S1 + 5
S3 = S3 + 5
S4 = S4 - 5
S6 = S6 - 5
Elseif Klawisz = "s" Then
S1 = S1 - 5
S3 = S3 - 5
S4 = S4 + 5
S6 = S6 + 5
Elseif Klawisz = "a" Then
S1 = S1 + 5
S2 = S2 + 5
S3 = S3 - 5
S4 = S4 + 5
S5 = S5 + 5
S6 = S6 - 5
Elseif Klawisz = "d" Then
S1 = S1 - 5
S2 = S2 - 5
S3 = S3 + 5
S4 = S4 - 5
S5 = S5 - 5
S6 = S6 + 5
Elseif Klawisz = "c" Then
Gosub Zero
Elseif Klawisz = "j" Then
S7 = S7 - 5
S8 = S8 - 5
S9 = S9 - 5
S10 = S10 - 5
S11 = S11 - 5
S12 = S12 - 5
Elseif Klawisz = "g" Then
S7 = S7 + 5
S8 = S8 + 5
S9 = S9 + 5
S10 = S10 + 5
S11 = S11 + 5
S12 = S12 + 5
Elseif Klawisz = "h" Then
S7 = S7 + 5
S8 = S8 + 5
S9 = S9 + 5
S10 = S10 - 5
S11 = S11 - 5
S12 = S12 - 5
Elseif Klawisz = "y" Then
S7 = S7 - 5
S8 = S8 - 5
S9 = S9 - 5
S10 = S10 + 5
S11 = S11 + 5
S12 = S12 + 5
Elseif Klawisz = "q" Then
Gosub Wybor
End If


Waitms 10
Loop

OK, tłumaczę. To są fragmentu dotyczące tylko ustawień serw i kilka przykładów. Na początku ustawiasz wszystkie piny od serw jako wyjściowe, później jest instrukcja Config Servos (Reload dobierałem doświadczalnie, żeby zakres wychyleń mi odpowiadał wartościami - chyba było między 50 a 150). Później zmieniam sobie te niewygodne nazwy na wygodniejsze, w domu miałem kartkę z ponumerowanymi wszystkimi serwami, więc bardzo mi to upraszczało pracę.

Następnie jest przykład ustawienia serw w danej pozycji. Jak widać jest to banalne, bo po prostu wpisuje się jakąś wartość i serwo się w niej ustawia. W tym przypadku jest to pozycja "zerowa", czyli robot stoi w położeniu początkowym, z którego będą dodawane lub odejmowane wartości, dzięki czemu serwa będą się poruszać.

Na końcu jest podprogram chwytaka, czyli reakcja serw na klawisze, w tym programie są też nachylenia robota, które są konieczne do chwycenia przedmiotu.

Szybkość pracy serw można spowolnić, ale troszkę już to komplikuje program, bo trzeba dodawac opóźnienia czasowe pomiędzy małe wartości wychylenia (czyli jakby pulsacyjnie, przy pracy serwa to się później "zlewa"), jakby cię to zagadnienie interesowało to zapraszam na GG, bo ciężko mi tu będzie zamieszczać większe fragmenty programu i tłumaczyć.

Co do Config Servos - nie jest to instrukcja idealna, pozwala na szybkie i proste wysterowanie serw, jednakże nie mamy nad nią żadnej innej kontroli poza ustawieniami. Nadaje się do Bascomowych projektów, natomiast jeśli będziesz chciał kiedyś napisać obsługę serw w C to i tak to musisz zrobić na Timerach. Póki używasz do 16 serw i piszesz w Bascomie, to będzie ona zadowalająca.

[ Dodano: 28-06-2011, 11:33 ]

Co do kwarcu, nie testowałem na niższych, więc nie mogę Ci obiecać, że będzie działać. Możliwe że tak. Natomiast przy 12-16MHz będzie ci działać na pewno.

[ Dodano: 28-06-2011, 11:40 ]

Const W = 30                                   'stała podniszenia nóg
Const P = 15                                             'stała wychylenia nóg
Const N = 20                                             'stała podnoszenia nóg w nachyleniach
Const Pp = 20                                           'stała wychylenia nóg podnoszeniu/opuszczaniu korpusu
Const Predkosc = 4000                               'stała prędkości robota     
'nachylenia

Nachyl_przod:
Z = 1
For Z = 1 To N
S1 = S1 + 1
S3 = S3 + 1
S4 = S4 - 1
S6 = S6 - 1
Waitus 2 * Predkosc
If Z = N Then Exit For
Next Z
Return

Nachyl_tyl:
Z = 1
For Z = 1 To N
S1 = S1 - 1
S3 = S3 - 1
S4 = S4 + 1
S6 = S6 + 1
Waitus 2 * Predkosc
If Z = N Then Exit For
Next Z
Return

Nachyl_prawo:
Z = 1
For Z = 1 To W
S1 = S1 - 1
S2 = S2 - 1
S3 = S3 + 1
S4 = S4 - 1
S5 = S5 - 1
S6 = S6 + 1
Waitus 2 * Predkosc
If Z = W Then Exit For
Next Z
Return

Nachyl_lewo:
Z = 1
For Z = 1 To W
S1 = S1 + 1
S2 = S2 + 1
S3 = S3 - 1
S4 = S4 + 1
S5 = S5 + 1
S6 = S6 - 1
Waitus 2 * Predkosc
If Z = W Then Exit For
Next Z
Return

To są instrukcje spowalniające pracę serw w moim programie.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

KD93 A gdzie dyrektywa Enable Interrupts odblokowująca timery z których korzysta polecenie config servos, bo nie mogę się jej dopatrzyć? I do zmiennej Servo można maksymalnie wpisać 256 i minimalnie 0 co odpowiada skarajnym wychyleniom serwa?

Link do komentarza
Share on other sites

Zapomniałem o tym Enable Interrupts, tzn w programie mam tylko w innym miejscu i zapomniałem o tym dopisać. Nie, skrajne wychylenia serwa trzeba niestety sprawdzić doświadczalnie, nigdy nie będzie to 0 i 256. Przy skrajnym położeniu serwo zaczyna tykać, łatwo więc znaleźć te wartości. Na początek najlepiej wpisać wartość z przedziału 100-120 i dodawać lub odejmować po 5-10, do momentu w którym serwo zacznie tykać.

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.