majkel00230 napisał(a):
Krauser dziękujda bardzo za odpowiedź właśnie jako pierwszy napisałeś jakiś konkret bo nigdzie nie wyczytałem że gdy używa się Timer 3 to trzeba wtedy korzystać z PB3.
Kolega ale do takich podstawowych rzeczy, nie potrzebujesz nawet Bluebooka tak jak MirkoT napisał. Nawet Pan Mirek nie byłby w stanie opisać wszystkich rejestrów z wszystkich mikrokontrolerów w książce, bo była by to istna encyklopedia.
To, że ktoś Ci nie napisał konkretnie np. OC2/TCNT2 - Timer2 - TCCR2 - PB3, nie znaczy, że nie chce Ci pomóc. Bo przejdziesz zaraz na Timer1, który obsługuje dwa piny PB1 i PB2 w zależności od tego jak skonfigurujesz rejestry właśnie. My chcemy Cię tu naprowadzić na dobry tor, abyś swobodnie bez przeszkód sam takie rzeczy robił. Bo niestety widzę, że robisz to mocno na czuja, a nie o to chodzi. To się skończy tak, że dojdziesz do momentu, że będziesz miał za dużo rejestrów do skonfigurowania i rzucisz to w cholerę bo powiesz, że to bez sensu. Wiem to z własnego doświadczenia, bo też tak kiedyś "programowałem" (akurat nie AVR, tylko normalnie na PC) i rzucałem to w kąt. Tym razem już mam dość długą passe, bo zacząłem się właśnie uczyć, a nie omijać problem

Tyle wyjaśnienia, co byś nie myślał, że my nie chcemy pomagać.
A teraz do rzeczy. Jak sobie poradzić z tym "strasznym" PWM-em? A no, najpierw dobieramy sobie timer, który jest jaki? Na to nota katalogowa i konkretnie wystarczy spojrzeć w spis jej treści:

Więc w Twoim wypadku wybór padł na Timer2 - 8 bitowy, z tego powodu, że Timer0 nie posiada trybu PWM, ale skąd my to wiemy? Ano zajrzyjmy do opisu Timera:

No cóż ani słowa o PWM. Więc wracamy do naszego Timera2, czy nie znając angielskiego będę wiedział, że taki tryb posiada? Sprawdźmy:

No i widać na pierwszy rzut oka, że ten Timer posiada tryb PWM, co do róźnych trybów, to jak kolega będzie chciał się bardziej zagłębić to już niestety ale odeślę do Bluebooka, choć i bez tego kolega da rade. Ale wiadomo w książce konkretnie i po polsku będzie miał kolega, do tego napisana przez praktyka, a nie teoretyka.
Ale jedziemy dalej jak to z tym Timerem i jego konfiguracją? Szukamy opis rejestru w spisie treści:

Klikamy i ukazuje się nam już strona, na której szczególną uwagę zwracamy na:

Tak więc już kolega ma po pierwsze: rejestr TCCR2 (więc na pewno nie konfigurujemy TCCR0, TCCR1A i TCCR1B ). Po drugie wszystkie bity które się w nim znajdują np WGM2x czy CS2x.
Tu już ładnie można zauważyć, że makrodefinicje te są ładnie ułożone pod użytkownika, aby nie mylił rejestrów. Zauważ, że wszystkie zaczynają się od "2" bo dotyczą tego właśnie Timera.
Ale teraz które to ja mam bity poustawiać? Więc lecimy dalej z tematem:

Pierwsza tabelka i pierwsza konfiguracja

Tak więc ja chce np. tryb Fast PWM więc już wiem, że w programie muszę mieć taką linijkę kodu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Przy trybach fast PWM musimy jeszcze skonfigurować czy pin ma się ustawiać na stan wysoki podczas porówania z licznikiem, czy skasować. Do tego służy jedna z kilku tabelek (która to trzeba patrzyć na opis swojego trybu):

Ja wybieram przykładowo, że przy porównaniu licznika ma się "skasować" i ustawić na stan wysoki po przepełnieniu licznika. A więc mamy kolejny kawałek kodu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Przyszła pora na preskaler - dzielnik częstotliwości:

Ja przykładowo potrzebuję najmniejszy dzielnik - 1, więc mam kolejny kawałem kodu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Teraz został rejestr porównania:

Który jak widać ma nazwę OCR2, tak więc przypisując do niego wartość od 0 - 255 (do 255 bo 8 bitowy) uzyskujesz wypełnienie. Przykładzik :
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ostatnia ważna rzecz to znajdujemy który pin należy do Timera2. Pewnie straszna tajemna wiedza;)
Więc spójrzmy więc na .... 2 stronę datasheet'u:

Kolega no i szukamy tajemnego OC2, jest tak jak już wiesz od kolegi Krauser na pinie PB3.
Ale warto jeszcze wspomnieć, że musisz ten pin mieć skonfigurowany jako wyjście:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Inaczej nici z PWM'a.
Tak więc kolega zobacz, wszystko z ogólnodostępnej noty katalogowej producenta do której zapewne nie chciało Ci się zajrzeć. A to jest podstawa, bo każdy jeden scalak, każdy jeden tranzystor nawet ma swoją notę katalogową, a w niej opisane swoje parametry.
Więc powtarzam, my tutaj pomagamy, a nie dajemy rozwiązania, bo chcemy abyś to zrozumiał. I jak będziesz miał kolegę który będzie miał problemy to mu powiesz bez zająknięcia:
Idź na fourm.atnel.pl tam Ci pomogą!
I to będzie już dla nas nagroda, że ktoś nas poleca, a nie inne forum.
z Niebieskim pozdRowieniem,
Doman89