![]() |
Wyjście Spis treści Poprzedni Następny
Autor artykułu: mgr Jerzy Wałaszek Konsultacja: Wojciech Grodowski, mgr inż. Janusz Wałaszek |
©2015 mgr
Jerzy Wałaszek
|
| Tematy pokrewne | Podrozdziały | |
| (w budowie) |
Regulacja świecenia diod LED Tablica Podsumowanie |
Regulacja świecenia diod LED |
|||||||||||||||||
|
Jasnością świecenia diody LED da się sterować za pomocą
ograniczania prądy, który przez diodę przepływa. Sposób ten jednak
jest dla nas mało przydatny, ponieważ mikrokontroler ATTiny13
posiada jedynie wyjścia cyfrowe. Na pierwszy rzut oka wydaje się
zatem, że nie będzie można regulować jasności świecenia diod LED.
Nic bardziej mylnego. Wykorzystamy bezwładność ludzkiego oka i
sterowanie impulsowe. Wyobraź sobie, że do diody LED wysyłamy szybko zmienny sygnał cyfrowy:
Gdy sygnał osiąga wartość 1, dioda LED świeci. Gdy sygnał ma wartość 0, dioda LED jest zgaszona. Jeśli sygnał ten zmienia się odpowiednio szybko (np. 30 razy w ciągu sekundy), to oko nie zauważy mrugania diody, co wiąże się ze skończoną szybkością spostrzegania zmian w odbieranym obrazie. Na tej zasadzie działa kino ruchome. Na ekranie są wyświetlane nieruchome obrazy, jednak dzieje się to 25 razy na sekundę. Oko odbiera tę serię obrazów jako obraz ruchomy. To samo dzieje się tutaj - dla naszego oka dioda LED będzie świeciła światłem ciągłym.
Regulując wypełnienie sygnału (czas trwania impulsu o wartości 1 w stosunku do czasu trwania stanu 0) wpływamy na czas świecenia diody. Im dużej dioda świeci, tym więcej wyśle energii, co nasze oko rozpozna jako wzrost jasności. W ten sposób możemy sterować jasnością świecenia diody LED. Regulacji wypełnienia dokonamy w pętli, która będzie cyklicznie wykonywana w programie. Przed pętlą diody będą gaszone. Gdy licznik pętli osiągnie określoną wartość, diody LED zostaną zapalone i w tym stanie dotrwają do zakończenia pętli.
Program mrugający diodami LED - wersja 1Do płytki bazowej APP000 podłącz programator oraz płytkę aplikacyjną APP001. Na płytce APP001 ustaw obie zworki J0 i J1 w położenie górne. Uruchom aplikację Eclipse, utwórz w niej nowy projekt dla ATTINY13, po czym załaduj do edytora poniższy program, skompiluj go i prześlij przez programator do mikrokontrolera na płytce APP000.
W programie pojawia się nowy rodzaj pętli. Jest to tzw. pętla iteracyjna. Iteracją nazywamy numerowany obieg pętli. W pętli iteracyjnej każdy obieg posiada swój numer. Do tego celu używamy dodatkowej zmiennej, którą nazywamy zmienną sterującą pętli lub po prostu licznikiem pętli (ang. loop counter). Pętla for pozwala w prosty sposób tworzyć pętle iteracyjne. Składnia jest następująca:
for(początek; kontynuacja; koniec) instrukcja;
for(początek; kontynuacja; koniec)
{
instrukcje; // dowolna liczba instrukcji
}
Pętla for działa w sposób następujący:
Najpierw zostaje wykonana instrukcja początkowa.
Instrukcja ta inicjuje licznik pętli, czyli określa numer
pierwszego obiegu:
Następnie wyliczony zostaje warunek kontynuacji. Jeśli jest on różny od zera (czyli jest prawdziwy), to jest wykonywana instrukcja, czyli pętla wykonuje obieg. Numer obiegu jest przechowywany przez zmienną i. Jeśli warunek jest równy zero (czyli jest fałszywy), to pętla zostaje przerwana i mikrokontroler wykonuje dalszą część programu. Warunek zwykle sprawdza stan licznika pętli.
Gdy instrukcja zostanie już wykonana, czyli gdy obieg pętli dobiegł do końca, zostaje wykonana instrukcja końca obiegu. Najczęściej instrukcja ta zwiększa licznik pętli (gdy obiegi są numerowane w górę: 0, 1, 2...) lub zmniejsza go (gdy obiegi są numerowane w dół: 5, 4, 3, ...).
Po modyfikacji licznika pętli następuje powrót do sprawdzania warunku kontynuacji i cykl się powtarza.
Program działa w sposób następujący:
Przed pętlą for zerujemy rejestr PORTB,
czyli ustawiamy wszystkie jego bity na 0. Spowoduje to zgaszenie
wszystkich diod D0...D4 na płytce APP001. Teraz uruchamiamy
pętlę, która wykona kolejno obiegi o numerach 0, 1, ... 254.
Numer obiegu jest przechowywany w zmiennej i. W każdym
obiegu sprawdzamy, czy i jest mniejsze od
współczynnika wypełnienia w. Załóżmy, że w
jest równe 100. Zatem dla obiegów od 0 do 99 warunek będzie
prawdziwy i diody będą zapalone. Od następnego obiegu 100 do 254
warunek stanie się fałszywy i diody zgasną. Im większe w
tym dłużej będą się świeciły diody, a więc ich światło wyda się
jaśniejsze. Po zakończeniu cyklu wypełnienie w jest
zwiększane o 1
(co w następnym cyklu pętli for spowoduje
wydłużenie czasu świecenia diod i w efekcie wzmocnienie ich
światła). Ponieważ w jest zmienną 8-bitową,
to po osiągnięciu wartości 255 kolejną wartością będzie 0
(to analogiczna sytuacja do przewinięcia się
licznika, np. licznik trzycyfrowy po osiągnięciu swojego
maksimum 999 przewija się na 000, tutaj mamy to samo). Po
tej operacji cały cykl się powtarza. W efekcie diody emitują
mrugające płynnie światło.
Program mrugający diodami LED - wersja 2Drugi program jest małą modyfikacją pierwszego. Tutaj współczynnik wypełnienia rośnie od 0 do 255, po czym znów maleje do 0 itd. W efekcie dostajemy ładną pulsację światła LED.
Poruszaj szybko obiema płytkami tam i z powrotem – zobaczysz wtedy efekt przerywanego światła diod. W dalszej części kursu pokażemy, jak podobne efekty uzyskiwać w sposób sprzętowy za pomocą wbudowanych w mikrokontroler urządzeń. Program sterujący jasnością świecenia diod LEDNa płytce APP001 ustaw zworki J0 i J1 w położenie dolne (do linii PB0 i PB1 zostaną dołączone przyciski W0 i W1). Napiszemy program, który reguluje jasność świecenia diod za pomocą przycisków. Naciśnięcie W0 będzie powodowało zmniejszenie jasności, a naciśnięcie W1 zwiększy jasność.
|
|||||||||||||||||
Podsumowanie |
||
Pętla iteracyjna: for(początek; kontynuacja; koniec) instrukcja;
for(początek; kontynuacja; koniec)
{
instrukcje; // dowolna liczba instrukcji
}
Definicja tablicy: typ nazwa[liczba_elementów]; Indeksy tablicy mają wartości od 0 do n - 1, gdzie n jest liczbą elementów. Element tablicy jest normalną zmienną i stosują się do niego wszystkie operacje dozwolone dla zmiennych: a[5] = 12; // Przypisanie a[2]++; // Modyfikacja c = a[1] - a[3]; // Wyrażenia Przesunięcie elementów w górę w tablicy n-elementowej. Na pierwszą pozycję trafia wartość v. Ostatni element jest tracony for(i = n - 1; i > 0; i--) a[i] = a[i - 1]; a[0] = v; Przesunięcie elementów w dół w tablicy n-elementowej. Na ostatnią pozycję trafia wartość v. Pierwszy element jest tracony for(i = 0; i < n - 1; i++) a[i] = a[i + 1]; a[n - 1] = v;
|
||
![]() | I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe