piotreks-89 Czerwiec 16, 2012 Udostępnij Czerwiec 16, 2012 Montaż jest, jakby to powiedzieć, niechlujny (nie wiem czy to wynika z braku narzędzi, czy lenistwa). Prawdopodobnie to jest pierwszy najbardziej rażący błąd w konstrukcji. Według pierwszego schematu (wnioskuję, że jest to schemat tego samego robota) miałeś źle podłączone mostki. Jeśli w drugiej wersji, tak po prostu połączyłeś te kanały (nie przecinając wcześniejszych połączeń), to nie ma się co dziwić, że są problemy... 1 Link do komentarza Share on other sites More sharing options...
ps19 Czerwiec 18, 2012 Autor tematu Udostępnij Czerwiec 18, 2012 Nie wiem dlaczego, ale nadal na wyjściu OC1B nie jest generowane PWM,działa tylko OC1A. TCCR1A |= (1<<WGM10); //Fast PWM 8bit TCCR1B |= (1<<WGM10); //Fast PWM 8bit TCCR1B |= (1<<CS10); //Preskaler 64 TCCR1A |= (1<<COM1A1) | (1<<COM1B1); //Clear down TCCR1B |= (1<<COM1A0) | (1<<COM1B0); //Clear down TCCR1A |= (1<<FOC1A) | (1<<FOC1B); OCR1A = 200; OCR1B = 200; Co do estetyki to gdzieś w połowie wakacji będę wysyłał poprawioną wersję płytki do Satlandu.Wtedy nie będzie już drucików zamiast ścieżek. Jak na razie musi mi wystarczyć ta wersja płytki - brak finansów. Link do komentarza Share on other sites More sharing options...
marek1707 Czerwiec 18, 2012 Udostępnij Czerwiec 18, 2012 Coś pokręciłeś z rejestrami i ich bitami. W TCCR1B nie ma WGM10, nie ma też COM1A0 i COM1B0. To nie jest tak, że TCCR1A odpowiada za kanał OC1A a TCCR1B za kanał OC1B. To nie jest symetryczne. 1 Link do komentarza Share on other sites More sharing options...
ps19 Czerwiec 18, 2012 Autor tematu Udostępnij Czerwiec 18, 2012 Tyle, że właśnie nie wiem co pokręciłem z bitami. To jest wg. noty i też nie działa: int main(void) { DDRB |= _BV(PB0) | _BV(PB1); DDRC |= _BV(PC5) | _BV(PC7); DDRD |= _BV(PD4) | _BV(PD5); TCCR1A |= (1<<WGM10) | (1<<CS10); //Fast PWM 8bit TCCR1B |= (1<<WGM12) | (1<<WGM11) | (1<<CS10); //Fast PWM 8bit TCCR1A |= (1<<COM1A1) | (1<<COM1B1); //Clear down //TCCR1A |= (1<<FOC1A) | (1<<FOC1B); OCR1A = 200; OCR1B = 200; while(1){ } } 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
Treker (Damian Szymański) Czerwiec 18, 2012 Udostępnij Czerwiec 18, 2012 Pisałem dokładnie o tym samym tutaj: https://www.forbot.pl/forum/topics40/c-sterowanie-silnikami-przez-pwm-vt7370.htm#67933 Podałem Ci mój kod, który działa na 100%, wgraj go i sprawdź. Później baw się we własne interpretacje datasheetu 😉 1 Link do komentarza Share on other sites More sharing options...
marek1707 Czerwiec 18, 2012 Udostępnij Czerwiec 18, 2012 No to jak nie wiesz, to się nad tym zatrzymaj zamiast pokazywać w panice jakieś kody "wg. noty". Po co szukasz w notach aplikacyjnych skoro nie rozumiesz znaczenia (tak to wygląda) bitów i ich rozmieszcznienia w rejestrach? Chcesz to zrozumieć czy czekasz na gotowca? Otwórz dane katalogowe tego procesora na rozdziale dot. timera 1. Znajdź rozpisane na bity rejestry TCCR1A oraz 1B (dla ułatwienia: kilka stron dalej) i napisz czego nie rozumiesz. Odpowiedź: "wszystkiego" jest nieakceptowalna. Próby udowodnienia, że przecież wszystko robisz dobrze i pewnie masz zepsuty procesor - także. Byłoby miło, gdybyś swoje konkretne wątpliwości wyraził w formie np. osobnych punktów. EDIT: Przepraszam, pisaliśmy razem na ten sam temat. 1 Link do komentarza Share on other sites More sharing options...
ps19 Czerwiec 18, 2012 Autor tematu Udostępnij Czerwiec 18, 2012 Już działa - wystarczyło dodać zmianę stanu na wybrany pinie. Kopia zapasowa: int main(void) { //DDRB |= _BV(PB0) | _BV(PB1); //DDRC |= _BV(PC5) | _BV(PC7); DDRD |= _BV(PD4) | _BV(PD5); TCCR1A |= (1<<WGM10); //Fast PWM 8bit TCCR1B |= (1<<WGM12); //Fast PWM 8bit TCCR1B |= (1<<CS10) | (1<<CS11); //Preskaler 64 TCCR1A |= (1<<COM1A1) | (1<<COM1B1); //Clear down OCR1A = 200; OCR1B = 200; while(1){ LEWY_PRZOD; PRAWY_PRZOD; } } Link do komentarza Share on other sites More sharing options...
marek1707 Czerwiec 18, 2012 Udostępnij Czerwiec 18, 2012 Poprawiłeś ustawianie odpowiednich bitów to i zaczęło działać. Linia portu musi być wyjściem - a była, przynajmniej wg pokazanego kodu. Pull-up? 🤯 O co chodzi? Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 18, 2012 Udostępnij Czerwiec 18, 2012 ps19, przecież to co podałeś jako sprawną wersje do dokładnie mój kod jaki umieściłem już na samym początku dyskusji. Podmieniłeś go teraz, a nawet nie wiesz co zmieniłeś... Jakie pull-up'y, na wyjściach? 1 Link do komentarza Share on other sites More sharing options...
ps19 Czerwiec 18, 2012 Autor tematu Udostępnij Czerwiec 18, 2012 Treker, Twój kod, ale i tak muszę zmienić preskaler i tryb bo silnik wydaje odgłosy jak stary traktor, także jak skończę pisać wstępne sterowanie to wtedy usunę powtórkę kodu. marek1707, Chodzilo mi o zmianę stanu nie wiem dlaczego napisałem pull-up 😋 Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 18, 2012 Udostępnij Czerwiec 18, 2012 o zmianę stanu To również tutaj nie pasuję... Nie rozumiem o co Ci chodzi, przecież po prostu miałeś złe wartość wpisane w rejestry, nie ma to związku z żadnymi I/O. Link do komentarza Share on other sites More sharing options...
ps19 Czerwiec 18, 2012 Autor tematu Udostępnij Czerwiec 18, 2012 Możliwe.Nie będę się sprzeczał bo nie pamiętam wszystkiego co wyprawiałem z tym PWM`em i moja wiedza jest jeszcze trochę skromna. Link do komentarza Share on other sites More sharing options...
hawat Czerwiec 22, 2012 Udostępnij Czerwiec 22, 2012 Może zasntanowisz się nad zastosowaniem bibliotek ASF, Przykładowo uzyskanie PWM: struct pwm_config pwm_cfg; pwm_init(&pwm_cfg, PWM_TCE0, PWM_CH_A, 500); // czestotliwosc 500hz pwm_start(&pwm_cfg, 50); // wypelnienie 50% Na początek, czy li tylko dla proof of concept - bardzo dobrze się sprawdza (imho!) Link do komentarza Share on other sites More sharing options...
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ę »