Zakres laboratorium:
  1. Utrwalenie wiadomości o obsłudze portów mikrokontrolera – obsługa wyjść, wejść
  2. Generowanie dźwięku – buzzer
  3. Obsługa wejść – obsługa 4 przycisków – drgania styków
  4. Sterowanie wyświetlaczem 7-segmentowym – 1 cyfra
  5. Sterowanie wyświetlaczem 7-segmentowym – 4 cyfry – multipleksowanie
1.Utrwalenie wiadomości o obsłudze portów mikrokontrolera – obsługa wyjść, wejść

Zadanie 1.1 (wspólne)

  • jak ustawić wyprowadzenie mikrokontrolera PB0 jako wyjście w stanie wysokim?
  • jak ustawić wyprowadzenie mikrokontrolera PB0 jako wyjście w stanie niskim?
  • co to jest stan wysokiej impedancji? jak można go uniknąć?
  • co to są drgania styków, jak z sobie z nimi radzić?
  • jak ustawić wejście PC0 w stanie wejścia z PULL-UP?
2.Generowanie dźwięku – buzzer
Schemat podłączenie buzzera na płytce EduTar-NANO

Zadanie 2.1 (wspólne)

  • jakim sygnałem sterujemy taki buzzer? Podłączyć za pomocą przewodu do sygnału sterującego i sprawdzić działanie

Zadanie 2.2

  • utworzyć program, który odlicza do 8, co 1sekund. Odliczanie zaprezentować za pomocą narastającego paska z diod LED – zaczynamy od wyłączonych diod LED, a kończymy jak wszystkie świecą
  • każde zwiększenie licznika o jeden jest sygnalizowane, krótkim sygnałem dźwiękowym generowanym przez buzzer
  • po odliczeniu do 8 wszystkie diody jednocześnie migają przez 5 sekund i jest przerywany sygnał akustyczny
  • po zakończeniu cyklu, program nic nie robi, kolejne uruchomienie odliczania wymaga zresetowania układu

 

3.Sterowanie wyświetlaczem 7-segmentowym – 1 cyfra

Zadanie 3.1 (wspólne)

  • jak działa taki wyświetlacz?
  • podłączyć przewody do wyświetlacza 7-segmentowego i wysterować odpowiednie segmenty tak aby została wyświetlona cyfra 2
Schemat podłączenie wyświetlacza 7-segmentowego na płytce EduTar-NANO

Zadanie 3.2

  • podłączyć wyświetlacz do mikrokontrolera, segmenty sterujemy portem D
  • załączenie cyfry 1, pin ,,7SEG_S1” podłączyć do pinu PC0
  • wysterować odpowiednie wyprowadzenia mikrokontrolera, aby obsługiwać wyświetlacz
  • utworzyć tablicę 10-elementową zawierającą konfiguracje pinów do wyświetlania odpowiednich cyfr, tab[0]- wyświetla 0, tab[5]-wyświetla 5
  • przygotowaną tablicę można łatwo podstawiać jako ustawienie staniu/niskiego wysokiego odpowiednich pinów np. PORTD=tab[4];
  • utworzyć program, który co 1 sekundę zwiększa licznik w zakresie 0-9, postęp wyświetla na wyświetlaczu 7-segmentowym
  • po odliczeniu do 9, następuje rozpoczęcie od nowa
4.Sterowanie wyświetlaczem 7-segmentowym – 4 cyfry – multipleksowanie

Zadanie 4.1

  • załączenie cyfry 2, pin ,,7SEG_S2” podłączyć do pinu PC1
  • załączenie cyfry 3, pin ,,7SEG_S3” podłączyć do pinu PC2
  • załączenie cyfry 4, pin ,,7SEG_S4” podłączyć do pinu PC3
  • utworzyć program, który wykorzysta multipleksowanie i wyświetli na wyświetlaczu 4 cyfrową dowolną liczbę

Zadanie 4.2

  • stworzyć timer do gotowania
  • za pomocą przycisków (podłączyć pod wybrane wejścia) można ustawić czas w sekundach jaki ma zostać odliczony
  • przycisk SW4 powoduje uruchomienie odliczania w dół
  • przycisk SW3 kasuje ustawiony czas, przerywa odliczanie
  • reprezentacja ustawiania czasu, odliczania ma odbywać się na wyświetlaczu 7 segmentowym
  • po odliczeniu czasu-odliczenie do 0, uruchamia się sygnał dźwiękowy przez 2 sekundy informujący, że ustawiony czas minął
  • program po zakończeniu sygnalizacji wraca do trybu ustawiania czasu

 

 

 

 

 

 

 

Zakres laboratorium 2017-2021 (nie aktualne)

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.

 

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
  • dodać do programu bibliotekę (bez klasy) “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

  • utworzyć zmienną int liczba, która za pomocą przycisku SW1 będzie zwiększana o 1, a SW2 zmniejszana o 1
  • pojedyncze przyciśnięciu przycisku zwiększa/zmniejsza zmienną – uodpornić program na drgania styków
  • wywołać funkcję LCD::showNumber(liczba)
  • 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()”.

Klawiatura 4x4
Klawiatura 4×4

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