Zakres laboratorium:
  1. Utrwalenie wiadomości o obsłudze portów mikrokontrolera – obsługa wejść
  2. Obsługa 4 przycisków
  3. Podłączenie wyświetlacza LCD i wykorzystanie biblioteki „LCD_HD44780”
  4. Obsługa klawiatury składającej się z 16 przycisków (klawiatura 4×4)
  5. Projekt – kalkulator
Zadania do wykonania:
  • Zadanie 1.1
  • Zadanie 2.1
  • Zadanie 2.2
  • Zadanie 2.3
  • Zadanie domowe

 

1. Utrwalenie wiadomości o obsłudze portów – obsługa wejść
DDRx PORTx PINx*
Wyjście stan niski 1 0
Wyjście stan wysoki 1 1
Wejście wysoka impedancja 0 0
Wejście PULL-UP 0 1
Odczyt wejścia – stan wysoki 0 x 1
Odczyt wejścia – stan niski 0 x 0

*-tylko do odczytu

Zadanie 1.1 – port jako wejście:

  • podłączyć dwie diody LED do dowolnych nóżek mikrokontrolera, skonfigurować wyprowadzenia jako wyjścia
  • ustawić PC0 jako wejście
  • podłączyć przewód do PC0, a drugi koniec podłączyć do GND (symulator przycisku – podłączone do GND – przycisk wciśnięty)
  • odczytu stanu wyprowadzenia dokonuje się na rejestrze PINx (PINC)
  • zapoznać się z działaniem makr „bit_is_set(sfr, bit)” i „bit_is_clear
  • stworzyć funkcję: przyciśnięcie przycisku (przewód podłączony do GND) – wszystkie diody świecą się. Przycisk puszczony (przewód odłączone od GND) – wszystkie diody są wyłączone
  • czemu po odłączeniu pojawiają się „dziwne” sytuacje? Jak zlikwidować ten problem?
  • rozwiązać powyższy problem.

Na rysunku poniżej przestawiono sposób fizycznego połączenia przycisków znajdujących się na płytce EDU. Taka konfiguracja pozwala na obsługę klawiatury składającej się z 16 przycisków, za pomocą 8 portów mikrokontolera – klawiatura matrycowa. Kolejne zadania z instrukcji pozwoli na zrozumienie w jaki sposób należy odczytywać informacje o przyciśniętym przycisku.

Klawiatura 4x4
Klawiatura 4×4

 

 

2. Obsługa 4 przycisków

Utworzyć nowy projekt i załadować pliki z standardowego szablonu aplikacji (pliki).

Należy przygotować funkcję „getKey4()”, która będzie zwracała numer przyciśniętego przycisku dla pierwszego wiersza. Każdy przycisk posiada na płytce numer np. dla elementu opisanego SW1, po jego naciśnięciu przygotowana funkcja powinna zwrócić wartość 1, dla SW2 wartość odpowiadająca to 2 itd. Jeśli żaden przycisk nie jest przyciśnięty to funkcja powinna zwrócić wartość 0. Do sprawdzenia, czy funkcja działa prawidłowo należy wykorzystać linijkę diodową – 1 dioda świecą oznacza przyciśnięty przycisk SW1 (diody liczymy od lewej strony).

Pierwsze kroki:

  • wyprowadzenia klawiatury K1-K4 należy podłączyć do portu PC0-PC3
  • wyprowadzenie W1 należy podłączyć do GND

Zadanie 2.1

  • skonfigurować wyprowadzenia PC0-PC3 jako wejścia z podciągnięciem do +5V (PULL-UP)
  • utworzyć funkcję zwracającą odpowiednią wartość (wykorzystać pętle „for” do sprawdzania, który przycisk jest przyciśnięty)
  • w głównej pętli programu należy wywoływać funkcję i sterować diodami na linijce diodowej zgodnie z zadaniem.
  • pokazać program prowadzącemu

Zadanie 2.2

  • zmienić funkcjonowanie wcześniejszej aplikacji w celu obserwacji problemów z wykorzystaniem przycisków
  • pierwsze przyciśnięcie przycisku SW1 uruchamia diodę 1, drugie przyciśnięcie powoduje jej wyłączenie (wciśnięty przycisk przez dłuższy czas nic nie zmienia w funkcjonowaniu)
  • dodać algorytm dla wszystkich 3 pozostałych przycisków aby funkcjonowały w analogiczny sposób jak SW1

Zadanie 2.3

  • dlaczego pojedyncze przyciśnięcie powoduje dziwne zachowanie? drgania styków – jak je wyeliminować
  • co się dzieje jak przyciśniemy przycisk dłużej? należy uodpornić program na takie zachowanie użytkownika (oczekiwać aż przycisk nie zostanie puszczony)

Poprawiony program należy pokazać prowadzącemu.

 

 

