Slawus Napisano Maj 4, 2012 Udostępnij Napisano Maj 4, 2012 witam, to mój pierwszy post, więc WITAM 😉 ... i od razu proszę o pomoc. Może ktoś z was wpadnie na pomysł dlaczego ten kod (tylko część PWM) nie działa? (LED działa tak jak powinien). #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define LED_PIN (1<<PD6) #define LED_ON PORTD |= LED_PIN #define LED_OFF PORTD &= ~LED_PIN int main(void) { DDRB |= (1<<1)|(1<<2); DDRD |= LED_PIN; TCCR1A |= (1<<WGM10); TCCR1B |= (1<<WGM12); TCCR1A |= (1<<COM1A1); TCCR1A |= (1<<COM1B1); TCCR1B |= (1<<CS10); TCCR1B |= (1<<CS12); OCR1A = 0; OCR1B = 0; for(;;) { LED_ON; OCR1A = 127; OCR1B = 127; } } uC to atmega8a, dwa silniki pololu, mostek H - l293d. Robot budowany na tej podstawie: https://www.forbot.pl/forum/topics20/dla-poczatkujacych-przepis-na-robota-w-pelni-programowalny-line-follower-vt2356,325.htm Dodam, że z kodem Bascoma silniki działają bez zarzutu! __________ Komentarz dodany przez: Treker Poprawiłem temat. Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 4, 2012 Udostępnij Maj 4, 2012 DDRB |= (1<<1)|(1<<2); Ten zapis jest nieczytelny, powinieneś pisać coś w stylu: DDRB |= (1<<PB1)|(1<<PB2); ^ zależnie od tego co chcesz otrzymać. Brakuje mi tutaj trochę rzeczy. Sprawdź czy na pewno wszystkie odpowiednie porty łączące się z mostkiem masz skonfigurowane jako wyjścia i podajesz na niej odpowiednie sygnał, bo chyba nie 🙂 Pisz sobie komentarze przy każdej linijce konfiguracji, bo później ciężko to analizować. 1 Link do komentarza Share on other sites More sharing options...
Slawus Maj 4, 2012 Autor tematu Udostępnij Maj 4, 2012 Tak jest, nie miałem skonfigurowanych wszystkich potrzebnych portów jako wyjść. Teraz kod wygląda tak: #define F_CPU 1000000L #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define LED_PIN (1<<PD6) #define LED_ON PORTD |= LED_PIN #define LED_OFF PORTD &= ~LED_PIN int main(void) { DDRB |= (1<<PB1)|(1<<PB2); DDRD |= LED_PIN; DDRD |= (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3); TCCR1A |= (1<<WGM10); TCCR1B |= (1<<WGM12); TCCR1A |= (1<<COM1A1); TCCR1A |= (1<<COM1B1); TCCR1B |= (1<<CS10); TCCR1B |= (1<<CS12); OCR1A = 0; OCR1B = 0; PORTD |= (1<<PD1)|(1<<PD3); PORTD &= ~(1<<PD0); PORTD &= ~(1<<PD2); for(;;) { LED_ON; OCR1A = 50; OCR1B = 50; } } Teraz problemem jest resetowanie się procka... dioda mruga, a silniki chodzą skokowo. Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 4, 2012 Udostępnij Maj 4, 2012 Skoro działa to na Bascomie to tutaj też powinno. Dla testu wyzeruj jeden PWM i sprawdź czy wtedy też się wiesza, postaraj się, aby nic nie blokowało silnika. Przed pętlą nieskończoną wrzuć jakiegoś delay-a 2sec, będziesz mógł się zorientować czy to na pewno reset 🙂 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
Slawus Maj 4, 2012 Autor tematu Udostępnij Maj 4, 2012 TCCR1B |= (1<<CS10); TCCR1B |= (1<<CS12); (preskaler - 1024) zmieniłem na TCCR1B |= (1<<CS11); (preskaler - 8) Silniki skakały przez zbyt duży preskaler... Działa 😉 Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 4, 2012 Udostępnij Maj 4, 2012 Slawus, one nie skakały przez "preskaler", tylko przez źle dobraną częstotliwość PWM. Doczytaj sobie jak wygląda sygnał PWM, abyś to zrozumiał 🙂 Link do komentarza Share on other sites More sharing options...
ps19 Maj 4, 2012 Udostępnij Maj 4, 2012 Jak dla mnie PWM najlepiej jest wytłumaczone tutaj: http://aquaticus.info/pwm-frequency po angielsku ale myślę że problemu nie będzie. 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ę »