sidek92 Napisano Czerwiec 15, 2017 Udostępnij Napisano Czerwiec 15, 2017 Witam, staram się ruszyć dwoma kołami. Niestety gdzieś popełniam błąd i koła te się nie ruszają. W atmel studio zrobiłem symulacje i okazuje się, że podczas użycia funkcji PWM (kod poniżej) uaktywnia się się rejesr PIND, który moim zdaniem nie powinien zostać ustawiony. Czy ktoś widzi gdzie popełniam błąd? Mikrokontroler to atmega328p #include <avr/io.h> #include <util/delay.h> #define F_CPU 1000000UL #define MOTOR_LEWY_PRZOD PORTD |= (1<<PD7) #define MOTOR_PRAWY_PRZOD PORTD |= (1<<PD2) #define MOTOR_LEWY_PWM OCR1A #define MOTOR_PRAWY_PWM OCR1B void PWM(int LEWY, int PRAWY) { if(LEWY>=0) { if (LEWY>255) LEWY=255; MOTOR_LEWY_PRZOD; } if (PRAWY>=0) { if (PRAWY>255) PRAWY=255; MOTOR_PRAWY_PRZOD; } MOTOR_LEWY_PWM = LEWY; MOTOR_PRAWY_PWM = PRAWY; } int main(void) { TCCR1A |= (1<<COM1A1) | (1<<COM1B1) | (1<<WGM10); TCCR1B |= (1<<WGM12) | (1<<CS10); DDRB |= (1<<0) | (1<<1) | (1<<2); //USTAWIENIE PB0/1/2 JAKO WYJSCIA DDRD |= (1<<2) | (1<<3) | (1<<7); //USTAWIENIE PD2/3/7 JAKO WYJSCIA int i; for(i=0; i<10; i++) { PWM(30,5); _delay_us(1000); PWM(5,30); _delay_us(1000); PWM(0,0); } } Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Czerwiec 15, 2017 Udostępnij Czerwiec 15, 2017 Nie wniknąłem w ustawienia timera itd, ale czy możesz pokazać (np. przez megaszybkie mrugnięcie powieką) ile to jest 1000us? Bo nawet jeśli Twój program coś robi, to wykonanie całej pętli zajmie mu 20ms czyli 1/50s. A po jej zakończeniu oba PWM są wyzerowane i silniki stoją. Nie napracowały się, prawda? I co to znaczy "uaktywnia się się rejestr PIND"? Cytuj Link do komentarza Share on other sites More sharing options...
sidek92 Czerwiec 15, 2017 Autor tematu Udostępnij Czerwiec 15, 2017 Zmieniłem opóźnienie na 2s _delay_us(2000000); i dalej nic. Jeśli chodzi o PIND to po wykonaniu funkcji PWM jeden raz uaktywaniają się bity 3 oraz 7. Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Czerwiec 15, 2017 Udostępnij Czerwiec 15, 2017 A wiesz co w tym rejestrze jest? Przecież jeśli coś wystawiasz na piny (PORTx), to w odpowiednim PINx widzisz nie tylko wejścia, ale i wystawione właśnie wyjścia, nieprawdaż? A programy pisz wolniej i uruchamiaj po kolei. Nie działa cały kod? To napisz prostszy. Bez żadnych timerów, PWMów itp. gadżetów wystaw na odpowiednie piny stany 1 i 0 i sprawdź czy jeden silnik się obraca i czy umiesz go zatrzymać. Potem czy drugi robi to samo przy statycznym sterowaniu jego pinami. Nie? To szukasz miernikiem/woltomierzem przerw lub zwarć. Potem zamieniasz sterowanie wyjściem z trywialnego, programowego 0-1 na sprzętowy PWM przez włączenie timera. Jeśli nie działa to szukasz w timerze, bo już wiesz, że hardware jest OK - zawsze bazuj kolejne testy na już sprawdzonych elementach. A jak już PWM działa i możesz zmieniać prędkości i kierunki, zaczynasz z tego korzystać pisząc coraz bardziej skomplikowane algorytmy i funkcje. Jeśli teraz, w tak prostym kodzie (a może w sprzęcie?) nie umiesz znaleźć błędu, to co da pokazanie tego miejsca? Za chwilę przyjedziesz z następnym. Masz robota na biurku, masz multimetr, masz kompilator. Teraz wystarczy już tylko odrobina cierpliwości i pomysłowości. Pamiętaj: zaczynaj od zera i małe kroczki - to działa. Zrobiłeś za duży i wpadłeś w błoto. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
sidek92 Czerwiec 22, 2017 Autor tematu Udostępnij Czerwiec 22, 2017 Dzięki Marek za podpowiedź, okazało się, że kondensatory pomiędzy mostkiem, a silnikami się "popsuły". Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!