top of page

PWM

Kolejnym krokiem po przerwaniach jest PWM. Krótko przypomnę co to PWM. Pulse width modulation – czyli modulacja szerokości impulsu. Zmieniamy współczynnik wypełnienia - stan wysoki jest podawany tylko przez jakąś część okresu. Możemy go użyć jako źródło sygnału impulsowego albo do zmniejszenia średniej wartości napięcia za okres. Dla przykładu mamy diodę podczepioną pod 5V. Będzie ona świecić bardzo jasno, jeżeli chcemy ją przyciemnić stosujemy wypełnienie mniejsze od 100%. Zastosowań jest bardzo dużo i nie widzę sensu ich omawiać.

W tym zadaniu bedziemy bazować na poprzednim kodzie z przerwaniami. Tutaj będziemy stosować PWM do sterowania jasnością 2 diod. Wykorzystamy pętle for do zmiany współczynnika wypełnienia. Przerwania będą wyłączać diody jak w poprzednim zadaniu. Atmega posiada 4 porty pwm i oznaczone są one jako OC.

Zaczynamy od rejestrów charakterystycznych dla PWM. Rejestr TCCR - Timer/Counter control register.

Chcemy ustawić PWM na porcie OC0, więc musimy ustawić rejestr TCCR0. Pierwszym ruchem jest uruchomienie trybu fast PWM (o trybach pracy więcej można przeczytać w nocie katalogowej). Robimy to za pomocą ustawienia dwóch bitów na 1

TCCR0 |= (1<<WGM01)|(1<<WGM00);

Zgodnie z tabelką:

Następnie ustawiamy bit COM odpowiedzialny za nadpisanie funkcji portu I/O czyli zamiast wejścia/wyjścia działa PWM.

TCCR0 |= (1<<COM01);

Ostatnim krokiem jest ustawienie preskalera tutaj odsyłam do artykułu: http://mikrokontrolery.blogspot.com/2011/03/prescaler-postscaler-co-to.html W naszym przykładzie ustawiamy go na 1 TCCR0 |= (1<<CS00); Drugie wyjście PWM ustawiamy analogicznie. Ostatnim krokiem do uruchomienia pwmu jest ustawienie jego wypełnienia ustawiamy je w przedziale 0-255.

Jedna pętla for służy do ściemniania, druga do rozjaśniania.

Gotowy kod: http://pastebin.com/tqnqwbJB


Wyróżnione posty
Ostatnie posty
Archiwum
Wyszukaj wg tagów
Nie ma jeszcze tagów.
Podążaj za nami
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page