gustawm2 napisał:
Zabrałem się za kolejną rzecz i utknąłem na timerach i książce do bascoma.
Generalnie to mam problem z PWM - potrzebuję wygenerować impulsy o zadanej długości w taktowaniu pomiędzy x Hz
Zakładając, że poterzbuję wygenerować impuls o długości od 1000us do 2000us z częstotliwością dowolną pomiędzy 50Hz a 400Hz to... tak sobie policzyłem
Przyjąłem częstotliwość 245Hz
1000000/8/510 =~ 245Hz
Dalej:
1sek = 1000000us
1000000us/245Hz =~ 4018us na okres, w którym będziemy wypełniać PWM
Jeżeli okres wynosi 4018us, do wygenerowania są impulsy o długości od 1000us do 2000us:
DC1 = (1000us/4018us)* 100% = 24,88%
DC2 = (2000us/4018us)* 100% = 49,77%
zakładając, że nasz rejestr pwm jest 8 bitowy to 25% z 256 = 64 , a 50% = 128
więc powinienem tak sterować układem, aby zapisując do rejestru pwm1a poruszać się pomiędzy tymi wartościami.
Proszę o sprostowanie jeżeli coś pominąłem lub coś pokiełbasiłem

Nie najlepiej to kombinujesz.
Jeżeli pracujesz nad Att2313 to temat Timera1i jego trybów pracy a w szczególności PWM najłatwiej poznasz studiując Datasheet rozdział:
16-bit Timer/Counter1>Modes of Operation
Po zapopznaniu się (z grubsza) z treścią wszystkich trybów pracy timera, zatrzymaj się na dłużej na tabeli 46 str. 110, w której znajdziesz wszystkie możliwe tryby (Mode) pracy timera1 (od 0 do 15).
Zauważ, że za każdy tryb pracy odpowiedzialne są ustawienia tylko czterech bitów (wymienione w kolejnych czterech kolummach)_WGM1 3:0 - niefortunnie są one rozrzucone w różnych rejestrach Timera1- do tego dojdziesz później jezeli jeszcze nie połapałeś.
Popatrz na kolumnę z nagłówkiem "TOP"; jeżeli w tej kolumnie występuje konkretna wartośc (w HEX-notation), - to ten tryb pracy ma już określoną częstotliwośc pracy i wpisy do rejestru pwm1a mogą kontrolowac tylko wypełnienie.
Jeżeli zakładasz 8-bit PWM to jak doszedłeś do ustalenia częstotliwości pracy 245Hz ?
Popatrz na tabelę poniżęj;
Owszem, możesz użyc pwm1a do kontrolo częstotliwości w innych trybach ale wtedy nie masz kontroli nad regulacją wpełnienia, które pozostanie na poziomie 50%.
Nie znaczy to że nie ma możlowości kontroli obydwóch parametrów; oczywiście jest taka możliwośc ale to wymaga nieco innego rozważenia niż przjąłeś w swoich obliczeniach powyżej.
Timer1 ma dwa kanały PWM; A i B na których możesz generowac dwa rózne sygnały PWM o tejsamej częstotliwosci określonej przez prescaler a wypełnienie kontrolwane przez pwm1a oraz pwm1b dla odpowiednich kanałów.
Aby kontrolowac oba parametry musisz zrezygnowac z jednego kanału PWM wtedy masz możliwośc jedną wartością np: pwm1a kontrololwac częstotliwośc a pwm1b kontrollwałby wypełnienie dla jednego tylko sygnału PWM.
Zatem najpierw musisz zacząc od wybrania trybu pracy timera i pod ten tryb prowadzic dalsze obliczenia dla przyjętej częstotliwości.
e marcus