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.
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
https://obrazki.elektroda.pl/97_1265110663.jpg
Jako źródła informacji korzystałem ze strony
http://mil.ufl.edu/~achamber/servoPWMfaq.html
Oto moja funkcja ustawiająca rejestry timera.
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
https://obrazki.elektroda.pl/97_1265110663.jpg
Jako źródła informacji korzystałem ze strony
http://mil.ufl.edu/~achamber/servoPWMfaq.html