To makro działa w taki sposób (jak zresztą każde makro utworzone dyrektywą #

), że w każdym miejscu w Twoim kodzie źródłowym, gdzie napisałeś
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
powyższy zapis zostanie przed kompilacją zmieniony na
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zaś sama instrukcja kryjąca się pod rozwinięciem tego makra to instrukcja pobierająca jeden bajt spod danego adresu (w pamięci Flash) i zwracająca jego wartość (której potem możesz użyć np. do podstawienia, choćby: OCR0A = pgm_read_byte(&gamma_correctionR[jakaś_liczba]); ).
Jako argument pgm_read_byte przyjmuje adres i, jak widać na powyższym przykładzie, adres ten otrzymuje. Jest to adres elementu tablicy gamma_correctionR o indeksie jakaś_liczba (w moim przykładzie).
A zatem zamiast pisać tę długą wersję pgm_read_byte...itd. możesz napisać np.:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Co spowoduje wpisanie do rejestru OCR0A wartości z szesnastego elementu tablicy gamma_correctionR zapisanej w pamięci programu.
Załóżmy że masz diodę podłączoną do procka anodą (czyli wystawienie stanu wysokiego na pinie powoduje jej zapalenie). Jeśli chcesz go używać w pętli do rozjaśniania diody w taki sposób, że, powiedzmy, stopień jasności będzie zmieniał się co 50 ms i masz nie więcej niż 8-bitową rozdzielczość skoków jasności (max 256 poziomów, wliczając 0 - stan wygaszenia), to możesz to zrobić tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Chyba teraz bez trudu dopiszesz sobie tuż za tą pętlą drugą pętlę, która tym razem będzie diodę ściemniać

Możesz skorzystać z wyinkrementowanej zmiennej "i", żeby tym razem ją zdekrementować do zera.
Oczywiście jeśli masz diodę podłączoną do pinu katodą, to powyższa instrukcja będzie diodę wygaszać, a nie rozjaśniać

A... i nie zapomnij podłączyć do projektu biblioteki util/delay.h
