Skocz do zawartości

Problem z poruszaniem serwomechanizmu. Brak ruchu. (Atmega 328P-PU)


dejmieno

Pomocna odpowiedź

Witam,

Mam problem z poruszaniem serwomechanizmu. Posiadam arduino uno z kontrolerem Atmega 328P-PU. Kod jest pisany w czystym C.

Dopiero zaczynam poznawać temat programowania w czystym C na AVR, więc proszę o pomoc co jest nie tak z moim kodem bo być może czegoś nie rozumiem.

#include <avr\io.h>

int main(void) {
   DDRB |= (1 << PB1);
   ICR1 = 20000;

   TCCR1A |= (1 << COM1A1)|(1 << COM1B1);

   TCCR1A |= (1 << WGM11);
   TCCR1B |= (1 << WGM12)|(1 << WGM13);

   OCR1A = 200;
   return 0;
}


Wejście sygnału serwo mam podpięty do pinu 9 arduino, według schematu mapowania to jest wyjście PWM OC1A. Problem w tym że wysyłam do rejestru OCR1A dowolny sygnał a serwo nawet nie drgnie.

EDIT: Zapomniałem dodać że serwo to model: https://botland.com.pl/serwa-tower-pro/484-serwo-towerpro-sg-90-micro.html?search_query=serwomechanizm+micro&results=68

Link do komentarza
Share on other sites

Zacznij od przyjrzenia się taktowaniu timera. Z liczb które używasz wynika, że założyłeś sobie zegar 1MHz. Procesor ma 8 lub 16MHz więc musisz ustawić prescaler (bity CS2-0 w TCCR1B). masz tam do wyboru tylko 1/8 ( z tych tutaj użytecznych) więc jeśli procek pracuje na 16MHz to będziesz musiał wszystkie liczby przemnożyć przez dwa bo kwantem czasu będzie 0.5us. No ale wystartowanie timera przez ustawienie prescalera jest kluczowe.

Po co tak kombinujesz:

TCCR1A |= (1 << COM1A1)|(1 << COM1B1);

TCCR1A |= (1 << WGM11);

przecież ta funkcja ma wpisać konkretne wartości do tego rejestru i nie musi "oszczędzać" tego co było tam wcześniej więc operatory |= nie są potrzebne. Wystarczy:

TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11);

albo trochę bardziej czytelne makro z biblioteki standardowej:

TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM11);

Link do komentarza
Share on other sites

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...

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.