cris Napisano Marzec 19, 2011 Udostępnij Napisano Marzec 19, 2011 Witam. Wiem ,że było już wiele tematów tego typu ,ale w żadnym nie znalazłem odp na moje pytanie. Oto program : #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main( void ) { _delay_ms(1000); DDRB = 0xFF; TCCR1A |=(1<<COM1A1); TCCR1A |=|(1<<WGM11); // pwm korekcja fazy 9-bit TCCR1B |=(1<<WGM12)|(1<<WGM13)|(1<<CS11); // tryb CTC ,TOP=ICR1,preskaler 8 ICR1 = 2500; sei(); while(1){ OCR1A=80; _delay_ms(700); OCR1A=240; }} Teraz moje pytanie .Musze ciągle ustawiać serwo raz w pozycji niemalże skrajnej lewej ,raz w prawej. Gdy w programie nie występuje while(1) ,wszystko jest ok ,jeśli jednak go dodaje serwo obraca się tylko w lewo potem stoi W czym tkwi problem ??Z góry dzięki za pomoc __________ Komentarz dodany przez: Treker
fish Marzec 19, 2011 Udostępnij Marzec 19, 2011 Daj jeszcze jeden delay po OCR1A - 240. Bez tego nie zauważysz zmiany wypełnienia z 80 na 240, bo program automatycznie przeskoczy do pierwszej instrukcji.
cris Marzec 19, 2011 Autor tematu Udostępnij Marzec 19, 2011 dzięki , duże przeoczenie z mojej strony .... Mam jeszcze takie pytanie ,serwo ma straszne drgania można je jakoś usunąć ,czy tak po prostu ma być ??
nes86 Marzec 19, 2011 Udostępnij Marzec 19, 2011 dzięki , duże przeoczenie z mojej strony ....Mam jeszcze takie pytanie ,serwo ma straszne drgania można je jakoś usunąć ,czy tak po prostu ma być ?? Może ma drgania bo przekroczyłeś zakres ruchu serwa. Zmniejsz wychylenie serwa i sprawdź czy dalej drga.
cris Marzec 22, 2011 Autor tematu Udostępnij Marzec 22, 2011 Witam kolejny raz. Nie chciałem zakładać nowego tematu więc tu zamieszczę kolejne pytanie.Program pisany na atmega 8. Działają mi tylko pwmy 9 bitowe , nie działają 8 i 10 bitowe. Sprawdzałem dla fast pwm i phase corect .Program ten sam co w pierwszym poście ,zmieniam oczywiście tryb pwm na 8 lub 10 bitowy . Serwo jednak ani drgnie ? Czy ktoś mógłby mi powiedzieć w czym tkwi problem ?? Szukałem w nocie katalogowej ,ale jakoś nie znalazłem rozwiązania. Dzięki
Bobby Marzec 22, 2011 Udostępnij Marzec 22, 2011 A wartości rejestrów odpowiedzialnych za wypełnienie zmieniasz?
cris Marzec 22, 2011 Autor tematu Udostępnij Marzec 22, 2011 A wartości rejestrów odpowiedzialnych za wypełnienie zmieniasz? Tak,zmieniam. Dawałem max,min pośrednie nic się nie dzieje edit : załączam program do fast pwm 8 bit ,atmega 8 #include #include #include int main( void ) { DDRB=0xFF; _delay_ms(2000); TCCR1A|=(1< TCCR1B|=(1< ICR1=2500; sei(); while(1){ OCR1A=40; _delay_ms(650); OCR1A=220; _delay_ms(220); } } Tak ,jak wspomniałem w poprzednim poście działa mi tylko 9 bitowy pwm.Powyżej mój program dal 8 -bitowego.Może problem leży w kodzie ??
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ę »