Witam,od pewnego czasu bawię się attiny2313, proste programy już przerabiałem
Nadszedł teraz czas na coś poważniejszego chciałbym napisać program pod prostą lampkę RGB
I właśnie przy tym mam mały problem,
nie wiem jak ustawić napięcia na pinach ,jak go zmieniać
P.S Jaką książkę polecacie do nauki takich rzeczy ,podstawy już znam
chcę się dowiedzieć np. o zliczaniu impulsów w danym czasie
(np odbiornik i nadajnik iR) generowaniu dźwięku ,
i innych bardziej skomplikowanych(ale bez przesady) procedurach Moją prośbę potraktujcie na poważnie (jak wołanie o pomoc )
Z góry dzięki za wszystkie ewentualne odpowiedzi
sygnały pwm są generowane na pb.1 i pb.2 i są to odpowiednio PWM1a i PWM1b.
Ogólnie pwm'a konfigurujemy tak:
Kod:
Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down
pwm 8 bitowy- czyli wartości od 0 od 255
następnie po wszystkich konfigach startujesz pwm'a
Kod:
Start Timer1
wartości ustawiasz odpowiednio:
Kod:
Pwm1a = [wartosc]
i
Kod:
Pwm1b = [wartosc]
i mam kilka pytań
Co to jest Prescale ?
Czy rzeczywiście pwm w atmega8 może być tylko używany na pinb1 i pinb2.
Czy przez zwiększenie liczby timerów inne piny też mogą obsługiwać PWM ?
Jak sprawa się ma do attiny2313? bo nigdzie nie mogę tego znaleźć.
Timery w mikrokontrolerach AVR nie muszą być taktowane zegarem systemowym - często jest on za szybki dla potrzeb projektanta. Inżynierowie z Atmela rozwiązali ten problem, umieszczając dodatkowy (nieco ukryty) licznik zwany prescalerem. Z tego licznika otrzymujemy kilka nowych sygnałów zegarowych, z których skorzystać mogą timery. W przypadku TINY2313, licznik ten może dostarczyć nam zegar systemowy dzielony przez 8, 64, 256 i 1024.
Na przykład, jeśli procesor pracuje z rezonatorem kwarcowym 8 MHz, a my potrzebujemy zliczać w timerze impulsy co mikrosekundę (np. by powiedzieć ile czasu trwało jakieś zdarzenie), wówczas dostarczamy do timera sygnał z prescalera, który jest podzielony przez osiem - ma zatem f = 1 MHz (zatem T = 1 us).
Warto pamiętać, że do timerów można też dostarczać sygnał z zewnątrz.
(stosowny rysunek "Figure 39" na stronie 85 dokumentacji ATTINY2313)
Quote:
Czy żeczywiście pwm w atmega8 może być tylko używany na pinb1 i pinb2.
Dokumentacja mówi, że oba timery w ATTINY2313 są w stanie pracować w trybie PWM. Ponadto oba posiadają dwa kanały. Mamy zatem 4 wyjścia, które są w stanie generować stosowne przebiegi. Wszystkie z tych wyjść oznaczone są jako OCxy (dosłownie OC0A, OC0B, OC1A, OC1B). Aby dowiedzieć się które to wyprowadzenia procesora, należy spojrzeć na rysunek "Figure 1" na stronie 2.
Nie można nie wspomnieć o tym, że modulację PWM można przeprowadzić za pomocą samego programu na dowolnym wyjściu. Podejście takie nakłada jednak wiele dodatkowych warunków i ograniczeń - i z pewnością nie jest zalecane.
Quote:
Czy przez zwiększenie liczby timerów inne piny też mogą obsługiwać PWM ?
Zapewne tak, ale nie możemy zmienić liczby timerów w procesorze Generalnie zawsze należy sprawdzić w dokumentacji wybranego mikrokontrolera.
Quote:
Poczytałem trochą o PWM lecz nie zrozumiałem za wiele
Modulacja PWM, na pierwszy rzut oka nie wydaje się rozwiązaniem prolemu "wyjścia analogowego", prawda? Otrzymujemy w końcu sygnał całkowicie cyfrowy tylko o zmieniającym się czasie trwania jedynki lub zera logicznego (za to o stałej częstotliwości).
Gdy przefiltrujemy sygnał z wyjścia PWM mikrokontrolera w prostym filtrze (np. składającym się z rezystora i kondensatora, którego stała czasowa będzie znacząco większa niż okres generowanego przebiegu) otrzymamy na jego wyjściu napięcie proporcjonalne do wartości wpisanej do modulatora PWM.
Przy wykorzystaniu trybu osmiobitowego PWM, napięcie wyjściowe można opisać następująco:
U_wy ≈ U_zas * wartosc / 256
Niestety napięcie wyjściowe z takiego układu zwykle nie jest gładkie, a "nieco pofalowane".