cz5 1

cz5 1



Programowanie


w (B


W dniu dzisiejszym zmierzymy się z wyświetlaczem alfanumerycznym LCD, co jest znakomitą okazją do poznania kolejnych elementów języka C,

AVR-GCC nie posiada niestety wbudowanych funkcji obsługi wyświetlacza LCD takich, jakie znajdziesz w BASCOM-ie. Konieczne jest napisanie ich całkowicie od postaw: poczynając od najniższego poziomu wysterowania wyprowadzeń procesora, kończąc na funkcjach, których proste wywołanie spowoduje wykonanie całego zespołu czynności mających na celu inicjację wyświetlacza, jego czyszczenie, ustawienie kursora czy pisanie. Może to wydawać się trudne, jednak mam nadzieję, że uda mi się dziś pokazać dwie rzeczy:

1.    Przy odrobinie wprawy, siadając z dokumentacją w ręku, bardzo łatwo w C obsłużyć dowolne urządzenie, dzieląc interfejs niejako na kolejne warstwy. W ten sposób podążamy za opisem od wysterowania wyprowadzeń, przez kolejne komendy, aż do całych procedur wysyłających odpowiednie ich sekwencje.

2.    Raz napisany zestaw funkcji według powyższej zasady może być wykorzystany wielokrotnie. Konieczne może okazać się jedynie dostosowanie naszej „najniższej warstwy”, czyli zestawu funkcji zajmujących się wysterowaniem wyprowadzeń.

Mniej definicji portów

Zanim zajmiemy się obsługą samego wyświetlacza, poświęćmy chwilę uwagi obsłudze portów. Zauważyłeś może, że już w poprzednim §    j

programie, gdy chcieliśmy stworzyć jakąś nazwę symboliczną dla wyprowadzenia, definiowaliśmy oddzielne nazwy dla trzech rejestrów':

DDRx, PORTx, PINx. Sposób taki jest może i prosty, ale na pewno niewygodny. Może myślisz teraz podobnie jak ja, że wygodniej byłoby zdefiniować tylko, że interesuje nas na przykład port D i na tej podstawie odnosić się do potrzebnych w danym momencie rejestrów. Analizując zestawienie rejestrów, wydawać by się mogło, że dobrym rozwiązaniem jest wykorzystanie


faktu, iż odpowiednie rejestry są umieszczone zawsze (?) jeden za drugim. Kolejno, dla narastających adresów: PINx, DDRx, PORTx. Jednak analiza rodziny AVR ujawni elementy odbiegające od tej zasady. Sytuację taką mamy przykładowo dla AVRmcgal28. Odpowiedni dostęp można zrealizować znacznie pewniej, korzystając z możliwości preprocesora języka C.

W ramce ABC... C „makra” zawarłem informacje, które umożliwią zrozumienie rozwiązania naszego problemu zawartego na listingu 20. Po przeczytaniu informacji we wspomnianej ramce program powinien być już zrozumiały. Celem jego napisania było wypróbowanie, w możliwie prosty sposób, działania wszystkich makr upraszczających dostęp do portów. Zauważ, że teraz definicja odpowiednich portów składa się z odpowiedniej litery. Nie musimy tak jak poprzednio definiować oddzielnie wszystkich potrzebnych nam rejestrów.

Obsługa wyświetlacza Przygotowania

Rysunek 25 przedstawia przyporządkowanie wyprowadzeń na płytce prototypowej przy konfiguracji do pracy z wyświetlaczem LCD. W pierwszej wersji programu obsługi wyświetlacza wykorzystamy fakt, że wyprowadzenia danych wyświetlacza połączone są kolejno z wyprowadzeniami portu mikrokontrolera. Założenie takie zmniejszy uniwersalność programu,


z drugiej strony jednak umożliwi jego uproszczenie. Dodatkowo musimy wziąć pod uwagę, że płytka AVT3500 nie umożliwia odczytu danych z wyświetlacza. Sprawia to, że nie będziemy w stanie sprawdzić zajętości modułu wyświetlacza. Konieczne będzie czekanie przez najdłuższy czas, w którym dana instrukcja może być wykonywana.

W zrozumieniu dalszych listingów pomocny może być opis działania sterownika HD44780. Ja posługiwałem się opisem umieszczonym w „Elektronice dla Wszystkich” 11/97-1/98.

Kod programu będę przedstawiał po kawałku, jednocześnie omawiając przedstawiony fragment. Tak się składa, że program ma taką formę, bo był pisany „od góry do dołu”. Ponieważ opis będzie przebiegał tak samo jak pisanie, aby odtworzyć pełny program, wystarczy zapisać kolejno listingi 21 - 27.


tH £:

11 Q3li 04-


+PBD

-PBł

PB2

PB3

PB4

PB5

PB6

PB7

PDO

PD1

PD2

PD3

PD4

PD5

PD6


I. Wyjęte wyświetlacz*


ooftguracj* gdzie J3 znajduje^*


Ustawienie pozostałych zw


e być nieprawidłowe us irastu. Zmiana koblrasi


// Makra upraszczające dostęp do portów


// Konfiguracja portu

ddr(led_?okt) = 0x7c;

// Podciąganie przycisk

port(sw_port) |= l«swi


// Włączenie wszystkich diod port(led_port) &= ~0x7c;

// wyłączenie lewej strony whiłe(!C?iNCsw_port) & l«swi)) ?ort(led_fort) I- 0x0c;

// wyłączenie prawej strony whił e(! (?INCSW_P0RT) & l«SW2j) ?ort(led_port) I- 0x60;


// Definicje wyprowadzeń Sdefine LED_PORT D #define sw_port d Sdefine SWl 0 #defi ne SW2 1

// START


Rys. 25 Przyporządkowanie wyprowadzeń.


36 Październik 2005 Elektronika dla Wszystkich


Wyszukiwarka

Podobne podstrony:
63703 Image209 Programowanie cześć 5® fiesta ® +PB< Uwaga RS.T W dniu dzisiejszym zmierzymy się z
IMG?44 Warszawa, 12.08.2014 r. V Ds. 74/14 Notatka urzędowa W dniu dzisiejszym skontaktowałem się te
wzory4b •Wszyscy w dniu dzisiejszym czujemy się młodzi. więc Wódką Weselna nikomu nie
Zdjęcie008 2 Wszyscy w dniu dzisiejszym czujemy się młodzi, więc wódhg wesełrn nikomu nie
zdjecie4 W dniu dzisiejszym czujemy się mfodzi, więc"Wódfifl ‘Weselna nilipmu nie zaszbfdzi K
wzory4b •Wszyscy w dniu dzisiejszym czujemy się młodzi. więc Wódką Weselna nikomu nie
Zdjęcie008 2 Wszyscy w dniu dzisiejszym czujemy się młodzi, więc wódhg wesełrn nikomu nie
Co wysłać do wyświetlacza alfanumerycznego LCD z wejściem równoległym, aby poprawnie działał? Po
2.2. Wyświetlacz alfanumeryczny LCD Wykorzystywany w zestawie ZL9ARM wyświetlacz LCD (rysunek 5) jes
Grupa B Pytania, grupa B    k rfy Z jakich warstw składają się współczesne modele Zie
wiosnaII4 Przyjrzyj się uważnie ilustracji i powiedz, co jest primaaprilisowe na lej ilustracji, cz
PARMENIDESA Z ELEI 540 - 470 R.P.N.E Sprzeciwiając się H twierdzi, że to, co jest nie może przestać
DSCF5728 444 M. Kalinowska-Zdun dzają znaczne szkody. Mszyce i płaszczyńca zwalcza się po ich pojawi
Respektowanie - szacunek dla indywidualnych różnic. Trzeba się koncentrować na tym co jest w je

więcej podobnych podstron