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. Cytuj 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 Cytuj 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. Cytuj 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 🙂 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
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 😉 Cytuj 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ł 🙂 Cytuj 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. 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!