dan1987r Poziom 8

Joined: 27 Oct 2009 Posts: 29
|
#1
09 Feb 2010 19:41 Atmega8 - Timer1 w trybie PWM phase, freq correct |
|
|
|
Podczas programowania układu natrafiłem na problem dotyczący sterowaniem PWM przy pomowy wewnętrznego timera. Port wyjściowy timera steruje kluczem tranzystorowym do którego podłączony jest wentylator 12V.
Oto moja funkcja ustawiająca rejestry timera.
| Code: |
void pwm()
{
//OC1A as output
DDRB |= _BV(PB1);
//PWM Phase, frequency correct mode
TCCR1A |= 0b00000000;
TCCR1B |= 0b00010000;
//frequency 50Hz, prescaler 1, top = 400
//prescaler clk/1 - no prescaler
TCCR1B |= 0b00000001;
//top = 400
ICR1 = 400;
//max speed
OCR1A = 400;
}
|
Na początku ustawiam port PB1 jako wyjście dla timera. Następnie ustawiam tryb pracy - PWM Phase, frequency correct mode wg tabeli ze strony :
http://www.mil.ufl.edu/imdl/handouts/AVR_PWM_Reg_Info_Summary.pdf.
Poźniej częstotliwość 50Hz (prescaler 1, top = 400, clk procesora 4MHz). Na końcu OCR1A = 400; jako "impuls ciągy". Przy takich ustawieniach wentylator nie działa.
Pytanie oczywiste - czy ktoś miał doczynienia z PWM na atmedze i wie gdzie popełniłem błąd.
Na wszelki wypadek schemat układu
http://obrazki.elektroda.net/97_1265110663.jpg
Jako źródła informacji korzystałem ze strony
http://mil.ufl.edu/~achamber/servoPWMfaq.html
|
|
technics6 Poziom 22

Joined: 19 May 2007 Posts: 2274 Location: Białystok
|
#2
09 Feb 2010 20:48 Re: Atmega8 PWM Timer 1. |
|
|
|
Z tego co widzę - radzisz sobie z angielskim, więc najlepiej poczytaj dokumentację od mikrokontrolera. PWM jest tam fajnie opisany.
Dodano po 1 [minuty]:
Druga sprawa - wklej cały kod, z tego co wkleiłeś - nie widać w jaki sposób uruchamiasz tą funkcję pwm();
Dodano po 4 [minuty]:
I tak na pierwszy rzut oka nie widzę, żebyś "zapalał" w rejestrze TCCR1A bity
COM1A1, COM1A0: Compare Output Mode for channel A
które są odpowiedzialne za zachowanie się wyjścia ("połączenie timera" z pinem wyjściowym PORTB1/OC1A). Jeżeli nic tam nie ustawisz, to pin wyjściowy zachowuje się jak zwykłe we/wy i nie jest skojarzony z timerem. W dokumentacji mikrokontrolera jest tabela (tab. 38, strona 98 ), wg. której powinieneś ustawić te bity.
|
|