frozzins Napisano Luty 18, 2014 Udostępnij Napisano Luty 18, 2014 Witam, Taki dziwny problem napotkaliśmy. Nasz procek to ATMega 128A. Używamy trybu Fast PWM do sterowania dwóch silników. Nasz problem jest taki, że pozornie identyczne pary rejestrów: TCCR1A oraz TCCR3A, a także TCCR1B oraz TCCR3B nie działają identycznie. Otóz rejestry TCCR1A i TCCR1B pieknie sterują silnikiema te same ustawienia na TCCR3 niestety nie... Używamy sterownika silników L293D. Oto jak wygląda nasz kod: /* * motor controller inputs connected to ATmega 128A outputs: PB5(OC1A) I PB6(0C1B) */ #define F_CPU 16000000 #include <avr/io.h> #include <util/delay.h> int main(void) { DDRE = 0b11111111; DDRD = 0b11111111; DDRB = 0b11111111; //COM1A1 COM1A0 COM1B1 COM1B0 COM1C1 COM1C0 WGM11 WGM10 TCCR1A //ICNC1 ICES1 – WGM13 WGM12 CS12 CS11 CS10 TCCR1B TCCR1A = 0b10101001; //Clear OCnA/OCnB/OCnC on compare match, set OCnA/OCnB/OCnC at BOTTOM, (non-inverting mode), fAST pwm 8-bit TCCR1B = 0b00000010; //8 PRESCALER TCCR3A = 0b00100000; //Clear OCnA/OCnB/OCnC on compare match, set OCnA/OCnB/OCnC at BOTTOM, (non-inverting mode), fAST pwm 8-bit TCCR3B = 0b00000010; //8 PRESCALER while(1) { OCR1A = 240; OCR1B = 0; OCR3A = 240; // to nie dziala OCR3C = 0; // to nie dziala _delay_ms(4000); OCR1A = 100; OCR1B = 0; _delay_ms(4000); OCR1A = 0; OCR1B = 240; _delay_ms(4000); PORTD |= (1<<PORTD0); // drive PD1 high } } Link do komentarza Share on other sites More sharing options...
marek1707 Luty 19, 2014 Udostępnij Luty 19, 2014 Nie rozumiem tego, czy Wy tylko piszecie programy, czy czasem je również czytacie? Jak możesz wysyłać na Forum kod którego nawet nie widziałeś (bo chyba nie robisz sobie żartów, prawda?). Piszesz, że "..pozornie identyczne pary rejestrów: bla bla bla nie działają identycznie". Działają tak, gdy wpisze się do nich te same wartości. Kiedyś była taka zabawa dla dzieci pt. "Znajdź różnice na obrazkach". To co, spróbujesz swych sił czy mam Ci pokazać palcem: TCCR1A = 0b10101001; TCCR1B = 0b00000010; TCCR3A = 0b00100000; TCCR3B = 0b00000010; 2 Link do komentarza Share on other sites More sharing options...
frozzins Luty 19, 2014 Autor tematu Udostępnij Luty 19, 2014 Przepraszam. Wkleiłem kod, który juz próbowałem zmieniać. Oryginalnie rejestry TCCR1A i TCCR1B są identyczne dla obu timerów. Na razie zastępczo używam innych timerów ale ten (Timer03) tez będzie potrzebny 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ę »