Skocz do zawartości

Nie działa sterowanie serwa za pomocą ATTiny 2313


Pomocna odpowiedź

Napisano

Witam,
Mam problem taki jak w temacie. Chciałem sterowac normalnym serwem modelarskim tak aby po naciśnieciu przycisku wychylało sie w jedną strone czekało określoną ilośc czasu i znów zmieniało swoje wychylenie, całośc powtarzała by sie kilka razy. Napisałem program:

$regfile = "attiny2313.dat"
$crystal = 8000000

Config Pinb.7 = Input

Config Pinb.4 = Output
Config Servos = 1 , Servo1 = Portb.4 , Reload = 1

Enable Interrupts

Set Portb.7

Do

If Pinb.7 = 0 Then
Gosub Program
End If
Loop

Program:
Servo(1) = 15
wait 1
servo(1) = 23
wait 1
servo(1) = 36
wait 1 

End

Jednak serwo wychyla sie tylko do pierwszego położenia i tak już pozostaje. Wartości reload jak i zmiennej dobierałem doświadczalnie w zależności od zastosowanego serwa (tak zalecano w artykule ep i na kilku forach). Układ nie ma zewnetrznego rezonatora.

A czy jest jakaś metoda na to bo cały dzień już straciłem na takie kombinowanie. Czy jeżeli wbuduje do płytki rezonator kwarcowy 8MHz to musze to jakoś uwzglednic (input/output)?

Musisz przestawić fusbity oraz w programie zmienić $crystal na wartość rezonatora podaną w Hz (w przypadku rezonatora 8Mhz, ta wartość będzie wynosiła 8000000). Nie zapomnij o kondensatorach 22p przy montowaniu zewnętrznego rezonatora.

A czy jest jakaś metoda na to bo cały dzień już straciłem na takie kombinowanie. Czy jeżeli wbuduje do płytki rezonator kwarcowy 8MHz to musze to jakoś uwzglednic (input/output)?

Na serwo musisz podać sygnał o określonym wypełnieniu. Najlepiej użyć do tego sprzętowego PWM (jeżeli ATTiny to posiada, bo nie wiem). A do generowania PWM używasz timera, więc musisz go odpowiednio ustawić. Szczerze mówiąc to nie musisz wbudowywać żadnego rezonatora. W zupełności wystarczy wewnętrzny. Dobierz tylko odpowiednie wartości do generowania PWM.

Fusebity miałem 0100. To wykonywac to za pomocą timera i pwm czy tą standardową procedurą Config Servo

Eh sorry. Ja piszę w C i tam nie ma gotowych bibliotek.

Jak masz gotowe procedury to ich oczywiście używaj

Mam jeszcze jedno pytanie, a nie chciałem zakładac nowego tematu, mianowicie jeżeli wstawie zewnetrzny rezonator pod wyjścia xtal to czy musze to jakoś uwzgedniac w programie poza szybkością taktowania? Chodzi mi o to czy jest jakaś komenda, aby poinformowac mikrokontroler, że ma korzystac z zewnetrznego timera? Przeszukałem specyfikacje procesora programy innych robotów i internet i nie znalazłem odpowiedzi dlatego pytam Was.

Po pierwsze to musisz zmienić fusebity, aby uC zaczął pracować na zewnętrznym rezonatorze. Po drugie trzeba zadeklarować w programie częstotliwość rezonatora (w Bascomie jest to polecenie $crystal = xxx, gdzie xxx to częstotliwość taktowanie uC podana w Hz).

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ę »
×
×
  • Utwórz nowe...