3. Podłączenie wyświetlacza LCD i wykorzystanie biblioteki “LCD_HD44780″

W celu umożliwienia łatwego testowania poprawnego działania funkcji z kolejnego zadania została przygotowana biblioteka do obsługi wyświetlacza LCD z funkcją LCD::showNumber(liczba). Funkcja przyjmuje jako argument liczbę z zakresu -2147483647 – 214748364, którą wyświetla na wyświetlaczu LCD.

Pierwsze kroki:

  • podłączyć wyświetlacz LCD z mikrokontrolerem według rysunku
Podłączenie wyświetlacza LCD
Podłączenie wyświetlacza LCD
  • dodać do programu bibliotekę (klasa) „LCD_HD44780
  • zapoznać z funkami biblioteki „writeText(…)”,  „goTo(…)”, „clear(…)”

Przykładowy sposób wykorzystania biblioteki LCD_HD44780:

 

Zadanie 3.1

  • wyświetlić w pierwszym wierszu wyświetlacza LCD imię pierwszej osoby z pary
  • wyświetlić w drugim wierszu wyświetlacza LCD imię drugiej osoby z pary
  • w przypadku pojawienia się efektu smużenia należy spowolnić wykonywanie pętli głównej za pomocą funkcji opóźniającej „_delay_ms(100)”.
  • działanie programu przedstawić prowadzącemu

Zadanie 3.2

  • wywołać funkcję LCD::showNumber(liczba), gdzie liczba to wartość zwracana przez funkcję z poprzedniego zadania
  • przetestować działanie

 

4. Obsługa klawiatury składającej się z 16 przycisków (klawiatura 4×4)

Utworzyć funkcję „getKey16()” aby obsługiwała całą klawiaturę składającą się z 16 przycisków. Klawiatura powinna być odporna na drgania styków i długi przyciśnięcie przycisku (jak w zadaniu 2.3). Obsługa klawiatury matrycowej polega na odpowiednim sterowaniu wierszami (podawanie po kolei stanu niskiego na W1,W2,W3,W4) i badaniu, czy jakiś przycisk (kolumna) ma stan niski – funkcja „getKey4()”.

Pierwsze kroki:

  • wyprowadzenia klawiatury K1-K4 należy podłączyć do portu PC0-PC3
  • wyprowadzenie W1-W4 należy podłączyć do PC4-PC7

Zadanie 4.1

  • skonfigurować wyprowadzenia PC0-PC3 jako wejścia z podciągnięciem do +5V (PULL-UP)
  • skonfigurować wyprowadzenia PC4-PC7 jako wyjścia, ustawić stan wysoki
  • dodać funkcję „getKey16()”, aby odczytywała dane z całej klawiatury zgodnie z wytycznymi (SW1->1,…, SW16->16), należy odpowiednio przemyśleć jak utworzyć pętle i jak zwracać wartość 0-16, która odpowiada przyciśniętemu przyciskowi
  • w celu obsługi wszystkich przycisków należy ustawiać dla jednego wiersza stan niski i sprawdzić, czy jakiś przycisk K1-K4 ma stan niski (jest przyciśnięty), jeśli tak to zwracamy numer przyciśniętego przycisku, jeśli nie to ustawiamy na testowanym wierszu stan wysoki i przechodzimy do kolejnego wiersza i powtarzamy całą operacje
  • wyświetlić na wyświetlaczu LCD informacje o przyciśniętym przycisku
5. Projekt – kalkulator

Należy przygotować program, który będzie realizował funkcje kalkulatora zgodnie z poniższymi wytycznymi. Wprowadzanie liczby, wynik obliczeń należy wyświetlać na wyświetlaczu LCD

Funkcje przycisków:

  • wprowadzenie cyfry 1 (SW9), wprowadzenie cyfry 2 (SW10), …,  wprowadzenie cyfry 9(SW3), wprowadzenie cyfry 0(SW13)
  • dodawanie (przycisk SW4)
  • odejmowanie (przycisk SW8)
  • mnożenie (przycisk SW12)
  • wynik działania „równa się” (przycisk SW16)
  • kasowanie – działanie przycisku „C” na kalkulatorze (przycisk SW15) (*)
  • możliwość wprowadzenia liczby ujemnej (przycisk  SW14) (*)

*- zadania na ocenę celującą (należy wykonać dwa)

Zadanie domowe (wykonuje każda osoba samodzielnie):

  • zapoznać się z tworzeniem schematów elektronicznych (Link1, Link2)
  • narysować schemat elektroniczny na podstawie układu z zadania 5 – „Projekt kalkulatora”
  • schematy mogą być wykonane w programie komputerowym lub narysowane odręcznie,
  • kompletne/prawidłowe schematy należy przynieść na kolejne zajęcia na kartce A4